이 기사는 주로 Java 코드 일시 중지, jvm의 스레드 및 기타 관련 내용을 포함하여 jvm의 Java 가비지 수집 및 stw에 대한 빠른 이해를 소개합니다. 여전히 필요한 친구가 참조할 수 있습니다.
STW라고 하는 Java의 Stop-The-World 메커니즘은 가비지 수집 알고리즘을 실행할 때 Java 애플리케이션의 다른 모든 스레드가 일시 중지된다는 것입니다(가비지 수집 도우미 제외). Java의 전역 일시 중지 현상, 전역 일시 중지, 모든 Java 코드 중지, 기본 코드는 실행될 수 있지만 JVM과 상호 작용할 수 없는 현상은 대부분 gc로 인해 발생합니다.
GC 중 STW(Stop the World)는 모두의 가장 큰 적입니다. 하지만 많은 사람들은 GC 외에도 JVM에서도 일시정지가 발생한다는 사실을 모르고 있을 수 있습니다.
JVM에는 특별한 스레드인 VM 스레드가 있습니다. 이는 GC 디스패치, 스레드 덤프 등과 같은 특별한 VM 작업을 수행하는 데 특별히 사용됩니다. 이러한 작업을 수행하려면 전체 힙과 모든 스레드의 상태가 필요합니다. 정적이어야만 일관성을 얻을 수 있습니다. 이에 JVM에서는 Safe Point라는 개념을 도입하고, VM Operation이 필요할 때 모든 Thread에게 Static Safe Point에 진입하도록 알리는 방법을 찾았다.
안전 지점을 트리거하는 기타 VM 작업에는 다음이 포함됩니다.
3. 편향된 잠금을 취소합니다.
4. 다양한 디버그 작업(예: 스레드 덤프 또는 교착 상태 확인)
JVM에 어떤 일이 발생했는지 확인하세요.
가장 간단한 방법은 JVM 시작 매개변수의 GC 매개변수에 문장을 하나 더 추가하는 것입니다.
-XX:+PrintGCApplicationStoppedTime
GC 로그에 모든 JVM 일시 중지 시간(GC뿐만 아니라)이 인쇄됩니다. 내부에.
2016-08-22T00:19:49.559+0800: 219.140: 애플리케이션 스레드가 중지된 총 시간: 0.0053630초
하지만 JDK 1.7.40 이전 버전에서는 타임스탬프를 인쇄하지 않았기 때문에 JVM이 중지된 시간만 알 수 있고 언제 중지했는지는 알 수 없습니다. 이때 간단한 방법은 "-XX:+PrintGCApplicationConcurrentTime"을 추가하여 두 번의 일시 중지 사이에 JVM의 정상 실행 시간을 인쇄하는 것입니다(또한 타임스탬프 없음). 그러나 최소한 타임스탬프가 있는 GC 로그와 함께 사용하여 역전할 수 있습니다. 그만해요 이제 그럴 시간이 됐어요.
2016-08-22T00:19:50.183+0800: 219.764: 적용 시간: 5.6240430초
이번에는 유사한 내용이 stdout
vmop에서 인쇄됩니다 [Threads : Total _running wait_to_block] 1913.425 : gencollectforallocation 55 2 0 ] [time: spin block sync cleanup vmop] page_trap_count[ 0 0 0 0 6 ] 0
이 로그는 두 개의 섹션으로 나누어집니다. 첫 번째 섹션은 타임스탬프, VM 작업 유형 및 스레드입니다. overview
total: 안전 포인트의 전체 스레드 수
initially_running: 안전 포인트 시작 시 실행 중인 상태의 스레드 수
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/dev/shm/vm.log
위 내용은 jvm의 Java 가비지 수집 및 stw 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!