JVM에 대해선 이전 포스팅을 참조!
이번에는 .java 파일이 어떻게 컴파일 되고 JVM에서 어떻게 작동하는지 공부해보자
Java Compiler (javac)
* 소스 코드
- 사람이 직접 작성한 코드
- 기계는 이해할 수 없는 코드 (고레벨 언어)
* 바이트 코드
- CPU가 아닌 가상머신(JVM)이 이해할 수 있는 코드
- 고레벨 언어로 작성된 소스코드를 가상 머신이 이해할 수 있는 중간 코드로 컴파일한 것
* 바이너리 코드
- CPU가 이해할 수 있는 언어
- 컴퓨터가 인식할 수 있는 0과 1로 구성된 바이너리 코드를 의미
Compiler는 '해석기'라는 의미로 인간이 사용하는 고레벨언어를 기계가 이해할 수 있는 저레벨언어(기계어)로 해석해주는 번역 프로그램이다.
직접 작성한 .java(소스코드) 파일은 기계가 이해할 수 없기 때문에 컴파일러(javac)를 통해 .class(바이트코드) 파일로 변환하여 JVM이 읽기 편하도록 만들어줘야 한다.
*이클립스나, 인텔리제이가 자동으로 컴파일을 하고 .class파일을 만들어주기도 하지만 cmd 창을 통해 javac명령어로 직접 컴파일을 해줄 수 있다.
*바이트 코드는 JVM이 읽을 수 있는 언어이지 CPU가 읽을 수 있는 바이너리 코드는 아니기 때문에 바이트코드를 전달받은 JVM이 실시간 번역기(JIT)를 통해 바이너리 코드로 변환된다.
JVM(Java Virtual Machine)
- Class Loader를 통해 .class(바이트코드) 파일들을 JVM에 올린다.
- JVM에 있는 .class 파일들을 실행엔진의 Interpreter와 JIT compiler를 통해 해석된다.
- 해석된 바이트 코드는 Runtime Data Area 에 배치되어 실질적인 수행이 이루어진다.
JVM의 Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 하여 Runtime Data Area에 올린다.
그 후 Execution Engine은 JVM에 올라온 .class(바이트코드) 파일들을 명령어 단위로 하나씩 가져와서 실행시킨다.
참조
https://kingofbackend.tistory.com/123
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
'멋진 개발자 > Java & Spring' 카테고리의 다른 글
[항해 취업코스] 개발자 취준 기록 8 - JVM의 스택과 힙 메모리 영역 (0) | 2024.03.06 |
---|---|
[항해 취업코스] 개발자 취준 기록 7 - 동시성 이슈 해결 방법 (1) | 2024.03.06 |
[항해 취업코스] 개발자 취준 기록 5 - JVM의 구성과 특징 (0) | 2024.03.05 |
[항해 취업코스] 개발자 취준 기록 4 - JPA 더티체킹 (0) | 2024.03.05 |
[항해 취업코스] 개발자 취준 기록 3 - JPA는 무조건 좋은가 (0) | 2024.03.04 |