为什么要分代
不同生命周期的对象采用不同的收集方式,提高回收效率
如何分代
持久代主要存放java类的类信息,与垃圾收集要收集的java对象关系不大。
- 年轻代:所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。当eden区满时,还存活的对象被复制到survivor区,当该区满时分配到另一个区,三个区都满的时候复制到年老区。
- 年老代:在年轻代经历了N次垃圾回收后任然存活的对象,就会被放到年老代中。年老代存放的都是一些生命周期较长的对象
- 持久代:用于存放静态文件。对垃圾回收没有显著影响,但有些应用可能动态生成或者调用一些class,这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。
什么情况下触发垃圾回收
- Scavenge GC–当新对象生成,并且在Eden申请空间失败时,救护触发Scavenge GC,清除非存活对象,并把存活的对象移动到Survivor区。不会影响到年老区,需要使用速度快、效率高的算法,使Eden尽快空闲出来。
- Full GC–对整个进行回收,所以要慢。对Jvm调优的过程中,很大一部分工作就是对Full GC的调节。可能导致Full GC:
①年老代被写满
②持久代被写满
③System.gc()被显示调用
④上一次GC之后Heap的各域分配策略动态变化
串行处理器:
–适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。
–缺点:只能用于小型应用
并行处理器:
–适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。
–缺点:垃圾收集过程中应用响应时间可能加长
并发处理器:
–适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。
Jvm调优总结–1:概念
Jvm调优总结–2:基本垃圾回收算法
Jvm调优总结–3:垃圾回收面临的问题
Jvm调优总结–4:分代垃圾回收
Jvm调优总结–5:典型配置