GC研究分析
JVM在进行GC时,并不是对这三个区域统一回收
●新生代
●幸存区
●老年区
GC两种类:轻GC(Minor GC),重GC(Full GC)
题目:
●JVM的内存模型和分区~详细到每个区放什么?
●堆里面的分区有哪些?Eden、from、to、老年区Old Area
●GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数器
●轻GC和重GC分别在什么时候发生?
引用计数器
复制算法
复制算法优点:没有内存的碎片
复制算法缺点:浪费了内存空间,幸存区多了一半空间永远是空的to,假设对象100%存活(极端情况下)
复制算法最佳使用场景:对象存活度较低的时候,新生区~
标记清除
优点:不需要额外的空间!
缺点:两次扫描,严重浪费时间,会产生内存碎片。
标记压缩
标记清除压缩
先标记清除五次
再压缩
总结:
内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
内存整齐度:复制算法=标记清除算法>标记压缩算法
内存利用率:标记压缩算法=标记清除算法>复制算法
思考一个问题:难道没有最优算法吗?
答案:没有,没有最好的算法,只有最合适的算法
年轻代:
存活率低
复制算法
老年代
区域大:存活率
标记清除(内存碎片不是太多)+标记压缩混合 实现
一天时间学JVM不现实,要深究,必须花时间,多看面试题,以及《深入理解JVM》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。