자바가 컴파일 되는 과정

hyyyynjn·2021년 4월 4일
1

자바 스터디

목록 보기
6/15
post-thumbnail
  • 자바가 컴파일 되는 과정에 대해서 설명하기

컴파일

  • 컴파일 : 고급언어(사람이 이해하기 쉬운 언어)로 개발한 프로그램을 기계어(컴퓨터가 이해하기 쉬운 언어)로 바꿔주는 것이다.

인터프리터와 컴파일러

인터프리터

  • 사용자가 직성한 소스코드를 한 문장씩 읽고 바로 기계어로 바꿔준다.
  • 그 후 변환된 코드를 실행한다
  • 인터프리터 언어에는 python, php가 있다.

컴파일러

  • 전체 소스코드를 모두 기계어 파일로 바꿔주고 그후에 변환된 코드를 실행한다.
  • 컴파일러 언어에는 C/C++가 있다.

자바의 컴파일


  1. 자바 소스코드(.java)를 작성한다.
  2. 자바 컴파일러가 자바 소스파일(.java)을 컴파일하여 자바 바이트 코드(.class)를 만든다.
  3. 자바 바이트 코드(.class)를 JVM(Java Virtual Machine)의 class loader에게 전달한다.
  4. class loader동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩/링크 하여 Runtime Data Area(JVM의 메모리)에 올린다.

    class loader의 세부 동작

    • 로드 : 자바 바이트 코드(.class)를 가져와서 Runtime Data Area(JVM의 메모리)에 로드한다.
    • 검증 : 자바 언어 명세(Java Language Specification)JVM 명세에 명시된 대로 구성되어 있는지 검증한다.
    • 준비 : 클래스가 필요한 메모리를 할당한다. (필드, 메소드, 인터페이스 등)
    • 분석 : 클래스의 constant pool 내의 모든 symbolic reference를 direct reference로 변경한다.
      • constant pool : Java Class File의 구성 항목 중 하나인 Constant pool은 리터럴 상수 값을 저장하는 곳이다.
    • 초기화 : 클래스 변수들을 적절한 값으로 초기화한다. (static 변수)
  5. Execution EngineRuntime Data Area(JVM의 메모리)에 올라온 자바 바이트 코드(.class)를 명령어 단위로 하나씩 가져와서 실행한다.

    Execution Engine에는 Interpreter와 Just-In-Time Compiler가 있다

    • Interpreter : 자바 바이트 코드(.class)를 한 줄씩 읽는다.
      • 실행이 느린 단점이 있다.
    • JIT(Just-In-Time) Compiler : Interpreter의 느린 단점을 보완하기 위해 나온 컴파일러이다.
      • interpreter 방식으로 실행하다가 적절한 시점에 자바 바이트 코드(.class) 전체를 컴파일하고 더이상 interpreting 하지 않고 해당 코드를 직접 실행한다.
      • JIT Compiler에 의해 해석된 코드는 캐시에 보관되므로 한 번 컴파일 된 후 빠르게 수행되는 장점이 있다.
      • interpreting 방식보다 훨씬 오래 걸리므로 한번만 실행되는 코드는 interpreting이 유리하다.

1.자바 코드(.java)

public class Main {
	public static void main(String[] args) {
    	System.out.println("Hello, World!");
    }
} 

2.컴파일러(Compiler)

  • 컴파일러는 자바코드(.java) 파일을 JVM(Java Virtual Machine)이 이해할 수 있는 자바 바이트 코드로 변환해준다.

3.자바 바이트 코드(.class)

  • JVM(Java Virtual Machine)이 이해할 수 있는 언어로 변환된 자바 소스 코드를 말한다.
  • 바이트 코드의 확장자는 .class이며 JVM이 설치되어 있으면 어느 운영체제에서도 실행이 가능하다.

4.인터프리터(Interpreter)

  • JVM(Java Virtual Machine) 안에 있는 인터프리터가 바이트 코드를 한 줄씩 읽어서 프로그램을 실행한다.

0개의 댓글