JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다.
개발 관련 도구는 포함하지 않는다. ( JDK에서 제공 )
JDK (Java Development Kit)
JRE + 개발에 필요한 툴
소스 코드를 작성할 때 사용 하는 자바 언어는 플랫폼에 독립적
오라클 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다.
자바 컴파일러도 JDK에 해당
자바 유료화 ? 오라클에서 만든 Oracle JDK 11 버전 부터 상용으로 사용할 때 유료 11버전 하위 이거나 Open JDK 이거나 Amazon JDK (Corretto) 는 무료이다
JVM의 작동 방식
Java 코드가 바이트 코드로 컴파일 된다. (바이트 코드는 호스트시스템과 JAVA 소스 사이의 중간 언어이다)Java의 JVM은 메모리 공간 할당을 담당한다.
JVM 아키텍쳐
3가지 서브 시스템으로 구분할 수 있다.
1. 클래스 로더 시스템
Java의 동적 클래스 로딩 기능은 Class Loader System에서 처리합니다.
Loading : 클래스 읽어오는 과정
클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드"영역에 저장
이 때 메소드 영역에 저장하는 데이터
FQCN
클래스 , 인터페이스 , 이늄
메소드 와 변수
로딩이 끝나면 해당 클래스 타입의 Class객체를 생성하여 "힙" 영역에 저장
클래스 로더는 계층 구조로 이뤄져 있으며 , 기본적으로 세가지 클래스 로더가 제공된다.
BootStrap ClassLoader
JAVA_HOME\lib 에 있는 코어 자바 API를 제공한다.
클래스 로더 중 가장 높은 우선순위가 부여된다.
Extension ClassLoader(플랫폼 클래스로더)
JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽는다.
Application ClassLoader
애플리케이션 클래스패스 (애플리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치) 에서 클래스를 읽는다.
public class App {
public static void main(String[] args) {
ClassLoader classLoader = App.class.getClassLoader();
System.out.println(classLoader);
System.out.println(classLoader.getParent());
System.out.println(classLoader.getParent().getParent());
// 클래스 로더는 계층형 구조
// 출력
//sun.misc.Launcher$AppClassLoader@18b4aac2
//sun.misc.Launcher$ExtClassLoader@1540e19d
//null - native코드로 구현되어 있기 때문에 출력할 수 없다.
}
}
Linking : 레퍼런스를 연결하는 과정
Verify (확인)
.class 파일 형식이 유효한지 체크한다.
바이트 코드 검증기는 생성된 바이트 코드가 적절한지 여부를 확인 한다.
확인이 실패하면 확인 오류가 발생한다.
Prepare(준비)
모든 정적 변수(static 변수) 에 대해 메모리가 할당 되고 기본값으로 할당 된다.
Resolve(해결)
All symbolic memory references are replaced with the original references from Method Area.
Java Virtual Machine ?
JVM이란?
Java코드 또는 애플리케이션을 구동하기 위한 런타임 환경을 제공하는 엔진이다.
Java 바이트 코드(.class) 를 기계 언어(OS에 특화된 언어)로 변환 한다.
JRE (Java Runtime Environment)
JDK (Java Development Kit)
JVM의 작동 방식
Java 코드가 바이트 코드로 컴파일 된다. (바이트 코드는 호스트시스템과 JAVA 소스 사이의 중간 언어이다)Java의 JVM은 메모리 공간 할당을 담당한다.
JVM 아키텍쳐
3가지 서브 시스템으로 구분할 수 있다.
1. 클래스 로더 시스템
Loading : 클래스 읽어오는 과정
Linking : 레퍼런스를 연결하는 과정
Initialization : static 값들 초기화 및 변수에 할당
2. 런타임(실행) 데이터 영역 ★
Method Area(메소드 영역) ★
Heap Area(힙 영역)
Stack Area(스택 영역)
PC(Program Counter) Registers
Native Method Stacks
3. 실행 엔진
Interpreter(인터프리터)
JIT Compiler(Just-In-Time)
Garbage Collector
JNI(Java Native Interface)
Native Method Libraries
출처
Java Virtual Machine's Internal Architecture
Chapter 5 of Inside the Java Virtual Machine The Java Virtual Machine by Bill Venners Page 1 of 13 >> Advertisement The previous four chapters of this book gave a broad overview of Java's architecture. They showed how the Java virtual machine fits into
www.artima.com
The JVM Architecture Explained - DZone Java
This post explores the JVM architecture, what it is, how it operates, why it's useful, and presents a helpful diagram that highlights major JVM functionalities.
dzone.com
더 자바, 코드를 조작하는 다양한 방법 - 인프런
여러분이 사용하고 있는 많은 자바 라이브러리와 프레임워크가 "어떻게" 이런 기능을 제공할 지 궁금한적 있으신가요? 이번 강좌를 통해 자바가 제공하는 다양한 코드 또는 객체를 조작하는 방
www.inflearn.com
'기록 > JAVA' 카테고리의 다른 글