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 LoaderRuntime Data Area로 적재하는 역할Execution EngineClass Loader에 의해 메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할JIT 컴파일러를 이용하는 방식이 있음Garbage CollectorGC는 Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않는 객체들을 탐색 후 제거하는 역할GC가 역할을 하는 시간을 정확히 언제인지 알 수 없음(참조가 없어지자마다 해제되는 것을 보장하지 않음)Full GC가 일어나서 수 초간 모든 쓰레드가 정지한다면 장애로 이어지는 치명적인 문제가 생길 수 있음Runtime Data AreaJVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역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