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

时间:2019-09-02 13:23:06

标签: java memory-management garbage-collection heap

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

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

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

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

P.S。我已经搜寻了一个小时,但是我只找到答案,说明我不关心删除内存管理语言中的对象。

3 个答案:

答案 0 :(得分:5)

Java始终以安全性为重点,尽管从来没有像易用性那么重要。非垃圾收集的内存管理很难保证使用内存安全,尽管请参阅Rust,以了解更多信息。

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

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

答案 1 :(得分:4)

  

“它可以提高性能”

如何?显式释放内存本身需要时间。这比让GC发挥作用更好?

  

“减少已使用的内存量”

为什么要关心使用的内存?大多数现代应用程序都采用“高水位标记”策略,其中保留未使用的内存以供将来使用。

  

“他肯定知道不再需要了”

具有这种确定性的情况越来越少。部署在现代Servlet容器/ Web服务器/ Web框架上的任何Web应用程序,甚至是“ hello world”,都过于复杂,无法让开发人员决定内存管理。

答案 2 :(得分:1)

它或多或少。它调用Unsafe