-
JVM(Java Virthal Machine)Java & Spring 2023. 12. 28. 18:06
JVM 요약
JVM은 JDK에 속해있으며 자바 가상 머신이다.
클래스 로더시스템과, 런타임 데이터 영역, 실행엔진, JNI 구조로 이루어져 있다 그리고
JVM은 자바 앱의 주체이다, 자바는 JVM으로써 각 플랫폼에 독립적으로 실행이 가능하다 그 이유는 컴파일러가 .java파일을 .class 인 bytecode를 컴파일 해주고 이 bytecode를 JVM이 기계어로 변환시켜 주기 때문이다.
JDK 구조
JVM(Java Virthal Machine)
- 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT컴파일러) 하여 실행한다.
- 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다.
- 특정 플랫폼에 종속적
- 클래스 로더 시스템과 런타임 데이터 영역, 실행엔진, 네이티브 메소드 인터페이스 구조로 나뉘어져 있습니다.
클래스 로더 시스템 -> .class에서 바이트코드를 읽고 메모리에 저장 합니다.
런타임 데이터 영역 -> 앱 실행을 위해 사용되는 메모리 영역 입니다.
실행엔진 -> 메모리 영역에 있는 데이터를 가져와 해당하는 작업을 수행 합니다.
JRE (Java Runtime Environment) -> JVM + 라이브러리
- 자바 애플리케이션을 실행할 수 있도록 구성된 배포판
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다.
- 개발 관련 도구는 포함하지 않는다. (JDK에서 제공)
JDK (Java Development Kit) -> JRE + 개발 툴
- JRE + 개발에 필요한 툴
- 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적
- 오라클은 자바 11부터 JDK만 제공하며, JRE를 따로 제공하지 않는다.
JVM구조
클래스 로더 시스템
- .class 에서 바이트코드를 읽고 메모리에 저장
- 로딩 -> 클래스를 읽어오는 과정
- 링크 -> 참조하는 다른 클래스나 메소드와의 연결을 수행하는 과정
- 초기화 -> static 값들을 초기화 및 변수에 할당
메모리
- 메소드 영역에는 클래스의 구조나 정보를 저장하는 영역
- 힙 영역에는 모든 객체 인스턴스/배열에 대한 메모리가 할당되는 영역
- 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그안에 메소드 호출을 스택프레임이라 부르는 블럭으로 쌓는다
- 쓰레드를 종료하면 런타임 스택도 사라진다.
- PC(Program Counter) 레지스터
- 쓰레드별로 생성되며 실행중인 명령을 저장하는 영역
- 네이티브 메소드 스택
- 자바 외부에서 구현된 네이티브 메소드의 호출을 관리하는 스택
실행엔진
- 인터프리터 -> 바이트 코드를 한줄 씩 해석/실행
- JIT 컴파일러 -> 자주 호출되는 메서드 (Hot method) 의 바이트 코드를 네이티브 코드로 컴파일
- GC (Garbage Collector) -> 더 이상 참조되지 않는 객체를 모아서 정리
JNI (Java Native Interface)
- 자바 애플리케이션에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
'Java & Spring' 카테고리의 다른 글
자바 기본형 과 참조형 (0) 2024.06.12 자바 클래스 (0) 2024.06.11 오버로딩 (Overloading) , 오버라이딩 (Overriding) 차이점 (0) 2023.12.26 자바(java) - 상속(inheritance) / extends (1) 2023.12.08 자바(java) 생성자 (0) 2023.12.04