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

标签 java memory-management garbage-collection heap-memory

我想知道,为什么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/

相关文章:

java - Powermock - java.lang.IllegalStateException : Failed to transform class

排序程序中的 Java 错误

Python ctypes.string_at 释放行为

c++ - 需要优化 - 算法实现占用太多内存

javascript - 为什么 Math.random()(在 Chrome 中)分配需要垃圾收集器 (gc) 清理的内存?

c# - .Net Core 2 中 GC 如何与 DI 一起工作

Json.NET 和 GC 等待的 C# 服务性能问题

java - 如何通过单击主 Activity 中的自定义信息窗口来更改不同 Activity 中布局的 TextView

linux - 如何分配 4k 对齐的内存

java - 如何使用http post将多个参数传递给restful webservice