-
자바 가상 머신(Java Virtual machine)의 작동 원리language/JAVA 2019. 1. 17. 13:22반응형
그림을 참고하면 위에서 아래로 내려가는 과정을 수행한다고 보면 됩니다.
컴파일러에서 만들어진 바이트 코드가 저장된 class 파일을 class loader가 runtime data area에 적재합니다. Runtime data area 는 운영체제 위에서 JVM이 할당받는 메모리 영역입니다. class loader에서 준비한 데이터를 보관하는 저장소라고 할 수 있습니다.
그리고 이것을 Eexcution Engine으로 실행합니다.
클래스 로더는 한꺼번에 모든 클래스를 다 로드하지 않고 요청 되는 순간 동적으로 로드 합니다. 그리고 로딩 매커니즘을 보다 빠르게 동작하고 쉽게 확장할 수 있도록 하기 위해 계층구조로 이루어져 있는 특징이 있습니다.
클래스 로더가 클래스 로딩을 요청받게 되면 캐시, 부모 클래스 로더, 자신 클래스 로더 순으로 클래스 로딩이 됩니다. 캐시에서는 클래스를 로딩한 적이 있는지 확인합니다. 이전에 로딩된 클래스는 해당 클래스 로더의 캐시에 저장되고 다음 번 요청 시 캐시에 저장된 내용을 사용하기 때문입니다. 해당 클래스를 로딩한 적이 없다면 상위 부모 클래스 로더에게 클래스 로딩 요청을 위임한다. 클래스 로딩을 위임받은 부모 클래스 로더 또한 자신의 캐시를 먼저 확인하고 해당 클래스를 이전에 로딩한 적이 없다면 그 클래스 로더의 부모에게 클래스 로딩을 위임하는 동일한 과정을 거칩니다.
최상위 부트스트랩 클래스 로더까지 요청이 위임되고 이전에 클래스가 로딩된 적이 없다면 최상위 부모부터 자식 클래스 로더 순서로 해당 클래스 로딩을 시도합니다.
Runtime data area 는 운영체제로부터 할당받은 메모리 영역입니다. JVM은 이 영역을 위와같이 다섯개의 영역으로 나눠서 관리합니다.
스택(Stack)영역은 자료구조 스택과 같은 구조를 가지고 있고 각 스레드마다 할당됩니다. 주로 메소드에관한 정보가 저장되는 장소입니다.
실제로 메소드를 호출했을 때 스택이 저장되는 모습은 위와 같습니다. firstMethod가 호출 되면 좌측 처럼 메소드에 관한 정보가 담긴 스택프레임이 쌓이게 되고 다시 메소드를 호출하면 그 위로 프레임이 쌓입니다. 메소드가 끝나면 다시 원래 호출했던 부분으로 되돌아 갑니다.
new 키워드를 통해 힙에 생성된 객체들은 참조하는 변수가 없으면 가비지 컬렉션의 대상이 됩니다. 왼쪽의 코드에서 Dog 객체가 대입되어 있던 변수들이 더이상 Dog 객체를 참조하지 않게 되면 해당 Dog객체는 더이상 사용할 수 없게 됩니다.
반응형'language > JAVA' 카테고리의 다른 글
상속(Inheritance)의 개념 (1) 2019.01.17 자바의 변수 원시타입변수 vs 참조타입변수 (1) 2019.01.17 클래스 설계 방법과 객체지향의 4대 특징 (0) 2019.01.17 가비지 컬렉션(Garbage Collection)의 원리 (0) 2019.01.17 자바의 작동 방식(자바가 돌아가는 구조) (1) 2019.01.16