JVM은 무엇인지 그리고 Java 에서의 메모리 관리에 대해 알아보자!
Java Byte Code를 OS에 맞게 해석해주는 역할을 한다. 즉, JAVA와 OS사이에서 중개자 역할을 수행하여 OS에 구애받지 않고 재사용을 가능하게 해준다. 그리고 메모리 관리, Garbage collection을 수행한다.
스택기반의 가상머신이다. (레지스터 기반 x)
Class Loader
: 클래스(.class파일)을 로드하고, 배치하는 작업을 수행하는 모듈. Runtime 시에 동적으로 클래스를 로드한다.
Execution Engine
: 클래스를 실행시키는 역할. JVM내의 런타임데이터 영역에 바이트 코드를 배치, 이것은 실행엔진에 의해 실행된다. 자바 바이트코드(인간이 보기편한) -> 기계언어로 변환해줌
Garbage collector
GC를 수행하는 쓰레드
1. 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받는다 (Runtime Data Area)
2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 컴파일 하여 자바 바이트코드(.class)로 변환시킨다
3. Class Loader를 통해 class파일들을 JVM으로 로딩한다
4. 로딩된 class파일들은 Execution engine 통해 해석된다
5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실적적인 수행이 이루어진다
* 필요에 따라 Thread Synchronization, Garbage Collect 와 같은 관리작업을 수행하기도 함
(출처: https://asfirstalways.tistory.com/158)
참고: https://yaboong.github.io/java/2018/05/26/java-memory-management/
아주 정리가 잘되어 있다! 이 블로그를 참고하였다.