>Java >java지도 시간 >JVM 클래스 로딩 메커니즘에 대한 심층 설명: 로딩부터 언로딩까지

JVM 클래스 로딩 메커니즘에 대한 심층 설명: 로딩부터 언로딩까지

WBOY
WBOY원래의
2024-05-09 13:18:01738검색

클래스 로딩 메커니즘에는 로딩, 연결, 초기화의 세 단계가 포함됩니다. 로딩: 클래스 파일 바이너리 데이터를 메모리로 읽고 바이트코드 설명 객체를 생성합니다. 연결: 바이트코드 설명 개체를 검증, 준비 및 구문 분석하고 이를 다른 클래스와 연결합니다. 초기화: 정적 초기화 프로그램을 실행하고, 정적 변수를 할당하고, 상속 관계를 설정합니다. 클래스가 더 이상 참조되지 않으면 JVM은 연결 가능성 분석을 수행하여 클래스를 재활용 가능으로 표시하고 가비지 수집기는 표시된 클래스의 메모리를 회수하지만 정적 변수는 메모리에 남아 있습니다.

JVM 클래스 로딩 메커니즘에 대한 심층 설명: 로딩부터 언로딩까지

JVM 클래스 로딩 메커니즘에 대한 심층 설명: 로딩에서 언로딩까지

머리말

JVM(Java Virtual Machine)의 클래스 로딩 메커니즘을 이해하는 것은 Java 개발을 마스터하는 데 중요합니다. 이 기사에서는 JVM이 클래스를 로드, 링크 및 언로드하는 방법을 자세히 살펴보고 실제 예제를 통해 이 메커니즘을 설명합니다.

클래스 로딩 프로세스

클래스 로딩 프로세스는 다음 세 단계로 구성됩니다.

  1. Loading: 클래스 파일의 바이너리 데이터를 메모리로 읽어와 클래스를 나타내는 바이트코드 설명 객체를 생성합니다.
  2. Links: 바이트코드 설명 개체를 검증, 준비 및 구문 분석하여 시스템의 다른 클래스에 연결합니다.
  3. 초기화: 클래스의 정적 초기화 프로그램을 실행하고, 정적 변수에 값을 할당하고, 클래스와 하위 클래스 간의 상속 관계를 설정합니다.

클래스 언로드 프로세스

클래스가 더 이상 참조되지 않으면 JVM은 클래스를 언로드하기 위해 다음 단계를 수행합니다.

  1. 재활용 가능으로 표시: JVM은 도달성 분석을 통해 더 이상 참조되지 않는 클래스를 표시합니다. .
  2. Garbage Collection: 가비지 수집기는 재활용 가능으로 표시된 클래스의 메모리 공간을 회수합니다.

실용 사례

샘플 코드:

public class MyClass {

    private static int staticVar = 10;
    private int instanceVar = 20;

    public static void main(String[] args) {
        MyClass obj = new MyClass();
        System.out.println(staticVar);  // 输出 10
        System.out.println(obj.instanceVar);  // 输出 20
    }

}

클래스 로딩 분석:

  • Loading: MyClass가 인스턴스화되면 해당 클래스 파일이 메모리에 로드되고 바이트코드 설명 객체를 생성합니다. MyClass 被实例化时,它的 class 文件被加载到内存,创建字节码描述对象。
  • 链接:字节码描述对象经过验证、准备和解析,关联至 System 类。
  • 初始化:静态变量 staticVar 被赋值为 10,类与其子类建立继承关系。

类卸载分析:

obj 变量超出作用域并被垃圾回收后:

  • 标记为可回收:MyClass 对象被标记为可回收,因为 artık不再引用。
  • 垃圾回收:垃圾回收器回收 MyClass 对象的内存空间。
  • 静态变量保留:即使类已被卸载,静态变量 staticVar
링크: 🎜바이트코드 설명 개체는 System 클래스와 연결되어 확인, 준비 및 구문 분석됩니다. 🎜🎜🎜초기화: 🎜정적 변수 staticVar에는 값 10이 할당되고 클래스는 하위 클래스와 상속 관계를 설정합니다. 🎜🎜🎜🎜클래스 언로드 분석: 🎜🎜🎜obj 변수가 범위를 벗어나 가비지 수집되는 경우: 🎜🎜🎜🎜재활용 가능으로 표시: 🎜MyClass 개체는 artık이 더 이상 참조되지 않으므로 재활용 가능으로 표시됩니다. 🎜🎜🎜가비지 수집: 🎜가비지 수집기는 MyClass 개체의 메모리 공간을 회수합니다. 🎜🎜🎜정적 변수 보유: 🎜 클래스가 언로드되더라도 정적 변수 staticVar는 클래스 로더에 의해 유지되기 때문에 여전히 메모리에 남아 있습니다. 🎜🎜

위 내용은 JVM 클래스 로딩 메커니즘에 대한 심층 설명: 로딩부터 언로딩까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.