为什么Java没有直接的内存管理工具?

Gci*_*bax 6 java heap garbage-collection memory-management

我想知道,为什么Java(或基于gc的语言,如C#,GO)除了gc之外,没有其他任何用于直接内存管理工具的工具。

我熟悉JLS和JVM规范,但是没有找到任何解释。

当开发人员可以直接删除他肯定不再需要的对象时,它可以提高性能(减少gc的工作量)并减少使用的内存量。

我不熟悉python内存规范,但是我知道,有gc()方法和关键字del用于内存管理。

PS我搜索了一个小时,但是我只能找到答案,说明我不关心删除内存管理语言中的对象。

Tom*_*ine 5

Java始终以安全性为重点,尽管它从未像易用性那么重要。非垃圾收集的内存管理很难保证使用内存安全,尽管请参阅Rust以获得很好的帮助。

好的JVM实现可以在一些时间紧迫的情况下对“堆”对象进行堆栈分配。无论如何,短命对象的GC速度非常快。

您可以使用标准Java类库-在GC之外分配内存java.nio.ByteBuffer.allocateDirect。IIRC还没有一种显式取消分配的方法。确实确实需要GC跟踪所有引用。如果您需要固定的原语数组,该API会持续很长时间,则该API会很好用。