1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.
자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
JVM(Java Viertual machine) 주요 특징
스택 기반의 가상 머신
플랫폼의 독립성
JVM
은 기본 자료형을 명확하게 정의하여 호환성을 유지하고 플랫폼 독립성을 보장WORA(Write once Run Anywhere)
"한 번 작성해, 어디에서나 실행한다"JVM
은 자바 바이트 코드를 운영체제에 맞게 해석해 주고 실행 → 초기에는 해석하는 과정을 거치기 때문에 네이티브 언어(c,c++..)에 비해 속도가 느렸지만 JIT(Just In Time)
컴파일러를 구현해 이점 극복심볼릭 레퍼런스
c, c++
의 call by address
가 아닌 call by reference
로 참조를 통해 모든 타입을 가리키는 것을 의미하는 것 같음가비지 컬렉션
콘솔창을 이용해 컴파일
// HelloJava.java
public class HelloJava {
public static void main(String[] str) {
System.out.println("Hello Java!");
}
}
.java 파일이 있는 위치로 이동
> javac HelloJava.java
javac
자바 컴파일러로 HelloJava.java
를 클래스 파일이자 바이트 코드인 HelloJava.Class
로 변환Java IDE(통합개발 환경)을 이용해서 컴파일
콘솔창을 이용해 컴파일
.class 파일이 있는 위치로 이동
> java HelloJava
Hello Java!
javac
로 인해 바이트 코드로 컴파일된 파일을 java
명령어로 실행Java IDE(통합개발 환경)을 이용해서 실행
WORA
를 구현하기 위해 JVM은 사용자 언어인 자바와 기계어 사이의 중간 언어로 자바 바이트코드를 사용JVM
이 이해할 수 있는 자바 바이트 코드로 변환.class
파일 형식Just-In-Time
컴파일러인터프리트 방식
과 컴파일 방식
을 혼합한 방식인터프리트(Interpreter) 방식
: 프로그램을 실행할 때마다 컴퓨터가 알아들을 수 있는 언어로 변환하는 방식, 성능이 느림컴파일(Compile) 방식
: 실행하기 전에 컴퓨터가 알아들을 수 있는 언어로 변환하는 작업을 미리 실행하는 방식JVM
을 포함한 자바 프로그램의 전체적인 실행 과정JVM
은 Class Loader
, Execution Engine
, Garbage Collector
, Runtime Data Area
크게 4가지로 구성Class Loader
Runtime Data Area
로 적재하는 역할Execution Engine
Class Loader
에 의해 메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할JIT
컴파일러를 이용하는 방식이 있음Garbage Collector
GC
는 Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않는 객체들을 탐색 후 제거하는 역할GC
가 역할을 하는 시간을 정확히 언제인지 알 수 없음(참조가 없어지자마다 해제되는 것을 보장하지 않음)Full GC
가 일어나서 수 초간 모든 쓰레드가 정지한다면 장애로 이어지는 치명적인 문제가 생길 수 있음Runtime Data Area
JVM
의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역JDK(Java Development Kit)
: 자바 통합 개발 환경 = JRE
+ 개발 도구(javac, java compiler...)JRE(Java Runtime Environment)
: 자바 실행 환경 = JVM
+ 라이브러리 클래스 + 클래스 로더출처 :
https://d2.naver.com/helloworld/1230
http://tcpschool.com/java/java_intro_programming
https://www.notion.so/Week1-f3ac173dfe724760927ea99721331fb6
https://www.notion.so/1-300a0dbecbf04122abb04af13f02d82d
https://blog.naver.com/frommydreamtomydream/222141454684
https://jeong-pro.tistory.com/148
https://wakestand.tistory.com/378