JVM垃圾回收机制是怎样的,何时触发YoungGC或FullGC操作?
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)关于垃圾回收 JAVA的垃圾回收需要完成三件事情: 1、哪些内存需要回收 2、什么时候回收 3、如何回收 下面就从这三个问题出发去了解Java的垃圾回收机制。 (二)哪些垃圾需要回收 在垃圾回收之前,首要的问题是确定哪些垃圾需要被回收,现在Java通过根搜索算法(GC Roots Tracing)来判断一个对象是否存活,这个算法的思路就是通过一系列名为“ GC Roots ”的对象作为起始点,从这些节点向下搜索,当GC Roots到达不了这个某个对象时(或者说某个对象没有被任何其他对象所引用),就证明这个对象是不可用的,这些对象会被判定为需要回收的对象。 如图,ObjC是不可达的,这个对象就是需要被回收的对象。 在Java语言中,可作为GC Roots的对象包括下面这些: 1、虚拟机栈(栈帧中的本地变量表)中引用的对象 2、方法区中的类静态属性引用的对象 3、方法区中的常量引用的对象 4、本地方法栈(Native方法)引用的对象 (三)什么时候回收 关于如何回收的问题,我参考了《深入理解Java虚拟机》,根搜索算法中不可达的对象,并不是立刻就会被回收,而是会经过一次标记: 如果对象没有覆盖finalize()方法,或者finalize(