-
자바 JVM, 메모리 구조, 가비지 콜렉션자바/Java 공부 2018. 3. 10. 16:36
자바 가상머신(JVM)?
자바 프로그램이 실행되는 플랫폼이다. 자바 코드의 메인 메서드를 호출한다.
어플리케이션이 플랫폼에 상관 없이 독립적으로 실행되도록 한다.
자바 코드(.java)는 컴파일러에 의해 바이트코드(.class)로 변환 된 후 JVM에 의해 실행된다. JVM은 JRE에 포함되어 있다.
가비지 컬렉션과 메모리를 포함한다.
자바 메모리 구조
메서드 영역(Method area)
JVM이 .class 파일을 읽고 클래스(클래스 변수, 메서드, 생성자), static 변수에 대한 정보를 저장한다.
모든 JVM 스레드가 공유하므로 Not thread-safe이다.
힙(heap)
모든 인스턴스와 배열이 저장되는 공간, 프로그램 실행 중 생성되는 인스턴스가 저장된다. (인스턴스는 new 키워드로 초기화한 클래스이다.)
가비지 콜렉터에 관리를 받는다.
개발자가 힙 메모리의 최초 크기와 최소, 최대 사이즈를 정할 수 있다.
힙 메모리가 부족하면 JVM은 OutOfMemoryError를 throw한다.
모든 JVM 스레드가 공유하므로 Not thread-safe이다.
스택(stack)
각각의 JVM 스레드마다 메서드 실행에 필요한 공간(Stack Frame)을 제공, 호출 된 메서드를 위한 메모리가 할당 된다.
메서드가 실행되는 동안 매개변수, 지역변수, 연산 결과가 저장되고 메서드 작업이 끝나면 할당 받은 메모리를 반환한다.
스코프 안에 변수들은 스코프 종료와 함께 스택에서 제거 된다.
재귀 메서드를 조건 없이 사용하면 끝 없는 호출로 StackOverflowError가 발생한다.
자원을 공유 하지 않으므로 thread-safe이다.
가비지 콜렉터
프로그래머 대신 자동으로 메모리를 관리한다. (C, C++은 프로그래머가 수동으로 관리한다.)
heap 메모리에서 더 이상 참조되지 않는 객체를 제거한다.
new 키워드로 생성한 인스턴스는 메모리를 할당 받는다. 이후 더 이상 참조되지 않을 경우 이 인스턴스의
메모리를 재할당한다.
참고:
> 가비지 콜렉션 알고리즘'자바 > Java 공부' 카테고리의 다른 글
자바 기본 정리 - <JAVA 프로그래밍 면접 이렇게 준비한다> (0) 2018.12.27 자바 - 객체지향 언어란? (0) 2018.03.10 자바 기본 용어 (0) 2018.03.07 자바 - 객체지향 프로그래밍 (0) 2018.01.19 자바 - 제어문(if, switch/case, while, for, for each (0) 2018.01.19