1.垃圾回收的目的是释放那些不再被任何活动对象引用的JAVA对象所占用的内存,在一个垃圾收集周期里,所有仍然被引用的对象都将被保留,而那些不再被引用的对象将被释放,其所占用的空间被回收来分配给新的对象
2.当内存分配线程找不到一块足够大的连续空间为新对象分配内存时,JVM将进行垃圾回收。
3.在程序中调用System.gc()并不能确保垃圾回收一定被执行,在任何一次垃圾回收前,都会先判断执行垃圾收集是否安全(非安全点包括正在为对象分配内存,优化CPU指令)
4.引用计数收集器记录了指向每个java对象的引用数,一旦指向某个对象的引用数为0,那么可以立即回收该对象。该方法的难点在于保障引用计数的准确性,以及如何处理循环引用对象(需java堆上的全局分析,增加算法复杂度)。
5.跟踪收集基于这样一个假设:所有活动对象都可以通过一个已知的初始活动对象集合的迭代引用找到。确定了初始对象之后,就可顺着这些对象的引用关系依次将引用所指向的对象标注为活动对象,知道所有被引用的对象都被标注,而没被标注的对象的内存就被回收。
6.分代垃圾收集将堆分为不同的空间(新生代和老年代),每个空间中保存不同年龄(对象存活的垃圾收集周期数)的对象,当新生代没有空间可分配时,新生代的活动对象就会被移动到老年代。老年代运行垃圾收集的频率较低,新生代运行垃圾收集的频率较高。