본문 바로가기
Programming/Java

JVM의 주요기능

by Devsaurus 2023. 12. 30.
728x90

JVM(자바 가상 머신):


JVM(Java Virtual Machine)은 JRE(Java Runtime Environment)의 필수 부분이며 Java 바이트코드 실행을 담당합니다. 이는 기본 하드웨어의 플랫폼 독립적인 추상화를 제공하므로 Java 프로그램이 호환 가능한 JVM 구현이 있는 모든 장치 또는 운영 체제에서 실행될 수 있습니다.


JVM의 주요 기능:

1. 로드 및 적합성 확인:
JVM은 컴파일된 Java 바이트코드를 클래스 파일에서 메모리로 로드하고 바이트코드의 무결성을 확인합니다.

2. 실행:
JVM은 바이트코드를 호스트 시스템의 네이티브 기계어 코드로 해석하거나 컴파일하여 실행합니다.

3. 메모리 관리:
JVM은 힙 및 스택 관리를 포함하여 Java 프로그램에 대한 메모리 할당 및 할당 해제를 관리합니다.

4. Garbage Collection:
JVM에는 더 이상 도달할 수 없거나 프로그램에서 참조할 수 없는 객체가 차지하는 메모리를 자동으로 회수하는 Garbage Collection이 포함되어 있습니다.


JVM의 메모리 관리:

1. 힙 메모리:
힙은 동적 메모리 할당에 사용되는 메모리 영역입니다.
프로그램 실행 중에 생성된 객체 및 데이터 구조가 저장되는 곳입니다.
JVM은 힙 메모리를 관리하며 Young Generation, Old Generation(Tenured Space) 및 Permanent Generation(또는 최신 JVM에서는 Metaspace)의 두 영역으로 구분됩니다.

2. 스택 메모리:
JVM에서 실행되는 각 스레드에는 자체 스택 메모리가 있습니다.
스택은 지역 변수, 메소드 호출 정보, 부분 결과를 저장하는 데 사용됩니다.
스택 메모리는 스레드별로 다르며 JVM에 의해 자동으로 관리됩니다.

3. 메소드 영역:
메소드 영역(이전 JVM에서는 PermGen, 최신 JVM에서는 메타스페이스라고도 함)은 클래스 구조, 정적 변수 및 메소드 코드를 저장합니다.
모든 스레드에서 공유되며 JVM에 의해 관리됩니다.


Java의 Garbage Collection:

중요성:
가비지 콜렉터는 더 이상 필요하지 않은 객체가 차지하는 메모리를 자동으로 회수하여 메모리 누수를 방지하고 메모리 사용 효율성을 향상시키는 JVM의 중요한 구성 요소입니다.

주요 개념:

1. 접근성:
프로그램에서 액세스하거나 참조할 수 있는 개체는 도달 가능한 것으로 간주됩니다. 연결할 수 없는 개체는 가비지 컬렉

션의 후보가 됩니다.

2. 세대별 가비지 컬렉션:
Heap은 Young Generation(새로운 객체가 생성되는 곳)과 Old Generation(오래 지속되는 객체가 승격되는 곳)으로 구분됩니다.
대부분의 개체는 빠르게 도달할 수 없게 되므로 가비지 컬렉션은 젊은 세대에 초점을 맞추고 세대별 가비지 수집과 같은 알고리즘을 사용하여 수명이 짧은 개체를 효율적으로 식별하고 수집합니다.

3. 수집 알고리즘:
JVM은 직렬 수집기, 병렬 수집기, CMS(Concurrent Mark-Sweep) 및 G1(Garbage-First Garbage Collector)과 같은 다양한 가비지 컬렉션 알고리즘을 사용하며 각각은 특정 시나리오 및 성능 특성에 최적화되어 있습니다.

4. 자동 메모리 관리:
가비지 컬렉션은 백그라운드에서 자동으로 실행되어 필요할 때 메모리를 회수합니다. 개발자는 메모리를 수동으로 할당하거나 할당 해제할 필요가 없습니다.

예:

public class GarbageCollectionExample {
    public static void main(String[] args) {
        // Creating objects
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();

        // Making obj1 null, making it unreachable
        obj1 = null;

        // The garbage collector may reclaim the memory occupied by obj1
        // in a subsequent garbage collection cycle
    }
}

class MyClass {
    // Class definition
}


이 예시에서 'obj1'이 'null'로 설정되면 도달할 수 없게 되며 가비지 컬렉션은 후속 가비지 수집 주기에서 'obj1'이 점유한 메모리를 회수할 수 있습니다.


요약하면 JVM은 메모리 할당, 가비지 수집 및 메모리 할당 해제를 처리하여 Java에서 메모리를 관리합니다. 가비지 수집기는 연결할 수 없는 개체가 차지하는 메모리를 자동으로 회수하여 효율적인 메모리 사용을 보장하고 메모리 누수를 방지하는 중요한 구성 요소입니다.

728x90