자바 메모리의 쓰레기 수거?
안녕하세요.
고코더 입니다.
자바의 중요한 특징 중 하나인 가비지컬렉션을 알아봅니다. 직역하면 "쓰레기 수거"라고 번역되는데요. 말 그대로 메모리 상에 있는 쓰레기를 수거 하는 방법 입니다. 불필요하게 저장된 메모리 영역을 해체하는 기능을 합니다. 1959년 존 매카시가 개발하였습니다. 이런 특성 덕분에 자바는 알아서 메모리를 정리하기 때문에 개발이 수월한 면이 있습니다.
직접 메모리를 관리하는 C, C++
C, C++ 에서는 메모리를 명시적으로 직접 해체해야 합니다. 그래서 메모리 관리를 하지 못하면 memory leak이 발생합니다. 직접적인 메모리 영역을 다루기 때문에 더 좋은 성능으로 프로그램을 작성 할 수 있습니다.
가비지 컬렉션(GC) 예제
자바는 OS 의 메모리 영역에 직접적으로 접근하지 않습니다. JVM 자바 가상머신에 간접적으로 접근합니다. JVM의 메모리는 크게 클래스 영역, 자바 스택, 힙, 네이티브 메소드 스택의 4개 영역으로 나뉩니다. GC는 여기서 힙메모리를 다룹니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class HelloWorld{ public static void main(String []args){ String[] array = new String[2]; array[0] = "GO"; array[1] = "Coder"; array = new String[] {"G", "C" }; System.out.println(array[0]); } } | cs |
해당 예제 소스에서 기존 array[0],array[1]에 담은 변수 값이 더 이상 사용 용도가 없어져 자동으로 가비지 컬렉션에 의해 정리 됩니다.
Stop The World
GC 실행을 위해 JVM이 애플리케이션 실행을 멈주는 걸 Stop the world라고 합니다. GC를 실행하는 쓰레드를 제외한 쓰레드들의 작업을 멈춥니다. Stop The World를 최적화 하는 과정을 가비지콜렉션을 튜닝한다고 표현합니다.
마무리
GC는 알고보면 굉장히 복잡합니다.
'IT_Developers > JAVA' 카테고리의 다른 글
JAVA 기본 접근제어자 - public 이란? / 접근 범위 / 예제 (0) | 2020.03.13 |
---|---|
JAVA - 접근 제어자(access modifier) / 상세하게 (0) | 2020.03.12 |
JAVA - 오버라이딩(Overriding)이란? / 예제 소스 (0) | 2020.03.11 |
JAVA - 다형성(Polymorphis)이란? (0) | 2020.03.11 |
JAVA - 오버로딩(Overloading)이란? / 예제 소스 / 컴파일 원리 (0) | 2020.03.11 |
댓글