管理Java中的内存

35 浏览
0 Comments

管理Java中的内存

Java中是否有一种类似于C语言的free()函数的方法来释放内存?还是将对象设置为null并依靠GC是唯一的选项?

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

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

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

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

0
0 Comments

Java使用托管内存,所以唯一可以分配内存的方法是使用“new”操作符,唯一可以释放内存的方法是依靠垃圾回收器。
这篇《 内存管理白皮书》(PDF)可能有助于解释正在发生什么。
您还可以调用System.gc()来建议立即运行垃圾回收器。 但是,Java运行时程序做出最终决定,而不是您的代码。
根据Java文档的规定,

调用gc方法建议Java虚拟机
努力回收未使用的对象,
以便将它们占用的内存可用于快速重新使用。当控制从该方法调用返回时,Java虚拟机已经尽力从所有废弃对象中回收了空间。

0