JavaJava 核心技术

JVM垃圾回收-STW(Stop-The-World)

2020-12-13  本文已影响0人  迦叶_金色的人生_荣耀而又辉煌

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

代码演示

new JaryeThread().start();
// 下列代码手动gc后,对打印结果的影响
new Thread(()->{
    ArrayList<byte[]> 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
上一篇下一篇

猜你喜欢

热点阅读