GC钻研剖析


JVM在进行GC时,并不是对这三个区域对立回收
●新生代
●幸存区
●老年区
GC两品种:轻GC(Minor GC),重GC(Full GC)
题目:
●JVM的内存模型和分区~具体到每个区放什么?
●堆外面的分区有哪些?Eden、from、to、老年区Old Area
●GC的算法有哪些?标记革除法,标记压缩,复制算法,援用计数器
●轻GC和重GC别离在什么时候产生?
援用计数器

复制算法

复制算法长处:没有内存的碎片
复制算法毛病:节约了内存空间,幸存区多了一半空间永远是空的to,假如对象100%存活(极其状况下)
复制算法最佳应用场景:对象存活度较低的时候,新生区~
标记革除

长处:不须要额定的空间!
毛病:两次扫描,重大浪费时间,会产生内存碎片。
标记压缩

标记革除压缩
先标记革除五次

再压缩

总结:

内存效率:复制算法>标记革除算法>标记压缩算法(工夫复杂度)
内存参差度:复制算法=标记革除算法>标记压缩算法
内存利用率:标记压缩算法=标记革除算法>复制算法
思考一个问题:难道没有最优算法吗?
答案:没有,没有最好的算法,只有最合适的算法

年老代:
存活率低
复制算法
老年代
区域大:存活率
标记革除(内存碎片不是太多)+标记压缩混合 实现

一天工夫学JVM不事实,要深究,必须花工夫,多看面试题,以及《深刻了解JVM》