Java中是否有一种类似于C语言的free()函数的方法来释放内存?还是将对象设置为null并依靠GC是唯一的选项?
free()
似乎没有人明确提到将对象引用设置为null,这是一种合法的技术,可以考虑“释放”内存。
null
例如,假设您在方法的开头声明了一个List,它的大小增长到非常大,但仅在方法的一半之前需要。此时,您可以将List引用设置为null,以便垃圾收集器在方法完成之前(并且引用无论如何都会超出作用域)可能回收此对象。
List
请注意,我在现实中很少使用此技术,但在处理非常大的数据结构时考虑一下是值得的。
Java使用托管内存,所以唯一可以分配内存的方法是使用“new”操作符,唯一可以释放内存的方法是依靠垃圾回收器。 这篇《 内存管理白皮书》(PDF)可能有助于解释正在发生什么。 您还可以调用System.gc()来建议立即运行垃圾回收器。 但是,Java运行时程序做出最终决定,而不是您的代码。 根据Java文档的规定,
System.gc()
调用gc方法建议Java虚拟机 努力回收未使用的对象, 以便将它们占用的内存可用于快速重新使用。当控制从该方法调用返回时,Java虚拟机已经尽力从所有废弃对象中回收了空间。
用户名或邮箱地址
密码