hyeonga_code

JVM_15_Stop the World 일시적인 정지 본문

JVM

JVM_15_Stop the World 일시적인 정지

hyeonga 2024. 5. 10. 08:59
반응형

 

 

JVM_17_GC 다시 알기 (수정사항)

1. GC 는 reachable 만 남기는 것GC 이름대로 unreachable이 중요한 것이 아니라 reachable한 객체를 어떻게 남기는 지가 중요한 것살아있는 객체를 어떻게 살릴것인지가 관건입니다.Oracle의 GC 개발자가 만

hyeonga493.tistory.com

 

Stop the World

GC가 동작하기 위해 GC 스레드가 실행될 때에는 어플리케이션과 관련된 다른 스레드는 실행되지 않는 것을 의미합니다.
GC가 동작함으로써 JVM의 메모리를 확보할 수 있다는 장점이 있습니다.
다른 스레드들이 멈추므로 프로그램의 성능이 저하되는 단점이 있습니다.

Minor GC / Major GC 둘 다 실행될 때에는 STW 가 발생하여 다른 스레드들이 중지합니다.
Minor GC는 작은 Young 영역에 대해 일어나는 현상으로 짧습니다.
Major GC는 큰 Old 영역에 대해 일어나는 현상으로 GC가 오랜 시간동안 지속됩니다.


시간과 처리율 (Stop The World 와 Throughput)

- 처리율 : GC에 소요되지 않은 총 시간의 백분율입니다.
STW가 짧은 경우 GC 스레드가 차지하는 메모리가 커지므로 처리율이 낮아집니다.
STW가 긴 경우 GC 스레드가 차지하는 메모리가 작아져 처리율이 좋아집니다.
처리율을 향상시키기 위해 Heap 영역의 크기를 키우는 경우 스캔하고 관리해야하는 메모리가 커져 STW가 증가합니다.
STW를 최소화 하면 짧은 GC가 자주 발생하여 처리율이 떨어집니다.

 

 

왜 STW가 필요할까?

메모리의 일관성 보장
객체 참조의 정확한 추적
메모리 단편화 방지
성능 최적화

 

STW가 필요한 단계에서 실행하지 않으면?

초기 마크 단계에서 `Stop the World` 없이 수행하는 경우 접근이 가능한 객체와 불가능한 객체를 정확하게 구분하지 못할 가능성이 높아집니다. 참조가 계속 업데이트 되는 상황에서 라이브 객체를 올바르게 식별하지 못한다면 이 객체를 참조하는 다른 객체도 잘못된 처리가 될 수 있습니다.
메모리 파편화를 정리하기 위해 컴팩트 단계가 필요합니다.
다시 이용할 수 있도록 공간을 효율적으로 모으려면 주소가 이동되고, 이동된 주소를 객체가 참조할 수 있게 해야 하기 때문에 기존에 실행되던 작업들을 중지하고 작업해야 합니다.


`Stop the World` 가 발생하지 않는다면 GC가 동작하는 동안 애플리케이션 스레드가 계속 실행되어 객체의 참조 상태가 지속적으로 변경될 수 있습니다. 이는 GC가 객체간의 참조 관계를 파악하는 데 방해가 되며 여전히 사용 중인지를 마킹하는 데에 불편합니다.
결국 실제로는 사용 중인 객체를 쓰레기로 판단하여 오류를 발생시킬 수 있습니다.

GC에서 필요한 객체 참조 정보가 지속적으로 변하는 경우 GC는 많은 작업을 반복해야 할 수 있습니다. GC 실행 시간이 길어지고, 전반적인 성능이 저하될 수 있습니다. CPU 리소스가 GC에 지나치게 소모되어 다른 작업의 성능에 영향을 줄 수 있습니다.

 

리마크 단계에서는 동시 마크 단계에서 놓친 변경 사항을 잡아내고 GC의 정확성을 최종적으로 보장하기 위해 필요합니다.
리마크 단계에서 `Stop the World` 없이 수행하는 경우 정확성을 보장할 수 없습니다.
동시 마크 단계 동안 애플리케이션 스레드가 계속 실행되면서 객체 참조가 변경될 수 있는데, 이러한 변경 사항을 처리하고 높친 라이브 객체들을 정확하게 식별해야 합니다. 

`Stop the World` 가  없이 리마크를 수행하는 경우 객체 참조의 변경을 정확하게 추적하기 어려워 메모리 누수가 발생할 수 있습니다.

마킹이 누락된 라이브 객체가 GC로 분류되어 메모리가 회수되어 필요한 객체에 접근할 수 없거나 불필요한 메모리가 회수되지 않을 수 있습니다. 이로 인해 안전성 문제로 이어질 수 있습니다.

 

반응형

'JVM' 카테고리의 다른 글

JVM_17_GC 다시 알기 (수정사항)  (0) 2024.05.10
JVM_16_Non Stop-the-World, Incremental Garbage Collection  (0) 2024.05.10
JVM_14_Space Reclamation  (0) 2024.05.10
JVM_13_G1 GC 동작 과정  (0) 2024.05.10
JVM_12_G1 GC  (0) 2024.05.10