바이트 코드
- 작성한 코드를 자바 컴파일러가 운영체제가 읽을 수 있는 코드로 변환한 코드
JAVA 컴파일러란?
- 작성한 Java 코드들(.java 파일)을 운영체제가 읽을 수 있는 바이트 코드💬(.class 파일)로 변환하는 변환기
인터프리터
- Java .class 코드 해석기
- 바이트 코드를 기계가 실행할 수 있는 기계어로 번역
JIT 컴파일러
- 빠른 Java .class 코드 해석기
- 인터프리터의 효율을 높여주는 서포터
예전 자바의 문제점
1. 자바파일(.java)을 바이트 코드(.class) 파일로 컴파일 한다. 즉, 자바 컴파일러는 자바 소스 코드를 JVM을 위한 기계어로 변환
2. JVM의 실행 엔진 내에 있는 인터 프리터로 특정 환경의 기계어로 변환
-> 자바는 인터프리터 방식과 정적 컴파일 방식을 두 개 다 사용하기 때문에 다른 언어에 비해 느릴 수 밖에 없다. 이 문제를 개선하기 위해 "JIT 컴파일러"를 추가했다.
JIT Compiler란?
JIT 컴파일러는 실행 시점에서 인터프리터와 같이 기계어 코드를 생성하면서 해당 코드가 컴파일 대상이 되면 컴파일하고 그 코드를 캐싱(저장과 비슷하다고 생각)한다. JIT 컴파일은 실시간으로 일어나며(Just-In-Time), 전체 코드의 일부분만 변환한다.
즉, 변환된 일부분은 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없어진다.
위 와 같이 반복되는 코드들을 컴파일하여 캐싱해둠으로써 인터프리터는 반복되는 코드를 읽지 않고 컴파일된 코드를 바로 사용 가능
메모리 영역
- Java 데이터를 저장하는 영역
- 운영체제로부터 JVM이 할당받은 메모리 영역
클래스 로더
- Java 바이트 코드(.class)를 메모리 영역에 담는 운반기
- 바이트 코드를 불러와서 메모리 영역에 저장
가비지 컬렉터
- Java의 쓰레기 청소기
- 메모리 영역에 있는 안쓰는 데이터를 주기적으로 청소
