티스토리 뷰
JAVA 컴파일 과정
Program -> JVM -> OS -> H/W
- Program -> JVM = 컴파일 타임 -> 런타임
컴파일 타임
- 소스코드 작성 -> 컴파일 과정 통해 기계어 코드로 변환
- JAVA 파일을 JAVA 컴파일을 통해 바이트 코드로 변환
< 자세히 >
1. JAVA 클래스 파일(.java)을 JAVA 컴파일러(javac.exe)을 통해 JVM이 이해할 수 있는 중간 단계의 언어 바이트(.class)로 바꿔줍니다.
런타임
-컴파일 과정 후 프로그램이 실행, 응용프로그램이 동작 할 때
- Runtime Data Area -> Execution Engine -> java 인터프리터, JIT 컴파일러 -> 런타임 시스템 -> 운영체제 -> H/W
< 자세히>
2. 바이트(.class)를 JVM의 Class Loader에 전달
3. Class Loader가 Dynamic Loading(동적 로딩)을 통해 Class를 로딩, 링크하여 Runtime Data Area(JVM 메모리)에 올린다.
- Class Loader 세부 동작 https://055055.tistory.com/50
- 로드: class 파일을 JVM 메모리에 로드한다.
- 검증: Java Language Specification(자바 언어 명세), JVM 명세의 구성이 맞는지 검사
- 준비: class가 필요한 메모리 할당(메서드, interface)
- 분석: class내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
- 심볼릭 레퍼런스: 참조하는 대상의 이름만을 지칭한 것
- 초기화: class 변수들은 적절한 값으로 초기화 된다.(static)
4. Excution Engine(실행 엔진)에서 2가지 방식으로 변경합니다.
=> 인터프리터 방식을 사용하다가 적정한 때에 JIT 컴파일러 사용
- 인터프리터: 사용자가 작성한 소스코드를 한 문장 씩 보고 바로 기계어(실행 속도가 느림)
- JIT 컴파일러(Just In Time): 바이트 코드 전체를 컴파일하여 기계어로 바꾸는 방식(실행 속도가 빠름)
출처: https://velog.io/@woo00oo/%EC%9E%90%EB%B0%94-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EA%B3%BC%EC%A0%95
반응형
'Tip and Error > JAVA' 카테고리의 다른 글
Generic (class 자료형을 자유롭게) (0) | 2021.04.23 |
---|---|
Class 클래스 <자료형을 모르는 Class 사용 할 때> (0) | 2021.04.17 |
toString() & equals() & hashCode() & clone() (0) | 2021.04.16 |
default & static & private (0) | 2021.04.16 |
인터페이스 활용 (interface) (0) | 2021.04.14 |
공지사항
최근에 올라온 글