자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
- 자바 가상 머신(Java Virtual Machine) 의 약자로써 작성한 Java 프로그램을 실행시키는 역할을 함
- 스택 기반의 가상머신
- 가비지 컬렉션 사용
- 플렛폼에 독립적
- Class 파일을 Jvm으로 로딩하고 Bytecodee를 해석하는 작업, 메모리 등의 리소스를 할당하고 관리
- javac test.java (test.class 파일이 생성됨)
- java test (test.class 파일이 실행됨)
- 소스파일 -> 실행파일 -> JVM영역 [ Class loader -> Byte code Verifler -> Just-in-Time Compiler -> Runtime System ] -> 운영체제 -> Hardware
Link : JVM이 자바프로그램을 실행하는 과정
-
바이트코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다.
-
하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.
-
자바 바이트코드(Java bytecode)는 자바 가상 머신이 실행하는 명령어의 형태이다.
-
각각의 바이트코드는 1바이트로 구성되지만 몇 개의 파라미터가 사용되는 경우가 있어 총 몇 바이트로 구성되는 경우가 있다.
-
256개의 명령코드 모두가 사용되지는 않는다.
Link : 바이트코드 위키백과
Link : 자바 바이트코드 위키백과
- JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법.
- Just In Time Compiler(JIT)은 실행할때 컴파일함.
- 파일 전체를 한번에 기계어로 변환함.
- 미리 컴파일해놓고 실행하므로 처리속도가 빠름.
Link : JIT 컴파일 위키백과
- 메소드영역(클래스변수)
- 힙 영역(인스턴스,객체)
- 스택영역(매개변수,지역변수)
- PC레지스터(스레드마다 하나씩존재, 현재 수행중인 JVM주소 저장)
- Native 메소드 스택(JNI표준규약 제공)영역으로 이루어짐
Link : 자바 메모리 구조
- JRE : 자바 런타임 환경으로써 자바 클래스 라이브러리 -> JVM + JAVA 패키지 클래스
- JDK : 자바 개발 키트로써 자바의 모든 기능을 갖춘 SDK(소프트웨어 개발 키트) -> JRE + 개발/디버깅 툴
- JVM : 클래스 로더 시스템 + 런타임 데이터 영역 + 실행 엔진
Link : JDK와 JRE의 차이
Link : 마크다운 markdown 작성법