728x90
이 글은 ASAC 06기를 수강하며 강의 자료 참고 및 추가 자료 수집을 통해 작성된 글입니다.
https://suhsein.tistory.com/17
Compiler와 Interpreter
컴파일과 인터프리트의 결과는 모두 기계어이다.
컴파일과 인터프리트의 차이점은 소스 코드를 기계어로 변환하는 과정에 있다.
Compile
컴파일은 번역이라고 할 수 있다. 실행 파일 전체를 통으로 기계어로 바꾼 뒤, exe 파일로 저장한다.
- C나 C++의 경우 컴파일 언어이기 때문에, GCC(GNU Compiler Collection <- GNU C Compiler)를 통해서 .obj 파일로 컴파일 된다.
- 이후에 .obj 파일을 assembly와 linking (내부에서 사용하는 라이브러리를 연결)하여 기계어로 변환된 실행 가능한 .exe 파일이 생성된다.
- 런타임에는 실행 파일(.exe)을 실행하기만 하면 된다.
IDE를 사용하면 컴파일 과정에서 소스 코드의 문법 오류를 발견할 수 있고, 컴파일 시 발생하는 에러를 컴파일 에러라고 한다.
Interpret
인터프리트는 통역이라고 할 수 있다. 런타임에 코드를 한 줄 씩 기계어로 바꾼다.
자바는 컴파일 과정이 있는 인터프리트 언어이다.
- 자바 소스코드를 먼저 javac를 통해서 .class 파일로 컴파일 한다.
- 클래스들을 묶어서 압축된 .jar 파일을 생성한다.
- JVM(Java Virtual Machine)으로 인터프리트 한다.
- 운영체제마다 읽을 수 있는 기계어가 다른데, jvm이 플랫폼으로 동작하여 각 os에 맞게 인터프리트
- JVM 내부에는 just-in-time 컴파일러가 존재한다. 자주 사용되는 함수는 미리 컴파일 해둘 수 있다.
자바 뿐만 아니라 자바스크립트에도 just-in-time 컴파일러가 존재한다. (TurboFan)
https://medium.com/@minhaz217/lets-understand-the-javascript-just-in-time-compiler-jit-and-how-the-v8-engine-works-ff6276d131a1
728x90
'ASAC' 카테고리의 다른 글
[ASAC 06] 캐시 1편 - 사용 목적과 위치에 따른 분류 (1) | 2024.09.01 |
---|---|
[ASAC 06] 수평적 확장에 의한 다중 서버에서의 배포 전략 (1) | 2024.08.28 |
[ASAC 06] OS 개요 및 프로그램 동작 원리 (1) | 2024.08.28 |
[ASAC 06] 서버 구축 방식, Serverless, Load Balancer (3) | 2024.08.28 |
[ASAC 06] 데이터 직렬화와 역직렬화 (0) | 2024.08.28 |