일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 비전공자 git
- 미국대학생활
- Java 스터디
- 파이데이아창의인재학과
- java
- 부산외대
- 미국유학
- JVM아키텍처
- 사이드프로젝트
- F1학생비자
- Kenneth Park
- 해외유학
- 만다라트프로젝트
- 자바 스터디
- 2+2
- 케네스
- 개발일지
- jpa
- 유학생대학생활
- 자바
- California State University Sacramento
- 유학생 준비물
- 미국유학생
- 개인 프로젝트 개발일지
- i-20
- 케네스로그
- 복수학위제도
- CSUS
- 미국유학생활
- 미국대학
- Today
- Total
케네스로그
[Java] 자바의 컴파일 과정 본문
기존의 문제🥲
이전에 전통적인 언어의 컴파일과 프로그램 실행과정에 대해 알아보았다. 기존의 문제는 사용자의 프로그램 실행 환경에 맞춰서 다양한 버젼의 프로그램 개발이 필요로 했다는 점이다. 또한, Windows에서 컴파일하여 생성한 실행파일은 오직 Windows머신에서만 실행이 가능하다.
Java의 등장 ☕️
Java는 Virtual Machine(가상머신)이라는 개념의 프로그램을 통해 Java프로그램을 실행한다. 개발자들은 가상머신에 맞춰 개발을 진행하고, 사용자는 본인의 실행환경에 맞는 가상머신 프로그램만 구비하면 프로그램을 어디서든 똑같이 실행할 수 있는 것이다. 이렇게 자바는 WORA (Write Once Run Anywhere)라는 슬로건을 내세우며 등장했으며, 개발자와 사용자들은 열광했다.
Java 컴파일 과정
1. 모든 소스코드는 .java포맷의 파일로 작성된다.
2. javac 컴파일러는 자바코드를 .class파일로 컴파일한다. 이 때, .class파일은 JVM이 이해할 수 있는 바이트코드(bytecode)로 이루어진다.
3. JVM의 인터프리터와 JIT 컴파일러는 바이트코드를 각 OS가 실행할 수 있는 기계어로 변환시킨다.
4. 프로세서는 기계어에 따라 동작을 수행한다.
바이트코드란?
바이트코드(bytecode)는 JVM이 이해할 수 있는 저수준 언어이다. .java파일을 컴파일 한 결과로 생성된 .class파일은 바이트코드로 이루어져있다. 기존의 언어의 컴파일 결과로 생성되는 오브젝트파일(.obj)과 달리, 바이트코드(.class)는 모든 플랫폼의 JVM에서 실행가능하다. Windows환경에서 생성된 바이트코드는 Mac환경에서도 실행이 가능하다는 것이다. 물론, Java가 설치되어 있어야만 한다.
위의 Java로 작성된 소스코드를 javac컴파일러를 통해 .class파일을 생성한다. 생성된 클래스파일은 바이트코드로 작성되어있을 것이다. 바이트코드의 민낯을 보기위해 열어보면 다음과 같이 변환되어 있다. 기존의 어셈블리어와 유사한 모습을 보이고 있다.
바이트코드 확인하는 방법🔎
javap -c (.class file) 명령을 통해 바이트코드를 확인할 수 있다.
javap명령은 클래스파일의 필드, 생성자, 메소드를 출력한다.
왜 '바이트코드'라고 할까?🤔
각 바이트코드는 1byte크기의 opcode로 이루어져있다. 그렇기에 바이트코드란 이름으로 명명되었다. 더 자세한 설명은 이곳을 참조하자.
'Dev > Java' 카테고리의 다른 글
[Java] 데이터 타입, 범위, 기본값 (0) | 2022.01.30 |
---|---|
[Java] JVM 아키텍처(3) - 실행 엔진 Execution Engine (0) | 2021.10.13 |
[Java] JVM 아키텍처(2) - 런타임 데이터 영역 Runtime Data Area (0) | 2021.10.13 |
[Java] JDK와 JRE의 비교 (0) | 2021.10.09 |
[Java] JVM 아키텍처(1) - JVM구조, 클래스로더 ClassLoader (0) | 2021.10.09 |