文章目录
前言
本文主要介绍垃圾收集器采用的各种策略来帮助自己进行更高效的垃圾收集。
1.收集器选择策略
1.1 Epslion收集器
该收集器根本没有收集垃圾的功能,但是垃圾收集器的功能不止是它名字表现的那样,他还有内存分配和管理、与虚拟机的协作等作用,这些也都是很重要的。该收集器可以运用于那些需要在数秒钟之内就能分配好内存的微服务应用,Epslion收集器就是最好的选择。
1.2 收集器权衡
数据分析,科学计算类的任务,吞吐量是关键
SLA应用,停顿时间是关键
嵌入式和客户端,垃圾所在内存是关键,需要快速清理掉垃圾。
2. 内存分配和回收策略
2.1 Eden率先分配
产生的新对象优先分配到Eden中,当Eden快满的时候采用一次MinorGC回收新生代Eden的垃圾。
2.2 大对象直接进入老年代
因为大对象很大可能会到达新生代的最大存储临界区,频繁触发MinorGC,增大开销。且大对象如果一直存活,在新生代常采用的标记复制算法的复制阶段也会开销甚大,所以直接进入老年区。
2.3 长期存活对象进入老年代
新生代在熬过第一次MinorGC后,就可以被复制到Survivor区(如果容纳的下的话),新生代的对象每熬过一次MinorGC年龄便会+1,可以通过参数设置年龄阈值,规定到达多少年龄的对象进入老年代。
2.4 动态对象年龄判定
不一定所有对象一定要到达年龄阈值才能进入老年代,当Survivor区中相同年龄的对象大小总和到达一半的时候就,大于这个年龄段的可以进入老年代
2.5 空间分配担保
Survivor不一定能容得下抗住MinorGC的对象,这个时候为了保证这些容不下的对象无处可去,老年代需要做空间分配的担保
当老年代连续空闲空间大于新生代所有空间时,下一次MinorGC是安全的。
如果不大于,那么看取每次MinorGC后转入老年代的平均值,大于这个平均值,也可以,但仍然是赌博