설명 순서는 다음과 같습니다.
1. JDK, JRE, JVM이란
2. JVM의 장점
3. JVM 구조
1. JDK, JRE, JVM이란
- JDK : Java Debelopment Kit의 약자로, 자바로 개발할 때 필요한 도구들의 모음
- JRE : Java Runtime Environment의 약자로, 자바 프로그램을 실행시킬 때 필요한 환경의 모음
- JVM : Java Virtual Machine의 약자로, 자바 프로그램을 실행시키는 핵심적인 기기
- Java 프로그램 실행 순서
① Java 소스코드(.java 파일)을 Java Compiler(javac)가 바이트코드인 .class파일로 컴파일
② JVM이 바이트코드를 기계어로 변환
③ 기계어 실행
2. JVM의 장점
- 다른 언어는 작성한 코드를 특정 OS에서 컴파일 하면, 해당 OS에서만 실행가능한 프로그램이 만들어짐. 다른 OS에서는 실행이 불가능
- 그렇지만, Java의 경우 어느 OS에서 컴파일된 바이트코드는 JVM만 있다면 다른 OS에서 실행이 가능함. 그래서 'Write Once Read Anywhere'라는 장점이 있음
- 소스코드 -> 바이트코드 -> 기계어, 이렇게 되므로 두번 컴파일을 하기 때문에 속도의 문제가 발생하는데, JIT 컴파일러 방식으로 개선되어 속도에서도 개선을 이룸
- JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 실행할 때 컴파일을 하면서 해당 코드를 캐싱함
3. JVM 구조
- 클래스 로더 : .class 파일을 필요에 따라 동적으로 로드하고 엮어서 JVM의 메모리 영역인 Runtime Data Areas에 배치함
- 실행 엔진 : 런타임 데이터 영역에 배치된 바이트 코드를 명령어 단위로 읽어서 실행
- 런타임 데이터 영역 : 프로그램을 실행할 때 사용되는 데이터들을 적재하는 영역
① 메서드 영역 : 바이트 코드(.class)를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 공간. 이 영역은 클래스가 로드되고 종료될 때까지 저장됨. 이 영역에는 class 초기 정보 또는 static 변수나 메서드가 저장됨
② 힙 영역 : 런타임시 동적으로 생성되는 객체, 배열이 저장되는 공간
* 만약 힙에 생성된 객체가 참조되지 않는다면, 이것을 쓰레기로 취급하고 Garbage Collector를 통해 제거됨
③ 스택 영역 : 메서드 호출마다 각각의 스택 프레임이 생성되고 이 안에서 사용되는 값을 임시로 저장하는 공간
④ PC 레지스터 : 현재 수행중인 JVM 명령어 주소를 저장하는 공간
JVM에 대해 알아볼 수 있었습니다.
'Java' 카테고리의 다른 글
JAR, WAR, EAR (1) | 2023.09.18 |
---|---|
Garbage Collector (0) | 2023.09.15 |
Abstract Class vs Interface (0) | 2023.09.13 |
[Java의 정석] Static이란? (0) | 2023.04.07 |
[Java의 정석] JVM이란? (0) | 2023.04.01 |