- [Java 정리] Garbage Collector 12022년 07월 30일
- starryeye
- 작성자
- 2022.07.30.:06
Java는 개발자가 메모리를 관리할 필요가 없다..
(C++는 직접 관리 해야함.. 스마트 포인터 생각X)
어디서 어떻게 관리 해줄까...
JVM의 Garbage Collector(GC)에서 메모리를 관리해준다.
Heap영역에 생성된 메모리 영역 중, 더 이상 참조되지 않는 것들을 정리해준다.
간단하게 동작을 알아보자..
void testMethod() { ... String str = new String("Hello"); ... }
위와 같이, 코드가 작성되어 있다면...
아래와 같이 메모리가 사용될 것이다..
그러다가..
해당 testMethod 로직이 모두 수행되고 리턴될 때, 지역변수인 str은 사라지게 된다.
그때, 힙 영역의 "Hello"는 도달할 수 없는 객체인 Unreachable Object가 된다.
GC는 이러한 영역들을 제거하며 관리 해준다.
GC에 대해 더 자세하게 알아보자..
GC는 Mark, Sweep의 과정을 통해 실행된다.
(참고로 GC는 데몬 쓰레드이다.)
Mark 작업
스택 영역에 할당된 할당된 모든 변수, Reachable Object들을
탐색하며 어떤 객체를 참조하고 있는지 Mark하는 작업이다.
이 작업을 수행할 때는 GC의 스레드 빼고는 모두 중단된다.
이를 Stop the World라고 부른다.
Sweep 작업
힙 영역의 객체들 중 Mark 되지 않은 객체를 제거하는 작업이다.
Garbage Collector 2편에서는
Runtime Data Area와 함께 더욱 자세한 GC 동작원리에 대해 포스팅하겠다..
(+ 부가적인 참고 내용들)
'Java' 카테고리의 다른 글
[Java 정리] Thread 1 (0) 2022.08.13 [Java 정리] String, final, Immutable (0) 2022.08.05 [Java 정리] 내부 클래스 (0) 2022.07.28 [Java 정리] Exception, Error (0) 2022.07.15 [Java 정리] Annotation (0) 2022.04.09 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)