在Java中从内存中删除数组

60 浏览
0 Comments

在Java中从内存中删除数组

是否有一种类似于 C 语言的 free() 函数的方法可以在 Java 中释放内存?还是将对象设置为 null 并依赖于垃圾回收是唯一的选择?

admin 更改状态以发布 2023年5月22日
0
0 Comments

似乎没有人明确提到将对象引用设置为null,这是一种"释放"内存的合法技术,你可能需要考虑。

例如,假设你在方法的开头声明了一个List,这个列表增长到非常大,但只需要到方法的一半。此时,您可以将List引用设置为null,以便垃圾回收器在方法完成之前(并且引用无论如何都会超出范围)有可能回收此对象。

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

0
0 Comments

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

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

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

根据Java文档的说法,

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

0