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