JVM (Java Virtual Machine)은 무엇이며 내부적으로 어떻게 작동합니까?
JVM (Java Virtual Machine)은 무엇이며 내부적으로 어떻게 작동합니까?
JVM (Java Virtual Machine)은 컴퓨터가 Java 프로그램을 실행할 수 있도록 JAVA 런타임 환경 (JRE)의 중요한 구성 요소입니다. JVM은 플랫폼 독립적이므로 JVM 구현이있는 모든 장치 또는 운영 체제에서 Java Bytecode를 실행할 수 있습니다. JVM은 Java Bytecode와 기본 하드웨어 사이의 중개자 역할을하므로 다른 플랫폼에서 재 컴파일없이 Java 응용 프로그램을 실행할 수 있습니다.
내부적으로 JVM은 여러 주요 단계를 통해 작동합니다.
- 로드 : Java 프로그램이 실행되면 JVM은 먼저 바이트 코드가 포함 된
.class
파일을로드합니다. 클래스 로더 서브 시스템은 이러한 파일을 메모리에로드 할 책임이 있습니다. - 검증 : 일단로드되면 바이트 코드는 Java의 보안 또는 무결성 제약 조건을 위반하지 않도록 확인됩니다. 이 단계는 악성 코드가 실행되는 것을 방지하는 데 도움이됩니다.
- 준비 : 이 단계에서 JVM은 클래스 변수에 대한 메모리를 할당하여 기본값으로 초기화합니다.
- 해결 : 여기에는 코드에서 직접 참조로의 상징적 참조를 해결하는 것이 포함됩니다. JVM 은이 단계에서 추가 클래스를로드해야 할 수도 있습니다.
- 초기화 : 정적 변수의 실제 초기화와 정적 초기화 블록의 실행은이 단계에서 발생합니다.
- 실행 : JVM은 실행 엔진을 사용하여 바이트 코드 지침을 실행합니다. 실행 엔진은 통역사와 JIT (Just-In-Time) 컴파일러로 구성 될 수 있습니다. 통역사는 바이트 코드 지침을 하나씩 읽고 실행하는 반면 JIT 컴파일러는 바이트 코드를 더 빠른 실행을 위해 기본 기계 코드로 변환합니다.
- 가비지 수집 : JVM은 메모리 할당 및 거래를 관리하여 더 이상 필요하지 않은 메모리가 쓰레기 수집을 통해 되 찾을 수 있도록합니다.
JVM의 주요 구성 요소와 그 기능은 무엇입니까?
JVM은 여러 가지 주요 구성 요소로 구성되며 각각은 특정 기능을 제공합니다.
- 클래스 로더 서브 시스템 : 이 구성 요소는 클래스 및 인터페이스로드, 연결 및 초기화를 담당합니다. 다양한 소스 (예 : 로컬 파일 시스템, 네트워크 위치)의 클래스로드하기 위해 계층 적 접근 방식을 사용합니다.
-
런타임 데이터 영역 (메모리 영역) : 프로그램 실행 중에 사용되는 여러 메모리 영역이 포함됩니다.
- 방법 영역 : 런타임 상수 풀, 필드 및 메소드 데이터와 같은 클래스 구조를 저장합니다.
- 힙 영역 : 객체를 저장하고 모든 스레드 사이에서 공유됩니다.
- 스택 영역 : 로컬 변수 및 부분 결과가 저장되는 프레임이 포함되어 있습니다. 각 스레드에는 자체 스택이 있습니다.
- PC 레지스터 : 스레드가 실행중인 현재 명령어의 주소를 보유합니다.
- 기본 메소드 스택 : 스택 영역과 유사하지만 기본 방법에 사용됩니다.
-
실행 엔진 : 이 구성 요소는 바이트 코드 지침을 실행합니다. 포함 :
- 통역사 : 한 번에 하나의 명령어를 Bytecode를 실행합니다.
- JIT (Just-In-Time) 컴파일러 : 더 빠른 실행을 위해 바이트 코드를 기본 기계 코드로 컴파일합니다.
- 쓰레기 수집기 : 더 이상 사용되지 않는 물체를 되 찾아서 메모리를 관리합니다.
- JNI (Java Native Interface) : Java 코드는 C, C 및 어셈블리와 같은 다른 언어로 작성된 기본 응용 프로그램 및 라이브러리에서 호출 및 호출 할 수 있습니다.
- 기본 메소드 라이브러리 : JVM이 기본 방법의 실행을 지원하기 위해 필요한 기본 라이브러리 모음.
JVM은 메모리를 어떻게 관리하고 쓰레기 수집을 수행합니까?
JVM의 메모리 관리에는 런타임 데이터 영역, 특히 힙 및 스택 내에서 메모리 할당 및 거래 할당이 포함됩니다. JVM이 메모리를 관리하는 방법은 다음과 같습니다.
-
메모리 할당 :
- 스택 메모리 : 로컬 변수 및 메소드 호출 세부 사항을 저장하는 데 사용됩니다. 메소드가 호출되고 반환 될 때 메모리가 자동으로 할당되고 거래됩니다.
- 힙 메모리 : 객체 저장에 사용됩니다. 새로운 객체가 생성 될 때 메모리가 할당되고 더 이상 참조되지 않을 때까지 사용 중입니다.
-
쓰레기 수집 :
-
JVM은 쓰레기 수집을 사용하여 더 이상 참조되지 않은 객체를 식별하고 제거하여 힙 메모리를 자동으로 관리합니다. 프로세스에는 다음이 포함됩니다.
- Mark Phase : 쓰레기 수집기는 뿌리 (글로벌 변수, 스택 변수 등)의 모든 참조를 추적하여 여전히 사용중인 객체 (도달 가능)를 식별합니다.
- 스윕 단계 : 쓰레기 수집가는 마크 단계에서 쓰레기로 식별 된 물체가 차지하는 메모리를 되 찾습니다.
- 소형 단계 (선택 사항) : 일부 쓰레기 수집기는 생존 물체를 이동하여 여유 공간을 통합하고 조각화를 줄입니다.
-
일반적인 쓰레기 수거 알고리즘은 다음과 같습니다.
- 직렬 GC : 단일 스레드 환경에 적합합니다.
- 병렬 GC : 가비지 수집에 여러 스레드를 사용하여 성능을 향상시킵니다.
- CMS (Concurrent Mark Sweep) GC : 응용 프로그램 스레드와 동시에 대부분의 작업을 수행하여 응용 프로그램의 일시 중지를 최소화합니다.
- 쓰레기 우선 (G1) GC : 대형 힙 메모리 영역을 위해 설계, 일시 정지 시간 및 처리량 균형을 맞추십시오.
-
JVM은 Java 응용 프로그램 성능을 향상시키기 위해 어떤 최적화를 적용합니까?
JVM은 Java 응용 프로그램의 성능을 향상시키기 위해 여러 최적화를 적용합니다.
-
방금 (JIT) 컴파일 :
- JVM은 JIT 컴파일을 사용하여 바이트 코드를 런타임 동안 기본 기계 코드로 변환합니다. 이로 인해 컴파일 된 코드가 해석 된 바이트 코드보다 훨씬 빠르게 실행됨에 따라 성능이 크게 향상됩니다.
-
인라인 :
- JIT 컴파일러는 작은 메소드를 호출 방법으로 인라인하여 메소드 호출의 오버 헤드를 줄일 수 있습니다. 이 최적화는 특히 자주 호출되는 방법에서 성능을 크게 향상시킬 수 있습니다.
-
루프 Unrolling :
- JIT 컴파일러는 루프 제어의 오버 헤드를 줄이고 다른 최적화를 가능하게하기 위해 루프를 풀어 줄 수 있습니다. 이는 단일 루프 반복 내에서 더 많은 루프 반복을 실행하여 성능을 향상시킬 수 있습니다.
-
데드 코드 제거 :
- JIT 컴파일러는 실행되지 않은 코드를 감지하고 제거하여 컴파일 된 코드의 크기를 줄이고 런타임 성능을 향상시킬 수 있습니다.
-
탈출 분석 :
- 이 기술은 객체를 힙 대신 스택에 할당 할 수 있는지 여부를 분석하여 가비지 수집의 필요성을 줄이고 성능 향상을 줄입니다.
-
적응 형 최적화 :
- JVM은 응용 프로그램의 성능을 지속적으로 모니터링하고 최적화 전략을 동적으로 조정합니다. 예를 들어, 자주 실행되는 메소드를 기본 코드로 컴파일하면서 해석 할 중요한 코드를 남기지 않을 수 있습니다.
-
프로필 유도 최적화 :
- JVM은 런타임 프로파일 링 데이터를 사용하여 최적화 결정을 안내합니다. 여기에는 추적 메소드 호출 주파수 및 분기 예측이 포함되어있어 애플리케이션의 가장 중요한 부분에 최적화 노력을 집중합니다.
이러한 최적화를 통해 JVM은 실행중인 코드의 특정 런타임 특성 및 워크로드 패턴에 동적으로 적응하여 Java 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.
위 내용은 JVM (Java Virtual Machine)은 무엇이며 내부적으로 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)