Programing Language/Java
[Java] 자바 프로그램 기본 실행 과정(Java Program Basic Runtime)
vinedpillar
2022. 5. 22. 23:58
자바 프로그램 실행 과정
- 개발자는 자바 프로그래밍 언어를 이용하여 .java 확장자를 가지는 자바 소스 파일을 생성합니다.
- 컴파일러가 자바 소스 파일을 컴파일 하면 작성한 자바 코드를 바탕으로 확장자가 .class인 바이트코드 파일이 생성됩니다.
(바이트코드는 프로그래밍 언어와 기계어의 중간 언어로 자바가 어느 환경에서든 구동되게 하는 중간 번역자 역할을 수행.) - 바이트코드 파일은 자바 가상 머신(JVM)에 의해 각 CPU와 OS에 맞는 기계어로 번역되며 프로그램이 최종적으로 실행되게 됩니다.
자바 컴파일 명령어
- IDE를 활용할 경우 컴파일 과정을 자동으로 진행해주기 때문에 편리합니다.
- IDE를 사용하지 않을 경우 CLI를 사용하여 자바 프로그램을 실행할 수 있습니다.
- javac 명령어: 자바 소스 파일을 바탕으로 바이트코드 파일 생성
(예시: javac -d [바이트코드파일저장위치] [소스경로/소스파일명.java]) - java 명령어: 바이트코드 파일을 바탕으로 자바 프로그램 실행
(예시: java -cp [바이트코드파일위치] [바이트코드파일명])
- javac 명령어: 자바 소스 파일을 바탕으로 바이트코드 파일 생성
자바 가상 머신(Java Virtual Machine)
- JVM은 자바 소스 파일로 부터 생성된 바이트코드 파일을 실행시키기 위한 가상 머신입니다.
- 자바 가상머신의 구성 요소
- 클래스 로더(Class Loader): 프로그램에 필요한 .class 파일을 묶어 JVM이 할당받은 메모리 영역에 올려두는 역할을 합니다.
- 실행 엔진(Execution Engine): 메모리 영역에 올라간 .class 파일을 직접적으로 실행하는 역할을 합니다.
- 가비지 컬렉션(Garbage Collection): 할당 받았던 메모리가 더 이상 사용되지 않을 경우 자동으로 사용을 해제해주는 역할을 합니다.
- 클래스 로더(Class Loader): 프로그램에 필요한 .class 파일을 묶어 JVM이 할당받은 메모리 영역에 올려두는 역할을 합니다.
- 클래스 로더를 통해 바이트코드 파일을 메모리에 적재하고, 실행 엔진을 통해 명령어 단위로 실행합니다.
(인터프리터: 코드를 줄 단위로 번역하여 실행하는 방식) - 인터프리터 방식의 속도 한계를 극복하기 위해 JIT(Just In Time) 컴파일 방식을 도입했습니다.
(JIT 컴파일: 인터프린터와 비슷하지만 코드에서 자주 사용하는 부분을 캐싱하여 향후 필요할 때마다 가져다가 활용하는 방식) - 또한 가비지 컬렉션을 통해 사용하지 않는 메모리를 자동으로 수거해주는 기능을 지원합니다.