자바는 Write Once, Run Anywhere라는 특성을 가진 객체지향언어입니다.

즉, 하나의 코드로 OS에 구분없이, 실행할 수 있는 특징을 갖고있습니다.

그렇다면 자바는 어떻게 구동될까요?

자바의 구동원리는 다음과 같습니다.

  1. 컴파일러를 통해 JAVA코드를 검증하고, JVM이 이해할 수 있는 바이트코드를 만듭니다(.class File)
  2. CLASS Loader를 통해 JVM에 바이트코드를 로딩합니다.
  3. 바이트코드를 검증하고, 인터프리팅 작업을 합니다.
  4. 바이트코드를 바이너리코드로 변경합니다. 이때, 바이너리코드는 JVM의 클래스영역에 저장됩니다.
  5. 런타임과정에서 클래스들의 static변수를 초기화합니다.
  6. static 블럭을 수행하고, 인스턴스블록, 생성자 호출순으로 수행합니다.
  7. 마지막으로 main함수를 호출합니다.

JVM이란

jvm은 스택기반의 가상머신으로 가비지컬렉션을 수행합니다. 이외에도 플랫폼에 독립적일 수 있도록 바이트코드를 OS에 맞게 바이너리 코드로 변환해줍니다.

구체적으로 살펴보자면 다음과 같은 프로세스로 동작합니다.

  1. JAVA코드를 바이트코드로 변환
  2. class loader system을 통해 class파일들을 jvm에 로딩
  3. 로딩된 클래스파일들을 runtime data area에 배치하여 수행
  4. 수행중 가비지컬렉션, thread 동기화 등의 관리작업 수행