如何在Java中释放内存?

2022-08-31 07:01:57

有没有办法在Java中释放内存,类似于C的函数?或者,将对象设置为 null 并依赖 GC 是唯一的选择?free()


答案 1

Java 使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依赖垃圾回收器。new

内存管理白皮书 (PDF) 可能有助于解释正在发生的事情。

您也可以调用以建议垃圾回收器立即运行。但是,Java 运行时做出最终决定,而不是您的代码。System.gc()

根据 Java 文档

调用 gc 方法表明 Java 虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可供快速重用。当控件从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。


答案 2

似乎没有人提到显式设置对象引用,这是一种“释放”内存的合法技术,您可能需要考虑。null

例如,假设您在方法的开头声明了一个,该方法的大小变得非常大,但直到方法完成一半时才需要。此时,您可以将 List 引用设置为允许垃圾回收器在方法完成之前潜在地回收此对象(并且引用无论如何都超出范围)。List<String>null

请注意,我很少在现实中使用这种技术,但在处理非常大的数据结构时值得考虑。