
JVM이란 자바 byte 코드를 실행해주는 런타임 환경
class코드를 JVM이 번역할 수 있는 byte코드로 만들고, 이 byte코드를 JVM이 인터프리터 방식으로 기계어로 번역하면서 실행
Member.java 작성
"javac.exe"를 통해 .java 컴파일
컴파일이 된 Member.class 생성
이 때, .class 파일은 바이트 코드로 이루어져있다.
바이트 코드는 반 기계어 상태로, 컴퓨터가 읽을 수 없다. 추가적인 변환 과정이 필요하다.
Member.class 파일을 "java.exe"로 실행
"Class Loader"를 통해 "Member.class"를 JVM으로 가져온다.
JVM의 Byte Code Verifier에서 bytecode 검증
인터프리터가 bytecode -> binarycode로 변환
변환된 binarycode는 JVM의 class영역에 저장

Bytecode is program code that has been compiled from source code into low-level code designed for a software interpreter
바이트 코드란 특정 하드웨어가 아니라, 가상 환경에서 돌아가는 실행 프로그램을 위한 이진 표현법
JIT = Just In Time. 프로그램을 실제 실행하는 시점에 기계어로 번역하는 것
실행 중 프로그래밍 언어를 읽어가면서 대응되는 코드를 기계어로 바꿈
실행하기전 코드를 기계어로 모두 번역한 뒤 실행
실행시점에는 인터프리터 방식을 사용
인터프리트 된 코드를 Caching하여 중복된 코드가 지속해서 번역되는 것을 방지함


이 말은, 클래스를 처음 참조하는 시점 ( 인스턴스를 생성하는 시점 )에 파일을 메모리에 올린다는 뜻
이때, 모든 Class는 참조되는 순간 "동적"으로 Load와 Link가 이루어진다.
JVM이 운영체제 위에서 실행될 때, 운영체제에게 할당받는 메모리 영역

JDK = Java Developement Kit
= JRE + @
Java9 버전부터는 JRE가 JDK안에 포함돼서 사라졌다.
이 블로그의 글은 아래 블로그의 글을 참조하였습니다.
https://www.notion.so/java-JVM-1238f12eccff4b67be263cd4a5b7dbbe