测试代码
public static void main(String[] args) throws InterruptedException {
List<Object> list=new ArrayList<>();
while (true){
int sleep=new Random().nextInt(100);
if (System.currentTimeMillis()%2==0){
list.clear();
}else{
for (int i=0;i<10000;i++){
Properties properties=new Properties();
properties.put("key_"+i,"value_"+System.currentTimeMillis()+i);
list.add(properties);
}
}
Thread.sleep(sleep);
}
}
配置信息
生成GC日志
-XX:+UseG1GC 代表使用G1垃圾收集器
-XX:MaxGCPauseMillis=100 垃圾收集最大停顿时间
-Xmx256m 代表堆内存最大大小
-XX:+PrintGCDetails 输出GC详细信息
-XX:+PrintGCTimeStamps 打印GC时间戳
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC 代表执行GC前和之后堆内存状态
-Xloggc:G:\y2\JVM专题\gc.log 代表日志输出目录
运行程序,等程序运行完会报堆内存溢出的错(运行的几秒就够分析啦)
打开https://gceasy.io/
官网
点击选择文件,找到刚刚运行,存储到的gc.log文件
打开点击分析
需要等待会儿
吞吐量
交互视图