250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- java
- 플랫폼 클래스 로더
- 객체지향
- 클래스 로더 계층
- 스프링 컨테이너
- 백준
- 어플리케이션 클래스 로더
- AWS SAA-C03 합격후기
- 코딩테스트
- 부트스트랩 클래스 로더
- 2026 AWS SAA-C03
- 자료구조
- Spring
- 심볼릭 레퍼런스
- dfs
- stop the world
- 스프링
- BFS
- aws saa-c03
- 다이렉트 레퍼런스
- 파이썬
- python
- 파이썬 리스트 메서드
- getreference
- 컴포넌트 스캔
- python list method
- 파이썬 문자열 메서드
- 딕셔너리
- 알고리즘
- 자바
Archives
- Today
- Total
클라우드 낚시꾼
[JAVA] STW(Stop-The-World) 문제와 발생 이유 본문
728x90
STOP THE WORLD란?

STW란 GC가 가비지 컬렉션을 수행하는 동안에 모든 어플리케이션 스레드를 중단하는 하는 것을 의미한다. STW로 인하여 모든 어플리케이션 스레드가 멈춰 모든 어플리케이션이 중단된다.
STOP THE WORLD의 단점
1. 중단 시간
가비지 컬렉션 과정 중에 모든 프로그램이 일시 중단되어 응답 시간이 길어져 사용자 경험이 저하되는 현상이 발생한다. 특히, 실시간성이 중요한 시스템에서 이는 큰 문제가 된다.
2. 가비지 컬렉션 오버헤드
가비지 컬렉션 오버헤드 시간이 길어지면 이 작업을 수행하기 위한 추가적인 시간과 리소스가 소비된다.
STOP THE WORLD가 발생해야 하는 이유
GC는 객체의 참조 상태를 기반으로 메모리 회수 여부를 결정한다. 이때, 만약 모든 어플리케이션 스레드가 실행 중이라면, 객체의 참조 상태가 계속 변하여 GC가 정확히 가비지를 수집하기 어렵다. 그렇기에, 가비지 컬력센을 수행할 때는 모든 어플리케이션 스레드를 중단시켜(STW) 안전한 상태에서 객체의 참조 상태를 파악하는 것이 중요하다.
STOP THE WORLD가 없다면 발생하는 문제: 본질은 객체 참조의 비일관성
STOP THE WORLD가 발생하는 이유는 객체 참조의 일관성을 위함이다. 즉, STOP THE WORLD가 없을 때 발생하는 문제들의 대부분은 객체 참조의 비일관성이다.
- GC가 어떤 객체를 unreachable로 간주하려는 순간 다른 어플리케이션 스레드에서 그 객체를 참조하게 된다면, 정확한 가비지 수집이 어렵다.
- GC가 root를 탐색하는 동안 다른 어플리케이션 스레드에서 root의 상태를 변화시키기 된다면, 정확한 가비지 수집이 어렵다.
- mark and sweep의 compact 과정 중에 다른 어플리케이션 스레드가 실행 중인 상태에서 GC가 객체를 이동시킨다면, 객체의 참조가 잘못 되거나 메모리가 충돌되는 현상이 발생할 수 있다.
728x90
'Programming Language > JAVA' 카테고리의 다른 글
| [JAVA] 심볼릭 레퍼런스와 다이렉트 레퍼런스 (0) | 2024.11.13 |
|---|---|
| [JAVA] JVM의 클래스 로더 알아보기 (1) | 2024.11.12 |
| [JAVA 자바] 변수의 종류와 초기화 + Null (0) | 2023.12.31 |
| [JAVA 자바] 기본형과 참조형 + Call by Value (1) | 2023.12.29 |
| [JAVA 자바] 클래스와 객체 생성 + 내부 동작 알아보기 (0) | 2023.12.29 |