java JVM 分代垃圾回收机制

        java中不同对象的生命周期是不一样的,不同周期对象课采用不同垃圾回收算法,以提高效率,根据对象活跃程度分为年轻代、年老代、持久代。JVM堆区划分为Eden、Survivor、Tenured/Old区。

年轻代
        所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分为Eden区和两个Survivor(一般为两个,也可多个)。

年老代
        在年轻代中经历N次垃圾回收后,仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

持久代
        存放静态文件,如java类、方法等,对垃圾回收没有显著影响

GC:  Garbage Collection 垃圾回收
Minor GC 
        用于清理年轻代,Eden满了,就触发Minor GC ,清理无用对象,把有用对象放到Survivor1或Survivor2中。

Major GC
        用于清理老年代。

Full GC
        清理年轻代、老年代区域,成本高,对系统性能产生影响

清理过程
1.        创建新对象,大多数放在Eden区

2.        Eden满了(或达到一定比例),触发Minor GC,   把有用的复制到Survivor1, 同时清空Eden区。

3.        Eden区再次满了,出发Minor GC, 把Eden和Survivor1中有用的,复制到Survivor2, 同时清空Eden,Survivor1。

4.        Eden区第三次满了,出发Minor GC, 把Eden和Survivor2中有用的,复制到Survivor1, 同时清空Eden,Survivor2。

        形成循环,Survoivor1和Survivor中来回清空、复制,过程中有一个Survivor处于空的状态用于下次复制的。

5.        重复多次(默认15),没有被Survivor清理的对象,复制到Old(Tenuerd)区.

6.        当Old达到一定比例,触发Major GC,清理老年代。        

7.        当Old满了,触发Full GC。注意,Full GC清理代价大,系统资源消耗高。

注:
1.        程序员可以像JVM提出垃圾回收请求,但是实际是否回收由JVM决定,程序员只提出清理请求建议,不能直接清理。

2.        Full GC清理代价大,系统资源消耗高,很多性能优化是针对Full GC做优化。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值