垃圾回收主要发生在堆区
先了解一下堆区的结构
首先GC主要分为大GC和小GC,小GC主要分布在新生区,大GC
主要发生在养老区,当伊甸区达到最大容量的百分之七十的时候就会触发小GC,当在伊甸区的每个对象熬过一次就会到达幸存者区,幸存者区可以分为from区和to区,谁是空的谁就是to区,当在幸存者区熬过一定次数的对象就会到达养老区,当养老区满时,就会触发大GC。
GC算法一般包括 复制算法,标记清除算法,标记整理算法。
1.新生代一般使用复制算法
复制算法:将活动对象复制到另一个空间,然后把原来的空间清空。
优点:布局比标记清除算法要整齐
缺点:当存活对象过多时,耗费大量的内存。
2.老年代一般都是标记整理和标记清除混合使用。
标记清除算法:对存活的对象进行标记,然后对扫描整个内存,回收未被标记的对象。
优点:不会有额外的 空间
缺点:进行两次扫描,耗时严重。会产生大量的碎片。
标记整理算法:标记所有的存活对象,然后整理所有存活的对象的引用地址。
优点:内存利用率比较高。
缺点:效率是最慢的。