是否有一种类似于C语言的free()函数用于释放Java中的内存?或者将对象设置为null并依赖垃圾回收是唯一的选择吗?
free()
似乎没有人明确提到将对象引用设置为null,这是一种合法的释放内存的技术,你可能要考虑它。
null
例如,假设你在方法的开头声明了一个List,它增长到非常大的大小,但只需要到方法的一半。此时,你可以将List引用设置为null,以便在方法完成之前(并且引用已经超出作用域)让垃圾收集器有可能回收这个对象。
List
请注意,我在现实中很少使用这种技术,但在处理非常大的数据结构时值得考虑。
Java使用托管内存,所以你唯一可以分配内存的方法是使用new操作符,而唯一可以释放内存的方法是依赖垃圾回收器。
new
这个内存管理白皮书(PDF)或许有助于解释正在发生什么。
你也可以调用System.gc()建议垃圾回收器立即运行。然而,Java运行时做出最终决定,而不是你的代码。
System.gc()
根据Java文档,
调用gc方法建议Java虚拟机 花费努力回收未使用的对象, 以便使它们目前所占用的内存 可供快速重用。当方法调用返回时, Java虚拟机已经尽最大努力回收所有废弃对象所占用的空间。 该内容为空,因为它位于一个HTML块引用标记中。
调用gc方法建议Java虚拟机 花费努力回收未使用的对象, 以便使它们目前所占用的内存 可供快速重用。当方法调用返回时, Java虚拟机已经尽最大努力回收所有废弃对象所占用的空间。
该内容为空,因为它位于一个HTML块引用标记中。
用户名或邮箱地址
密码