자바가 어떻게 고급언어로 작성된 소스코드(.java)를 컴퓨터가 이해할 수 있는 기계어(.class)로 변환하는지 파악하자!

Q1. 자바의 컴파일 과정

Java는 .java → .class → JVM → 실행

컴파일(Complie)은 고급언어로 작성된 파일을 기계어로 변환하는 과정을 말한다

  1. 개발자는 .java 확장자의 파일을 Java 언어로 작성
  2. 작성된 파일(.java)는 javac 컴파일러에의해 .class 파일로 변환
  3. .class 파일을 클래스로더로 전송
  4. JVM 내부의 클래스로더는 .class 파일을 동적으로 로딩(여기서 메모리 절약 및 지연로딩 가능)
  5. 로딩된 클래스는 링킹(Linking)과정을 거져 JVM 런타임 데이터 영역에 배치
  6. JVM 실행엔진이 바이트 코드를 인터프리터 또는 JIT 컴파일러 방식으로 실행

이를 통해 플랫폼 독립성을 확보하여 다양한 운영체게제서 실행 가능하다

  • .class 파일은 JVM이 이해 할 수 있는 중간 코드 Bytecode로 구성됨
  • interpreter 방식: 한줄씩 읽으며 실행
  • JIT(Just-In-Time) 컴파일러 : 전체 또는 자주사용하는 코드를 기계어로 변환하여 속도를 향상 시키는 방식

추가 정리

인터프리터(Interpreter) vs 컴파일러(Complier)

구분 인터프리터 (Interpreter) 컴파일러 (Compiler)
동작 방식 소스코드를 한 줄씩 읽고 바로 실행 전체 소스코드를 한 번에 분석하여 기계어로 변환
실행 속도 상대적으로 느림 빠름 (기계어로 번역 후 실행하므로)
에러 처리 에러가 발생하면 그 시점에서 멈춤 전체를 먼저 분석하고 에러를 한 번에 보여줌
목적 파일 별도의 목적 파일을 생성하지 않음 목적 파일(예: .class, .exe)을 생성함
메모리 사용 적음 상대적으로 많음
대표 언어 Python, JavaScript, Ruby C, C++, Java (컴파일 후 JVM에서 실행)
플랫폼 의존성 플랫폼에 맞게 인터프리터가 필요 컴파일된 파일은 특정 플랫폼에 의존적일 수 있음

댓글남기기