垃圾回收算法
理解Throughput回收器
回收器三个基本操作——回收
 找到不使用的对象
 释放内存
 压缩堆碎片
 Minor GC和Full GC,每个操作都会标记,释放和压缩对应的目标分代
 [63.205s][info][gc,start ] GC(13) Pause Full (Ergonomics)
 [63.205s][info][gc,phases,start] GC(13) Marking Phase
 [63.314s][info][gc,phases ] GC(13) Marking Phase 109.273ms
 [63.314s][info][gc,phases,start] GC(13) Summary Phase
 [63.316s][info][gc,phases ] GC(13) Summary Phase 1.470ms
 [63.316s][info][gc,phases,start] GC(13) Adjust Roots
 [63.331s][info][gc,phases ] GC(13) Adjust Roots 14.642ms
 [63.331s][info][gc,phases,start] GC(13) Compaction Phase
 [63.482s][info][gc,phases ] GC(13) Compaction Phase 1150.792ms
 [64.482s][info][gc,phases,start] GC(13) Post Compact
 [64.546s][info][gc,phases ] GC(13) Post Compact 63.812ms
 [64.546s][info][gc,heap ] GC(13) PSYoungGen: 15808K->0K(339456K)
 [64.546s][info][gc,heap ] GC(13) ParOldGen: 457753K->392528K(554432K)
 [64.546s][info][gc,metaspace ] GC(13) Metaspace: 56728K->56728K(115392K)
 [64.546s][info][gc ] GC(13) Pause Full (Ergonomics)
 462M->383M(872M) 1336.708ms
 [64.546s][info][gc,cpu ] GC(13) User=4.446s Sys=0.01s Real=1.34s
 通过gc数据可以看到对程序的影响
堆大小的自适应优化和静态优化
围绕停顿时间进行throughput回收器进行优化
 1、时间和空间的取舍,更大的堆会消耗更多的内存,好处是应用程序有更高的吞吐量
 2、执行GC所需的时间长度,增加堆大小可以减少full gc,但是gc时间长,增加整体平均时间(平均时间的重要性)
通常不设置MaxGCPauseMillis标志,设置合理的值,如果顾小则会发生老年代很小
下图展示通过增加堆的方式提升程序的吞吐量




















