JVM 내부 들여다보기 - 왜 JVM에 STW 단계가 필요할까
이 글은 Java의 JVM(Java Virtual Machine) 내부에 대한 기본적인 이해를 제공. 특히, JVM이 'Stop-the-world' (STW) 단계를 필요로 하는 이유에 초점을 맞추고 있음.
STW 단계의 필요성: Java 개발자들은 일반적으로 가비지 컬렉터가 죽은 객체를 청소하기 위해 STW 단계를 필요로 한다고 알고 있음. 그러나 가비지 컬렉션 외에도, JIT 컴파일러가 일부 컴파일을 최적화 해제하고 편향된 잠금을 해제하기 위해 STW 단계가 필요.
작동 방식: JVM에서 애플리케이션 스레드가 실행되는 동안, JVM은 STW 단계에서 일부 작업을 수행해야 할 필요가 있음. 이를 위해 모든 스레드에게 잠들라는 글로벌 세이프포인트 요청을 시작. 각 스레드는 이 정보를 알아내고 잠들어야 함. 이는 JIT 컴파일러에 의해 생성된 어셈블리 코드의 한 줄과 인터프리터의 간단한 단계로 확인.
STW 단계의 중요성: STW 단계는 전체 JVM을 중단시키므로, 하나의 JVM에 배포된 여러 애플리케이션에 영향을 미침. 세이프포인트에 도달하는 가장 느린 스레드의 시간은 전체 애플리케이션의 속도를 늦출 수 있음.
로그 기록: 세이프포인트는 통합 로거에서 전용 로그를 가지고 있으며, 이는 'Xlog:safepoint'로 활성화할 수 있음. 이 로그는 STW 단계에 대한 자세한 정보를 제공하며, 애플리케이션의 시간 분배를 보여주는 차트를 생성하는 데 사용될 수 있음.
자세한 내용은 : https://krzysztofslusarski.github.io/2020/11/13/stw.html
