本文想突出两个问题:
最近项目有两个问题
就针对这两个问题进行了分析和优化。
首先我们系统是内存32G,使用了大量的内存做为内存缓存数据。
结合业务和GC日志以及业务日志得出:
那既然已经看到问题的本质,那么我们应该怎么解决呢?
这四个方案是有先后顺序的,这些方案提出顺序也意味着我当时在执行实验的顺序,可以看出这是一个糟糕的方案顺序,不记得谁说的了应该是鲁迅吧:“调参JVM是迫不得已的选择!”。
在实验过程中细节比较多就不细讲了,就着重讲一下升级为G1的方案,因为我这篇文章的主要目的是学习G1。
-Xms24g -Xmx24g -XX:+UseG1GC -XX:MaxGCPauseMillis=95
//最大堆内存24G 使用G1GC,设置预期停顿时间是95ms
了解了这几个概念后我们来看,G1清理垃圾的过程是怎么进行的呢?