为什么 java 没有直接的内存管理工具?
Why java doesn't have direct memory management tools?
我想知道,为什么java(或者基于gc的语言比如C#,GO)除了gc就没有直接内存管理的工具了。
我熟悉 JLS 和 JVM 规范,但我没有找到任何解释。
当开发人员可以直接删除他确定不再需要的对象时,它可以提高性能(减少 gc 的工作量)并减少使用的内存量。
我不熟悉 python 内存规范,但我知道,有 gc() 方法和关键字 del 用于内存管理。
P.S。我在谷歌上搜索了一个小时,但我只找到描述我不应该关心删除内存管理语言中的对象的答案。
或多或少都有。它调用 Unsafe
Java 一直以安全为中心,尽管从未像易用性那么重要。非垃圾收集内存管理很难保证内存安全使用,但请参阅 Rust 了解相关内容。
好的 JVM 实现可以在某些时间紧迫的情况下堆栈分配 "heap" 对象。无论如何,短期对象的 GC 速度非常快。
您可以使用标准 Java Class 库 - java.nio.ByteBuffer.allocateDirect
在 GC 之外分配内存。 IIRC,目前还没有一种显式解除分配的方法。这确实需要 GC 追踪所有引用。 API 如果您需要固定的基元数组,这些数组将持续整个过程。
"It can boost performance"
怎么样?显式释放内存本身需要时间。这比让 GC 发挥它的魔力有什么好处呢?
"decrease amount of used memory"
为什么要关心已用内存?大多数现代应用程序都采用 "high water mark" 策略,它们保留未使用的内存以供将来使用。
"he surely know aren't needed anymore"
你有这种把握的情况越来越少了。部署在现代 servlet container/web server/web 框架上的任何 Web 应用程序,甚至 "hello world" 都过于复杂,无法让开发人员决定内存管理。
我想知道,为什么java(或者基于gc的语言比如C#,GO)除了gc就没有直接内存管理的工具了。
我熟悉 JLS 和 JVM 规范,但我没有找到任何解释。
当开发人员可以直接删除他确定不再需要的对象时,它可以提高性能(减少 gc 的工作量)并减少使用的内存量。
我不熟悉 python 内存规范,但我知道,有 gc() 方法和关键字 del 用于内存管理。
P.S。我在谷歌上搜索了一个小时,但我只找到描述我不应该关心删除内存管理语言中的对象的答案。
或多或少都有。它调用 Unsafe
Java 一直以安全为中心,尽管从未像易用性那么重要。非垃圾收集内存管理很难保证内存安全使用,但请参阅 Rust 了解相关内容。
好的 JVM 实现可以在某些时间紧迫的情况下堆栈分配 "heap" 对象。无论如何,短期对象的 GC 速度非常快。
您可以使用标准 Java Class 库 - java.nio.ByteBuffer.allocateDirect
在 GC 之外分配内存。 IIRC,目前还没有一种显式解除分配的方法。这确实需要 GC 追踪所有引用。 API 如果您需要固定的基元数组,这些数组将持续整个过程。
"It can boost performance"
怎么样?显式释放内存本身需要时间。这比让 GC 发挥它的魔力有什么好处呢?
"decrease amount of used memory"
为什么要关心已用内存?大多数现代应用程序都采用 "high water mark" 策略,它们保留未使用的内存以供将来使用。
"he surely know aren't needed anymore"
你有这种把握的情况越来越少了。部署在现代 servlet container/web server/web 框架上的任何 Web 应用程序,甚至 "hello world" 都过于复杂,无法让开发人员决定内存管理。