堆和方法区所有线程共享,并且都在JVM启动时创建,一直得运行到JVM停止时.因此它们没法随着线程的创建而创建、线程的结束而释放....因此,堆和方法区的内存回收具有不确定性,因此垃圾收集器在回收堆和方法区内存的时候花了一点心思.
1 Java堆内存的回收
1.1 如何判定哪些对象需要回收?...执行F-Queue队列中的finalize()方法
虚拟机会以较低的优先级执行这些finalize()方法们,也不会确保所有的finalize()方法都会执行结束.如果finalize()方法中出现耗时操作...,虚拟机就直接停止执行,将该对象清除
对象重生或死亡
如果在执行finalize()方法时,将this赋给了某一个引用,那么该对象就重生了.如果没有,那么就会被垃圾收集器清除....在回收垃圾前,标记过程仍与"标记-清除"算法一样,但后续不是直接清理可回收对象,而是让所有存活的对象移到一端,然后直接清掉端边界之外的内存.
?