반응형
자바 고급 스터디 목록
공부 시간 : 2021/04/04 14:00 ~ 15:15
4주차. 자바가 컴파일 되는 과정에 대해서 설명해보세요.
자바 컴파일 이란?
- 자바로 작성된 코드를 어셈블리어 -> 기계어(binary code형식)으로 변환해주는 과정이다.
바이너리 코드, 어셈블리 언어, 고급언어
binary code :
- 10001011101101 과 같이 0과 1로 이루어진 코드
- 한국어, 영어, 프랑스어 등과 같이 운영체제에 따라 다르다.
assembly language :
- add 3, 5, result 와 같이 이루어진 코드
- 기계어와 1:1로 매칭됨.
- binary code로 변환하는 과정이 필요함.
고급언어
- 어셈블리언어 보다 사람이 이해하기 쉬운 방식으로 개선된 언어
- 인터프리터, 컴파일러를 사용하는 언어로 나뉨.
- 고급언어 -> binary code로 변환하는 과정이 필요함.
인터프리터와 컴파일러
인터프리터
- 한줄씩 기계어로 변환하는 과정을 거침.
- 컴파일러에 비해 상대적으로 프로그램 실행 속도가 느림.
컴파일러
- 모든 코드를 한번에 기계어로 변환함.
- 인터프리터에 비해 상대적으로 프로그램 실행 속도가 빠름.
자바 컴파일
- 사용자가 자바코드(.java)를 작성 후 빌드를 함.
- 자바컴파일러(javac)는 자바파일(.java) -> 바이트코드(.class) 파일로 변환함.
(바이트코드는 어셈블리언어 형식임.) - Class Loader에서 2번에서 생성된 바이트코드를 JVM 메모리에 로드함.
이 과정은 모든 파일이 한꺼번에 되지않고, 프로그램 실행과정에서 .class파일이 필요할때 실행됨 (lazy loading)
- 세부 작동
- Loading(로딩) : 로드된 클래스 및 부모 클래스 정보, class interface enum 관련 여부
, 변수 메서드 정보를 jvm 메모리(Heap 메모리, MetaSpace)에 올림 - Verification(증명) : .class 파일이 자바 언어 명세, JVM 명세에 맞게 작성되었는지 검증한다. 실패시 런타임에러 (java.lang.VerifyError)
- Preparation(준비) : load된 메모리를 기본 값으로 초기화 하고, 클래스 변수를 위한 메모리에 할당함.
- resolution(해결) : 클래스의 constant pool 내의 symbolic reference를 direct reference로 변경함.
- Initialization(초기화) : static 변수들이 정의된 값으로 초기화됨.
- Loading(로딩) : 로드된 클래스 및 부모 클래스 정보, class interface enum 관련 여부
- 세부 작동
- Runtime Engine에서 (.class)파일 -> 기계어로 변환함.
Runtime Engine 파트 분류
- 인터프리터 : (.class) 파일을 한줄씩 읽어 기계어로 변환함. 여러번 실행 할 경우 비효율적임.
- Just-In-Time(JIT) :
- 인터프리터의 비효율을 개선하기 위해 사용되는 컴파일 방식의 파트임.
- JIT에서 해석된 코드는 메모리 Code Cache에 저장하여 사용함.
- 인터프리터보다 실행시간이 길고, 캐싱되는데 자원이 사용되므로 반복되지 않는 코드는 인터프리터를 사용하는게 유리하다.
참고한 사이트
반응형
'컴퓨터 > JAVA' 카테고리의 다른 글
자바 고급 스터디 6. 리플렉션 (reflextion) (0) | 2021.04.14 |
---|---|
자바 고급 스터디 5. generic type erasure(제네릭 타입 소거) (1) | 2021.04.07 |
자바 고급 스터디 3. java JVM구조 (0) | 2021.03.26 |
자바 고급 스터디 2. wrapper class, primitive type(기본형), 일급 콜랙션 (0) | 2021.03.15 |
자바 고급 스터디 1. 스트림, 람다 (stream, lamda) (0) | 2021.03.09 |