콘텐츠로 이동

자바 컴파일러와 인터프리터의 동작 방식

JIT & AOT

  • 바이트코드의 실행속도를 높이기 위해 등장
  • JIT은 실행 중 부분부분 기계어로 컴파일(실행 중 속도가 빨라졌다 느려짐)
  • AOT는 설치 중 전부 기계어로 컴파일(설치 시 속도가 느림. 설치하는데 오래 걸림)
  • JIT + AOT 일단 설치 완료 후 실행 전 빈 시간에 컴파일

Compiler vs Interpreter

Compiler Interpreter
컴파일러는 컴파일 중 문법오류 검사 인터프리터는 실행할 때마다 문법 검사
컴파일된 기계어의 실행속도가 더 빠름 인터프리터는 기계어와 거리가 멀어 해석하는데 시간이 걸린다.
엔진에 따라 JIT컴파일 방식을 지원하기도 함

Intermediate Representation & Virtual Machine

실행 과정
소스코드 -> 중간 언어(IR, p-code, bytecode) -> 기계어
ex) .java -javac.exe-> .class -JVM-> 기계어

C언어 컴파일 과정

.c(소스파일) -컴파일러-> .obj(목적파일) -링커-> .exe(실행파일)
링커가 목적파일들 + library파일을 묶어 실행파일을 만듬.

Unit test

방대한 크기의 프로그램을 구성하는 부품들이 잘 동작하는지 테스트해야 한다.

테스트만을 위한 도구들 : Java의 경우 JUnit, TestNG

소스 파일 관리

Maven 표준 디렉토리 구조

src/main/

src/main/java/
(자바 소스파일 .java)

src/main/resources/
(실행 중 사용할 기타 파일 .properties .xml .txt ...)

src/main/webapp/
(html, css, javascript)

src/test/

src/test/test/
(단위 테스트를 실행하는 자바 소스파일)
src/test/resources/
(단위 테스트 중 사용할 기타 파일)

1 repo = 1 project

repository/

src/
bin/

1 repo = multi project

repository/

docs/
project1/

project1/src/
project1/bin/

project2/

project2/src/
project2/bin/

자바 폴더가 중복될 수 있어 이를 방지하기 위해 도메인명으로 이름을 짓는다.

기억보다 기록

Java coding style https://www.oracle.com/technetwork/java/javase/documentation/codeconventions-139411.html https://google.github.io/styleguide/javaguide.html https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/styleguide.md