堆内存:
存放对象的实例,垃圾收集器管理的主要区域,分为新生代,老年代
新生代又分为Eden区域, Survivor区域
Survivor区域又分为form,to区域
新生代Eden:新对象和没有达到一定年龄的对象保存在该区域
老年代Tenured:新创建的超大对象,长时间被使用的对象,经过GC清理后还存活的对象
元空间:像一些方法中操作的参数,临时的对象都保存在元空间
1.创建一个新对象,会把这个新对象的实例放在新生代的Eden区域,当Eden区空间不足,无法保存创建新的对象时则会触发MinerGC进行清理
2.当经过一次MinorGC进行清理后Eden区还存活的一些对象会通过复制算法把它复制到Survivor区(存活区)的from 区(原to区).
3.Survivor区的两块区域是相同大小的两块区域,是可以互相交换的,交换以后form的叫to,to的叫from,交换的过程中会把其中一个的对象复制到另外一个,保证有一个是空的.
--经历一次MinorGC,如果Eden区有对象被保存到Survivor区的原to区时,然后对原from区域中进行一次清理,把清理后还依然存活的对象复制到原to区,然后把原to区更名为from区,把原form区更名为to区,这样就保证每次to区都是空的
4.当原from区进行MinorGC进行清理后往原to区进行复制的时候,原to区复制一部分对象后满了的情况下,会将原form区的剩余对象复制到老年代区域.
--另外Survivor区中的对象每熬过一次MinorGC年龄就会增长一次,还可以通过设置年龄阈值参数:-XX:MaxTenuringThreshold,当年龄增到到我们设定的阈值时,将该对象直接复制到老年代中.
5.老年代区域没有可用空间时会触发Full GC,Full GC会扫描整个老年代区域将还存活的对象进行标记,然后把不存活的对象进行清除.
优点:空间内存活对象多的情况下,效率高.
缺点:直接回收不存活对象所占用的内存空间,回收后造成整个空间不连贯,产生内存碎片.
堆内存空间满的情况会抛出OutOfMemoryError异常.
GC的垃圾回收策略:
串行策略,并行策略,并发策略
GC的垃圾回收算法:
复制,标记-清除,标记-清除-整理