JAVA의 컴파일 방식은 인터프리터와 결합하여 이루어지는 하이브리드 방식이다.
컴파일과 인터프리터를 간단하게 설명하면 다음과 같다
컴파일 방식은 C와 C++ 같이 한번에 기계어로 번역하여 실행하는것을 말하고
인터프리터 방식은 한 줄 식 기계어로 번역하여 실행하는 것을 말한다.
컴파일 방식은 인터프리터에 비해 실행속도가 빠르다는 장점이 있으나 컴파일 단계에서 OS에 맞추어 변환되기 때문에 다른 OS에서 사용 불가하다는 단점이 있다.
인터프리터 방식은 컴파일방식에 비해 소스 수정을 간단하게 할 수 있으며 시스템간의 이식성이 뛰어나다는 장점이 있다. 하지만 실행 할 때마다 문법검사를 하고 소스파일이 있어 실행속도가 느리다는 단점이 있다.
Java는 컴파일의 실행속도와 인터프리터의 이식성의 장점들을 조합해서 실행시킨다.
이렇게 Java를 하이브리드 방식으로 동작하면 한번만 컴파일하면 OS에 상관없이 실행할 수 있다는 장점이 생긴다.
"Write Once, Run Anywhere" : WORA는 자바의 표어이기도 하다.
컴퓨터가 다르더라도 JVM이 알아서 각각의 환경에 맞추어 변환하게 된다.
Java의 실행과정 중 bytecode는 진짜 기계어가 아니다. 실행할때는 반드시 VirtualMachine : VM 이 필요하다.
Java Virtual Machine : JVM은 운영체제에 맞추어 실행코드를 번역해준다. 이 인터프리터 과정에서는 JVM에서 실행되기 위해 진짜 기계어를 쓰는것이 아니다. 따라서 기계어를 이용하여 실행하는 컴파일 과정보다 실행속도가 느리다.
Java에서는 이 단점을 JIT나 AOT를 통해 중간언어 실행방식의 실행속도 문제를 해결한다.
JIT(Just in Time) 방식
JIT방식의 컴파일은 중간언어에서 JVM을 거쳐 OS로 실행되는과정에서
자주 번역해서 실행하는 코드에 대해 JIT 컴파일을 통해 수행한다.
이를 Hot Reload라고 한다.
AOT(Ahead of Time) 방식
실행 전에 바이트 코드를 기계어로 바꾼다. 실행전에 모두 기계어로 바꿔 성능은 낮아질 수 있으나
그 이후 부터는 실행시간이 빨라진다.
컴퓨터의 환경은 OS 와 CPU 종류에 따라 달라질 수 있다.
같은 x86 CPU에서 실행되는 Windows 나 Linux는 다른 환경이라고 할 수 있고
같은 MacOS가 intel x86 cpu에서 실행되는지 Arm기반 M1, M2 CPU에서 실행되는지 에 따라 다른환경이라고 할 수 있다.
두 환경은 CPU가 같으면 번역되는 기계어는 같지만 OS 형식이달라 배치형식이 다르다 할 수 있고,
OS는 같지만 CPU가 달라 배치형식은 같지만 기계어는 다르다 할 수 있다.
'TIL' 카테고리의 다른 글
JAVA 빌드 도구 정리 (4) | 2023.05.24 |
---|---|
Git 기초 사용법 정리 (4) | 2023.05.24 |
소프트웨어와 웹애플리케이션 (0) | 2023.05.22 |
[AI] 딥러닝 CNN 모델 3주 13일차 (4) | 2023.05.11 |
[AI] 딥러닝 최적화 알고리즘 3주 12일차 (3) | 2023.05.10 |