垃圾回收的一些简记

垃圾回收

1)负责释放无用内存;在jvm中优先级相当低的
2)垃圾回收器(内存回收程序)并不总是工作,只有当内存资源告急时,垃圾回收器才会工作。
3)即使垃圾回收器工作,finalize()也不一定得到执行,这是由于程序中的其他线程的优先级远远高于执行finalize()函数线程的优先级。或者说,如果是等待清理队列中如果又被调用,则不会执行finallize()。所以说:Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize()不一定会得到执行。
4)finalize()在被JVM回收时会进行判断:1、如果此对象finalize未被执行过,则执行(此为第一次标记),并放置此对象到F-Queue中;此时,若在下次GC(garbage-collector)之前,重新与GC-ROOTS建立引用连接,则对象"复活",下次GC时如果此对象又被GC(此为第二次标记),则直接进行回收,因为finalize只执行一次。2、如果此对象finalize已经执行过一次,则在GC时不执行finalize,直接回收。也就是说,一个对象只有被标记两次才会被GC。
5)JVM一旦启动,就会创建一个守护线程来监测是否需要有对象内存被释放。不用程序员自己创建线程。
6)内存回收程序不可以在指定的时间释放内存对象:System.gc()只是提醒JVM可以进行一次FullGC,但是不知道什么时候真正执行的。
7)进入DEAD的线程,还可以恢复,不一定就被GC回收。  

原文地址:https://www.cnblogs.com/yangrongkuan/p/12021395.html