请描述你对GC的理解 ?
1、Java 中为什么会有 GC 机制呢?
• 安全性考虑; -- for security.
• 减少内存泄露; -- erase memory leak in some degree.
• 减少程序员工作量。 -- Programmers don't worry about memory releasing.
2、 对于 Java 的 GC 哪些内存需要回收 ?
内存运行时 JVM 会有一个运行时数据区来管理内存。GC 主要进行回收的内存是 JVM 中的方法区和堆。
但方法区和堆就不同了,一个接口的多个实现类需要的内存可能不一样,我们只有在程序运行期间才会知道会创建哪些对象,这部分内存的分配和回收都是动态的, GC 主要关注的是这部分内存。
3. Java 的 GC 什么时候回收垃圾?
对于堆中的对象,主要用可达性分析判断一个对象是否还存在引用,如果该对象没有任何引用就应该被回收。而根据我们实际对引用的不同需求,又分成了 4 中引用,每种引用的回收机制也是不同的。
对于方法区中的常量和类,当一个常量没有任何对象引用它,它就可以被回收了。而对于类,如果可以判定它为无用类,就可以被回收了。