자바는 Write Once, Run Anywhere라는 특성을 가진 객체지향언어입니다.
즉, 하나의 코드로 OS에 구분없이, 실행할 수 있는 특징을 갖고있습니다.
그렇다면 자바는 어떻게 구동될까요?
자바의 구동원리는 다음과 같습니다.
- 컴파일러를 통해 JAVA코드를 검증하고, JVM이 이해할 수 있는 바이트코드를 만듭니다(.class File)
- CLASS Loader를 통해 JVM에 바이트코드를 로딩합니다.
- 바이트코드를 검증하고, 인터프리팅 작업을 합니다.
- 바이트코드를 바이너리코드로 변경합니다. 이때, 바이너리코드는 JVM의 클래스영역에 저장됩니다.
- 런타임과정에서 클래스들의 static변수를 초기화합니다.
- static 블럭을 수행하고, 인스턴스블록, 생성자 호출순으로 수행합니다.
- 마지막으로 main함수를 호출합니다.
JVM이란
jvm은 스택기반의 가상머신으로 가비지컬렉션을 수행합니다. 이외에도 플랫폼에 독립적일 수 있도록 바이트코드를 OS에 맞게 바이너리 코드로 변환해줍니다.
구체적으로 살펴보자면 다음과 같은 프로세스로 동작합니다.
- JAVA코드를 바이트코드로 변환
- class loader system을 통해 class파일들을 jvm에 로딩
- 로딩된 클래스파일들을 runtime data area에 배치하여 수행
- 수행중 가비지컬렉션, thread 동기화 등의 관리작업 수행