JVM 이란?
JVM
JVM 은 java 컴파일러에 의해 .class 파일 형태의 바이트 코드로 변환된 파일을
OS에 맞게 해석 해주는 역할을 합니다.
- 자바 프로그램이 플랫폼 독립성을 갖게 해준다
바이트 코드는 기계어가 아니기 때문에 컴퓨터가 바로 읽을 수 없는데
이때 JVM 이 운영체제가 바이트 코드를 읽을 수 있도록 해석 해준다.
하지만 JVM의 해석을 거치기 때문에 c언어 같은 네이티브 언어에비해 속도가 느렸지만 JIT(Just In Time)컴파일러를 구현해 이점을 극복
JIT
Just In Time 컴파일 방식
c언어 같은 네이티브 언어에서 하는 것처럼 프로그램을 실행하기 전에 처음 한 번 컴파일 하는 대신
프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일 하는 방식
JIT 컴파일러는 같은 코드를 매번 해석하는 대신 처음 실행될 때 인터프리트를 하면서 자주 쓰이는 코드를 캐싱한 뒤,
이후에는 캐싱된 코드를 가져다 쓰기 때문에 인터프리터의 느린 실행 속도를 개선할 수 있다.
. JVM은 크게 Class Loader, Runtime Data Areas, Excution Engine 3가지로 구성되어 있다

JVM 구조
Class Loader
RunTime 시점에 클래스를 로딩하게 해주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드하게 됩니다.
Class - Java 프로그램을 컴파일하여 생성된 .class
Class 객체 - 일반객체를 만들기 위해 JVM 메모리에 로드된 .class에 대한 객체
일반 객체 - Class 객체로 생성한 객체
ClassLoader는 작성한 Java Byte Code를 JVM메모리상에 올려주는 역할을 하는 것이고, 프로그래머는 Class 객체를 이용하여 일반객체를 생성할 수 있습니다. 즉 메모리 내에서 Class 객체를 매개로 하여 일반객체를 생성합니다.
클래스 로더는 런타임 동안 Java 클래스를 JVM(Java Virtual Machine)에 동적으로 로딩할 책임이 있다. 또한, 그들은 JRE(Java Runtime Environment)의 일부분이다. 따라서 JVM은 클래스 로더 덕분에 Java 프로그램을 실행하기 위해 기본 파일이나 파일 시스템에 대해 알 필요가 없다.
Runtime Data Areas
JVM이 프로그램을 수행하기 위해 OS로 부터 별도로 할당 받은 메모리 공간

PC Register
- JVM은 연산을 위해 필요한 operand를 임시로 저장하기 위한 용도로 PC Register를 활용한다.
- PC Register는 현재 수행중인 JVM Instruction의 주소를 가지고 있게 된다.
Java Virtual Machine Stack
- 스레드가 시작 될 때 생성 (다른 스레드에는 접근 불가)
- 메소드가 호출 되면 메소드 정보가 스택에 쌓이고, 메소드가 종료 될 때 스택에서 제거
- 메소드의 매개변수 , 지역변수 , 어드레스 등을 저장하고 메소드 종료시 제거
Native Method Stack
- Java 외의 언어를 위한 스택
Method Area
- 모든 쓰레드가 공유하는 메모리 영역
Heap
- 동적으로 할당하여 사용 하는 영역
Execution Engine
load 된 바이트 코드를 실행하는 Runtime module이 Excution Engine 이다
Class loader 작업이 끝난 Class 파일은
Runtime Data Areas 의 Method Area 의 배치된다.
JVM 은 Method Area 의 Byte Code 를 Execution Engine 에 제공 하여 클래스에 정의된 내용대로 실행.
- JIT 컴파일러 방식으로 실행된다.
출처: https://unabated.tistory.com/entry/JVM-ClassLoader의-작동원리 [랄라라]
https://www.slipp.net/wiki/pages/viewpage.action?pageId=8880262
https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-1.html
Java Garbage Collection Basics
Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill
www.oracle.com
Java Virtual Machine - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다. 나무위키는 백과사전이 아니며 검증되지 않았거나, 편향적이거나, 잘못된 서술이 있을 수 있습니다. 나무위키는 위키위키입니다. 여러분이 직접 문서를 고칠 수 있으며, 다른 사람의 의견을 원할 경우 직접 토론을 발제할 수 있습니다.
namu.wiki
JVM 이란?
# JIT
medium.com
4장 - Class Loader - 자바와 웹 프로그래밍 - SLiPP::위키
페이지 … Home 자바 Java Performance Fundamental 배너의 맨 끝으로 배너의 맨 처음으로 4장 - Class Loader 메타 데이터의 끝으로 건너뛰기 박재성님이 작성, 2013년 03월 13일에 최종 변경 메타 데이터의 시작으로 이동 Class Loader 모든 Class는 참조되는 순간 동적으로 Load 및 Link가 이루어진다. 이 방식을 Dynamic Loading이라고 한다.Load Time Dynamic Loading
www.slipp.net