자바 가상머신(JVM)은 프로그램이 실행되는 플랫폼이다.
각각의 운영체제와 아키텍쳐용으로 만들어져 있고, 운영체제와 애플리케이션 사이에 위치하면서 플랫폼에 상관없이 독립적으로 실행될 수 있도록 만들어 준다.
javac를 이용해 .java파일을 바이트코드(bytecode)로 컴파일 할 수 있다. 이 바이트코드는 JVM에서 명령어들을 아키텍처와 운영체제용으로 해석한다.
메모리는 어떻게 할당하는가?
new 키워드는 자바 힙(heap) 영역에 메모리를 할당한다.
객체를 할당할 때 메모리가 충분하지 않으면 JVM은 가비지 켈럭션(Garbage Collection)을 이용해 힙에서 메모리를 재사용하려고 시도한다. 충분한 메모리가 존재하지 않는다면 OutOfMemoryError가 발생하여 JVM이 종료된다.
힙은 제네레이션(Generation)이라는 몇 가지 영역으로 구분된다.
⇒ 가비지 컬렉션에서 객체가 수집 대상에서 제외된다면 다른 제너레이션으로 옮겨진다.
객체가 처음 생성됐을 때 Eden이라고 하는 메모리 영역에 할당된다. 그 후 가비지 컬렉션의 수집 대상에서 제외되면 Survivor라는 메모리 영역에 옮겨지며, 이 공간에서도 수집 대상이 제외되는 객체는 Tenured 제너레이션에 할당된다. 이 제너레이션은 더 낮은 빈도의 가비지 컬렉션 수집 대상으로 여겨진다.
Permanent 제너레이션(PermGen)이라고 하는 제너레이션도 존재하는데 이 곳에 속한 객체들은 가비지 컬렉션 수집할 때 선택되지 않고, 일반적으로 클래스 정의나 String 상수 같이 JVM에서 실행되는 데 필요한 불변(immutable)상태가 포함된다.
'그 외 ... (정리해야함) > 질문과 답변' 카테고리의 다른 글
JVM에서 동작하는 실제 자바 코드를 작성할 때 생명주기란 무엇인가? (0) | 2019.05.07 |
---|---|
JVM의 힙 크기는 어떻게 지정할 수 있는가? (0) | 2019.05.07 |
Hashtable과 HashMap의 차이점은 무엇인가? (0) | 2019.05.02 |
LinkedHashMap란 무엇인가? (0) | 2019.05.02 |
try-with-resource문은 무엇인가? (0) | 2019.05.02 |