Java

자바의 실행 과정

Sigfriede 2023. 12. 11. 00:10

  자바 언어로 프로그래밍을 하기 위해서는 자바 개발도구(Java Development Kit, JDK)가 필요하다. JDK에는 자바 가상 머신(Java Virtual Machine, JVM)과 자바 클래스 라이브러리(Java API) 등 자바 개발에 필요한 프로그램이 설치된다. JDK의 bin 디렉토리에 있는 주요 파일은 다음과 같은데, 자바를 다루는 과정에 이용된다.

  'javac.exe'는 자바 컴파일러로, 자바 소스 코드를 바이트 코드(JVM이 이해할 수 있는 기계어로, 바이트 코드를 해당 OS의 기계어로 변환하여 OS로 전달하는 역할)로 컴파일한다. 'java.exe'는 자바 인터프리터로, 컴파일러가 생성한 바이트 코드를 해석하고 실행한다.

 

  .java의 실행 과정은 다음과 같다.

  1. 개발 도구를 이용하여 코드를 작성하고 .java 확장자로 저장한다.
  2. 자바 컴파일러(javac.exe)를 사용해서 소스 파일로부터 .class 파일을 생성한다.
  3. 자바 인터프리터(java.exe)가 코드를 실행한다.

  컴파일 과정(2번)에 좀 더 상세한 과정이 있다. 컴파일된 바이트 코드를 JVM의 클래스 로더(Class Loader)에게 전달한다. 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스를 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area)인 JVM의 메모리에 올린다.

  클래스 로더의 세부 동작은 다섯 가지 과정으로 나눌 수 있다. 클래스 파일을 JVM의 메모리에 로드하고, 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어 있는지 검사하고, 클래스가 필요로 하는 메모리(필드, 메서드, 인터페이스 등)를 할당하고, 클래스의 상수 풀 내의 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경하고, 클래스 변수(static 필드)를 적절한 값으로 초기화한다.

  이후 실행 엔진(Execution Engine)이 JVM 메모리에 올라온 바이트 코드를 명령어 단위로 하나씩 가져와서 실행한다. 인터프리터 방식과 JIT 컴파일러 방식으로 실행할 수 있다.

 

  ※ Java의정석(남궁 성)의 chapter01과 아래 링크 글을 참고하여 작성한 글입니다. 참고자료에는 게시글보다 상세하고 정확한 설명이 기재되어 있습니다. 이 게시글에  문제가 되거나 부정확한 부분이 있다면 알려주시면 감사하겠습니다.

- https://gyoogle.dev/blog/computer-language/Java/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.html

'Java' 카테고리의 다른 글

[Java] 접근 제어자(access modifier)  (0) 2024.01.24
[Java] 제어자(modifier)  (0) 2024.01.22
[Java] 오버로딩(overloading)과 오버라이딩(overriding)  (0) 2024.01.19
Thread safety  (0) 2024.01.17