如何手动触发全量回收垃圾,如何立即触发垃圾回收
# A&Q 如何手动触发全量回收垃圾,如何立即触发垃圾回收?
有一次被问到了这个问题,初学Java的都知道,Java是一门自动垃圾回收的语言,开发者不需要关注垃圾回收,所以这个问题的答案就是:我们无法决定Java何时进行垃圾回收,但是可以建议Java进行垃圾回收,沿着这个问题,面试官还问了JavaGC的3个细节:
- Java是如何判断对象是否需要被回收的?有什么算法
- Java是如何回收的?有什么垃圾回收算法?
- 有什么垃圾收集算法?
还好我对JavaGC这一块比较熟悉,原来重头戏是这些~
这三个小问题不展开了,有兴趣的可以看一下:
一文带你明白Java垃圾回收 (opens new window)
回到这个问题上面:
垃圾回收的特征是什么?
- 垃圾回收机制只负责回收堆内存的对象,不会回收任何物理资源(例如数据库连接、网络IO等资源)
- 程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。(有 引用计数算法、可达性分析算法 判断对象是否需要回收)
- 在垃圾回收机制回收任何对象之前,总会先调用它的
finalize()
方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。
如何立即触发垃圾回收?
程序员唯一能做的就是通过调用 System. gc
(Runtime.getRuntime().gc()
也行)方法来“建议”执行垃圾收集器,但其
是否可以执行,什么时候执行却都是不可知的。
上次更新: 2024-05-23 10:33:15