JVM垃圾回收STW(Stop-The-World)代码演示

上一篇 << 下一篇 >>>JVM垃圾回收器的发展历程及使用场景汇总


Stop the World机制:在执行垃圾收集算法时,为了保证正确性,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起,它会导致系统全局的停顿。
注意:市面上所有的垃圾收集器都有Stop-The-World问题,开发中尽量不要调用 System.gc();

代码演示

new JaryeThread().start();
// 下列代码手动gc后,对打印结果的影响
new Thread(()->{
    ArrayList bytes = new ArrayList<>();
    while(true){
        for(int i=0;i<10;i++){
            bytes.add(new byte[1024*1024*10]);
        }
        if(bytes.size()>20){
            bytes.clear();
            //手动触发GC
            System.gc();
        }
    }
}).start();

static class JaryeThread extends Thread{
    public long startTime = System.currentTimeMillis();

    @Override
    public void run() {
        while (true) {
            try {
                long end = System.currentTimeMillis() - startTime;
                System.out.println((end / 1000) + "." + (end % 1000));
                Thread.sleep(1000);
            } catch (Exception e) {
            }
        }
    }
}
没有垃圾回收的响应结果:
0.0
1.1
2.1
3.1
4.1
……
有垃圾回收的响应结果:
0.0
1.14
2.19
3.29
4.31
5.34
6.39
7.43
8.44
9.60
10.77
11.93
12.105

相关文章链接:
<< << << << <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
<< << << << <<<服务器CPU飙升为100%问题排查及如何避免
<< << << << << << <<<一张图看懂CMS垃圾回收器的底层原理
<< << << << << <<

你可能感兴趣的:(JVM垃圾回收STW(Stop-The-World)代码演示)