ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 컴파일,런타임과정
    java 2024. 12. 21. 12:56

    많은 블로그나 자료에서 컴파일과정에 대해 잘못 설명하고 있다.

     

    아래는 다른 블로그에서 가져온 컴파일과정이다.

    1. 개발자가 자바 소스코드(.java)를 작성합니다.
    2. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다.
    3. 컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달합니다.
    4. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올립니다.
    5. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다. 이때, 실행 엔진은 두가지 방식으로 변경합니다.

     

    위 내용에서 컴파일 과정은 2번에서 끝난다.

    즉 자바파일을 클래스 파일로 변환하는게 컴파일과정이다. 3번 이후의 과정은 런타임과정이다.

     

    다시 정리해보면

     

    자바 컴파일과정

    1.자바 소스코드 작성

    2.컴파일러에 의해 자바파일이 클래스 파일로 변환(javac 프로그램 및 명령어 사용)

     

    자바 런타임과정

    1.클래스 로더(class loader)가 클래스파일을 런타임데이터 영역(jvm 메모리 - 메서드 영역)에 순차적으로 로드(java 프로그램 및 명령어 사용)

    • 메서드 영역 : 클래스 정보, 필드, 메서드 정보가 저장됨
    • 클래스파일 = 바이트 코드

    2.실행 되어야 할 클래스의 메서드를 메서드 영역에서 가져와서 스택 영역에 쌓음 (메서드가 호출될 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.)

    3.실행 엔진(execution engine)이 스택에 쌓인 프레임을 순차적으로 실행 (이때 바이트 코드를 기계어로 변환해서 실행함)

    4.이 과정에서 gc 가 메모리 최적화를(힙 영역) 수행해줌

     

    면접 시 잘못된 내용을 답변하게 될 쥬니어 개발자들을 위해 정리를 하게되었다.

     

     

     

     

     

     

     

    'java' 카테고리의 다른 글

    문자열에서 공백제거하기  (0) 2021.06.23
    이클립스 run as 문제  (0) 2020.03.29
    멤버 상수 final , static 알고가기  (0) 2019.12.05
    자바 - 클래스 인스턴스 객체  (0) 2019.12.05
    문자 자료형  (0) 2019.12.04
Designed by Tistory.