목표
자바소스파일(.java)을 JVM으로 실행하는 과정 이해하기
학습 1) JVM이란 무엇인가
자바로 작성된 프로그램을 실행하는 가상 머신
JVM Java Vitrual Machine의 약자로 자바 바이트 코드를 어떻게 실행할지에 대한 표준 스펙
-
표준 스펙이므로 이를 구현한 벤더는 여러 가지
-
컴파일러는 JVM에 포함되지 않는다.
-
컴파일러가 .java 파일을 컴파일 하면 .class파일(바이트코드로 이루어짐)이 된다.
-
클래스로더가 클래스 파일을 로드한다.
-
로드된 바이트 코드들이 배치되는 공간이 있어야 돼 == Runtime Data Area
-
그럼 Executive Engine(GC,, 가비지컬렉터, JIT 컴파일러가 여기있어)이 이를 실행한다
- 인터프리터가 실행시점에 바이트코드를 기계어로 번역.
- JIT 컴파일러가 자주 실행 되는 것은 컴파일 해두고
-
JVM을 쓰면 OS에 종속적이지 않고, 메모리 관리를 한다는 장점
학습내용
학습 2) 컴파일하는 방법
학습 3) 실행하는 방법
- cmd에서 java + 클래스파일(.class 는 붙이지 않는다)를 입력한다
- java.exe : 자바인터프린터, 자바프로그램(클래스파일)을 실행
- 자바프로그램을 실행 > java.exe가 지정된 클래스 파일에서 main 메서드를 찾는다 > 메서드 안의 첫 번째 문장부터 실행한다 > 메인메서드의 모든 문장이 실행되고 나면 프로그램 종료
학습 4) 바이트코드란 무엇인가
학습 5) JIT컴파일러란 무엇이며 어떻게 동작하는지
- 출처 : 위키피디아JIT 컴파일러란 무엇인가
- Just In Time 컴파일러
- JIT 컴파일러는 인터프리트방식과 컴파일 방식의 혼합.
- 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.
- JVM에서만 돌아가는 자바 바이트 코드를 해당 플랫폼에 맞는 기계어(native machine code)로 컴파일해 준다.
- JIT는 어떻게 동작하는가
![](https://velog.velcdn.com/images%2Fbongf%2Fpost%2Fd7f84b7d-d1ce-458e-8b52-c659ded3a647%2Fimage.png)
- JVM이 처음 나왔을 때 interpreter방식 (한 줄씩 해석하고 실행)때문에 속도가 느렸다. 하지만 JIT로 극복했다.
: interpreter - 바이트코드를 하나씩 읽어서 실행
- Java는 사람이 쓴 코드 > 바이트코드 > 기계어로 번역해서 시간이 많이 걸린다. 그 문제를 해결하기 d위한 것. 실행시점에 자주 쓸만한 코드(해당 바이코드 묶음 전체, 메소드 단위?)들을 기계어(native 코드)로 변환시킨 다음에 저장해두기 때문에 코드가 재사용될 때 변환 시간을 단축한다https://medium.com/@lazysoul/jit-just-in-time-16bb63f3ae26
학습 6) JVM 구성요소
학습 7) JDK와 JRE의 차이
- 출처 : https://goodgid.github.io/Java-JDK-JRE/
- JRE는 JVM 읽기 전용 / JDK는 읽고 쓰는 전용(개발용) 이라고 보면 된다
- JRE (Java Runtime Environmnet) 말그대로 자바 실행 환경
- JRE는 JVM이 실행될 수 있는 환경을 구현해 놓은 것이다.
- 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일과 기타 파일을 가지고 있다.
- 여기에는 자바 프로그래밍 도구가 없어 읽기만 가능하다
- JDK (Java Development Kit)
- 자바 개발 키트
- JDK = JRE + 프로그래밍 도구 (자바 컴파일러 도구 등)
![](https://velog.velcdn.com/images%2Fbongf%2Fpost%2Fe65faff5-e483-41c9-8efd-82c40816b64c%2Fimage.png)
보충_자바 프로그램의 실행과정
![](https://velog.velcdn.com/images%2Fbongf%2Fpost%2F0d99bc6a-4d7d-44ab-9ba5-27f5e1258138%2Fimage.png)
더 깊게 설명한 호눅스 수업내용
210215 월 java chess 2주차-1 수업 복기 [비공개필수]