Rumah  >  Artikel  >  Java  >  Penjelasan mendalam tentang mekanisme pemuatan kelas JVM: daripada pemuatan hingga pemunggahan

Penjelasan mendalam tentang mekanisme pemuatan kelas JVM: daripada pemuatan hingga pemunggahan

WBOY
WBOYasal
2024-05-09 13:18:01713semak imbas

Mekanisme pemuatan kelas merangkumi tiga langkah: pemuatan, pemautan dan pemula. Memuatkan: Baca data perduaan fail kelas ke dalam memori dan cipta objek perihalan kod bait. Memautkan: Mengesahkan, menyediakan dan menghuraikan objek perihalan bytecode dan mengaitkannya dengan kelas lain. Permulaan: Jalankan program pemula statik, tetapkan pembolehubah statik dan wujudkan perhubungan warisan. Apabila kelas tidak lagi dirujuk, JVM menjalankan analisis kebolehcapaian untuk menandakan kelas sebagai boleh dikitar semula, dan pemungut sampah menuntut semula memori kelas yang ditanda, tetapi pembolehubah statik kekal dalam ingatan.

Penjelasan mendalam tentang mekanisme pemuatan kelas JVM: daripada pemuatan hingga pemunggahan

Penjelasan mendalam tentang mekanisme pemuatan kelas JVM: daripada pemuatan kepada pemunggahan

Kata Pengantar

Memahami mekanisme pemuatan kelas Mesin Maya Java (JVM) adalah penting untuk menguasai pembangunan Java. Artikel ini akan melihat secara mendalam tentang cara JVM memuatkan, memaut dan memunggah kelas, dan menggambarkan mekanisme ini melalui contoh praktikal.

Proses pemuatan kelas

Proses pemuatan kelas merangkumi tiga langkah berikut:

  1. Memuatkan: Baca data perduaan fail kelas ke dalam memori dan cipta objek perihalan kod bait yang mewakili kelas.
  2. Pautan: Mengesahkan, menyediakan dan menghuraikan objek perihalan bytecode, memautkannya ke kelas lain dalam sistem.
  3. Initialization: Jalankan program pemula statik kelas, tetapkan nilai kepada pembolehubah statik dan wujudkan hubungan warisan antara kelas dan subkelas.

Proses pemunggahan kelas

Apabila kelas tidak lagi dirujuk, JVM akan melakukan langkah berikut untuk memunggahnya:

  1. Tandai sebagai kitar semula: JVM tidak lagi menandakan kelas rujukand melalui analisis kebolehcapaiand .
  2. Pengumpulan Sampah: Pengumpul sampah menuntut semula ruang memori kelas yang ditandakan sebagai boleh dikitar semula.

Praktikal Case

sample Code:

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
    }

}

class Analisis memuatkan:

  • loading: When myclass instantiated, fail kelasnya dimuatkan ke ingatan dan buat objek perihalan bytecode. MyClass 被实例化时,它的 class 文件被加载到内存,创建字节码描述对象。
  • 链接:字节码描述对象经过验证、准备和解析,关联至 System 类。
  • 初始化:静态变量 staticVar 被赋值为 10,类与其子类建立继承关系。

类卸载分析:

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

  • 标记为可回收:MyClass 对象被标记为可回收,因为 artık不再引用。
  • 垃圾回收:垃圾回收器回收 MyClass 对象的内存空间。
  • 静态变量保留:即使类已被卸载,静态变量 staticVar
Pautan: 🎜Objek perihalan Bytecode disahkan, disediakan dan dihuraikan, dikaitkan dengan kelas System. 🎜🎜🎜Permulaan: 🎜Pembolehubah statik staticVar diberikan nilai 10 dan kelas mewujudkan hubungan warisan dengan subkelasnya. 🎜🎜🎜🎜Analisis pemunggahan kelas: 🎜🎜🎜Apabila pembolehubah obj terkeluar dari skop dan sampah dikumpul: 🎜🎜🎜🎜ditanda sebagai boleh dikitar semula: 🎜My is class Ditandakan sebagai boleh dikitar semula kerana artık tidak lagi dirujuk. 🎜🎜🎜Pengumpulan sampah: 🎜Pengumpul sampah menuntut semula ruang memori objek <code>MyClass. 🎜🎜🎜Pengekalan pembolehubah statik: 🎜 Walaupun kelas telah dipunggah, pembolehubah statik staticVar masih kekal dalam ingatan kerana ia diselenggara oleh pemuat kelas. 🎜🎜

Atas ialah kandungan terperinci Penjelasan mendalam tentang mekanisme pemuatan kelas JVM: daripada pemuatan hingga pemunggahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn