-
자바 컴파일,런타임과정java 2024. 12. 21. 12:56
많은 블로그나 자료에서 컴파일과정에 대해 잘못 설명하고 있다.
아래는 다른 블로그에서 가져온 컴파일과정이다.
- 개발자가 자바 소스코드(.java)를 작성합니다.
- 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다.
- 컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달합니다.
- 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올립니다.
- 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다. 이때, 실행 엔진은 두가지 방식으로 변경합니다.
위 내용에서 컴파일 과정은 2번에서 끝난다.
즉 자바파일을 클래스 파일로 변환하는게 컴파일과정이다. 3번 이후의 과정은 런타임과정이다.
다시 정리해보면
자바 컴파일과정
1.자바 소스코드 작성
2.컴파일러에 의해 자바파일이 클래스 파일로 변환(javac 프로그램 및 명령어 사용)
자바 런타임과정
1.클래스 로더(class loader)가 클래스파일을 런타임데이터 영역(jvm 메모리 - 메서드 영역)에 순차적으로 로드(java 프로그램 및 명령어 사용)
- 메서드 영역 : 클래스 정보, 필드, 메서드 정보가 저장됨
- 클래스파일 = 바이트 코드
2.실행 되어야 할 클래스의 메서드를 메서드 영역에서 가져와서 스택 영역에 쌓음 (메서드가 호출될 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.)
3.실행 엔진(execution engine)이 스택에 쌓인 프레임을 순차적으로 실행 (이때 바이트 코드를 기계어로 변환해서 실행함)
4.이 과정에서 gc 가 메모리 최적화를(힙 영역) 수행해줌
면접 시 잘못된 내용을 답변하게 될 쥬니어 개발자들을 위해 정리를 하게되었다.
'java' 카테고리의 다른 글
문자열에서 공백제거하기 (0) 2021.06.23 이클립스 run as 문제 (0) 2020.03.29 멤버 상수 final , static 알고가기 (0) 2019.12.05 자바 - 클래스 인스턴스 객체 (0) 2019.12.05 문자 자료형 (0) 2019.12.04