반응형
JVM (Java Virtual Machine)
1. JVM 이란 무엇인가?
JVM(Java Virtual Machine) 이란 자바가상머신으로, 자바기반으로 만들어진 프로그램이 Window, Linux등 어느 운영체제에서도 실행될 수 있도록 해주는 프로그램이다.
2. JVM의 구조 & 실행과정
- 프로그램 실행 시 OS로부터 필요한 메모리를 할당받은 후, 해당 메모리를 각 영역별 나누어 관리한다.
- Java Compiler는 .Java 확장자로 된 자바 소스 파일을 .Class 형식으로 컴파일 한다.
- 바이트 코드로 변환 된 파일을 Class Loader를 통해 Runtime Data Areas영역으로 로딩한다.
- 로딩된 Class파일은 Excution Engine을 통해 해석된다.
- 해석된 바이트코드는 Runtime Data Areas영역에서 실질적인 수행이 이루어진다.
- 위 실행과정속에서 JVM은 Garbage Collector(GC) 와 같은 관리작업을 수행한다.
3. JVM 상세
3.1 Java Compiler
- .Java 확장자로 된 자바 소스 파일을 .Class 형식의 바이트 코드로 변환해주는 역할을 한다.
3.2 Class Loader
- 바이트 코드로 변환된 .Class형식의 파일을 로드하고 Runtime Data Areas에 배치한다.
3.3 Excution Engine
- 바이트 코드로 변환된 .Class형식의 파일을 기계어로 변환시키는 부분
- 변환 방식에는 JIT와 Interpreter 방식이 있다.
- Interpreter는 한 줄 씩 변환시켜서 사용하는 방식
- JIT는 Interpreter의 단점(성능, 속도)를 보완하기 위해 만들어진 방식 전체 바이트 코드를 한 번에 변환시킨다.
3.4 Runtime Data Areas
- 런타임 데이터 영역은 JVM이 운영체제에서 실행되면서 할당받는 메모리 영역으로, 5개의 영역으로 나뉘게 된다. 이 중 PC Register, JVM Stack, Native Method Stack은 쓰레드마다 하나씩 생성되며, Method Area와 Heap은 모든 쓰레드가 공유한다.
3.4.1 Method Area
- 모든 쓰레드가 공유하는 영역으로 JVM이 시작될 때 생성된다. JVM이 읽어들인 바이트코드가 이 영역에 저장됨
- 클래스 정보, 변수 정보, static으로 선언한 변수가 저장됨
3.4.2 Heap
- 동적으로 생성된 객체가 저장되는 영역 (New 연산으로 생성된 객체)
- GC의 대상이 되는 공간
Person p = new Person("윤현중", 28);
// 위 처럼 선언했을 때 new Person("윤현중", 28)의 부분이 Heap에 저장됨!
3.4.3 JVM Stack
- 지역변수나 메서드의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역
- 해당 메서드의 호출이 종료되면 이 안에 선언된 변수들은 사라짐 > 주로 금방 사용되고 사용이 끝나는 데이터가 저장되는 영역
Person p = new Person("윤현중", 28);
// 위 처럼 선언했을 때 변수 p가 JVM Stack에 저장됨!
3.4.4 PC Register
- 스레드가 시작될 때 생성되며, 현재 수행중인JVM의 명령어 주소를 저장하는 공간
- 쓰레드가 어떤 부분을 어떤 명령어로 수행할지를 저장하는 공간
3.4.5 Native Method Stack
- Java 언어가 아닌 다른 언어로 작성된 코드를 위한 공간
참고
반응형
'공부용 > JAVA' 카테고리의 다른 글
Garbage Collection (GC) (0) | 2022.11.19 |
---|---|
JAVA - 문자열 클래스 (0) | 2022.11.19 |