我想知道,为什么java(或基于gc的语言如C#、GO)除了gc之外没有任何直接内存管理工具。
我熟悉 JLS 和 JVM 规范,但我没有找到任何解释。
它可以提高性能(减少 gc 的工作量)并且当开发人员可以直接删除他确定不再需要的对象时可以减少使用的内存量。
我不熟悉 python 内存规范,但我知道,内存管理有 gc() 方法和关键字 del。
附言我在谷歌上搜索了一个小时,但我只找到描述我不应该关心删除内存管理语言中的对象的答案。
最佳答案
Java 一直以安全为中心,尽管从未像易用性那么重要。非垃圾收集内存管理很难保证内存安全使用,虽然见Rust好好尝试一下。
良好的 JVM 实现可以在某些时间紧迫的情况下堆栈分配“堆”对象。无论如何,短期对象的 GC 速度快得令人难以置信。
您可以使用标准 Java 类库 - java.nio.ByteBuffer.allocateDirect
在 GC 之外分配内存。 IIRC,目前还没有一种显式解除分配的方法。这确实需要 GC 追踪所有引用。如果您需要在整个过程中持续时间较长的固定基元数组,则该 API 会很好地工作。
关于java - 为什么java没有直接的内存管理工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757751/