728x90
반응형
컴파일러와 인터프리터
컴파일러
- 프로그램 전체를 스캔하여 이를 모두 기계어로 변역
- 전체를 스캔하기 때문에 초기 스캔 시간 ⬆️
- ex) C, C++, 자바 등
- 목적
- 오류 발견: 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 하는 것
- 코드 최적화
- 컴파일 과정(자바)
- 개발자가 .java 소스코드를 작성
- 자바 컴파일러가 자바 소스코드 파일을 읽어 바이트코드(.class)로 컴파일
바이트코드 파일: 아직 컴퓨터가 읽을 수 없는 JVM이 읽을 수 있는 코드 - 컴파일 된 바이트 코드를 JVM의 클래스 로더(Class Loader)에 전달
- 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역인 JVM의 메모리에 올림
- 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행
실행엔진 방식
- 인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행 -> 전체적인 실행속도 ⬇️
- JIT 컴파일러: 인터프리터의 단점을 보완하기 위해 도입된 방식으로, 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고, 이후에는 해당 메소드를 더이상 인터프리팅 하지 않고 바이너리 코드로 직접 실행하는 방식 -> 인터프리팅 방식보다 속도 ⬆️
인터프리터
- 프로그램 실행 시 한 번에 한 문장씩 번역 -> 실행시간 ⬆️
- 컴파일러처럼 목적코드를 만들지 않고, 링킹 과정도 거치지 않는다 -> 메모리 효율 ⬆️
- 한 문장씩 번역될 때 오류를 만나게 되면 바로 프로그램 중지 -> 프로그램을 실행해봐야 오류 발견 가능
- ex) Python, Ruby, Javascript
구분 | 자바 | 자바스크립트 |
변수 | 선언 필요 | 선언 필요 없다. |
실행 | 컴파일 후 실행 | 한 줄씩 실행 |
장점 | 오류 찾기와, 코드 최적화, 분할 컴파일에 의한 공동 작업이 가능 | 실행 편리 |
사용 프로그램 | 대형 프로그램 | 간단한 프로그램 |
728x90
반응형
'개념' 카테고리의 다른 글
10. 가상 메모리 관리 (0) | 2022.10.22 |
---|---|
Redis (0) | 2022.10.19 |
8. 물리 메모리 (0) | 2022.10.09 |
SQS(Simple Queue Service) (0) | 2022.10.01 |
SES(Simple Email Service) (0) | 2022.09.23 |