Rumah  >  Artikel  >  Java  >  Gambaran keseluruhan pemuat kelas Java dan proses pemuatan kelas

Gambaran keseluruhan pemuat kelas Java dan proses pemuatan kelas

王林
王林ke hadapan
2023-04-24 10:13:07855semak imbas

1. Proses pemuatan kelas

Gambaran keseluruhan pemuat kelas Java dan proses pemuatan kelas

Memuatkan

Dapatkan Fail, dimuatkan ke dalam metaspace. .class

Pautan

  • Pengesahan: Sahkan keselamatan fail.class

  • Penyediaan: Peruntukkan memori untuk pembolehubah jenis statik dan tetapkan nilai lalai

  • Penghuraian: Tukar rujukan simbol dalam kumpulan malar menjadi rujukan langsung, rujukan simbol menunjuk kepada a Jika kelas tidak dimuatkan, atau medan atau kaedah kelas yang dipunggah tidak dimuatkan, maka penghuraian akan mencetuskan pemuatan kelas ini

Permulaan

Laksanakan kaedah pembina kelas

() proses, jika kelas mempunyai kelas induk, init akan memastikan bahawa kelas induk jvm dilaksanakan dahulu, dan kemudian subkelas init ialah dilaksanakan. init

2. Pemuat kelas

Gambaran keseluruhan pemuat kelas Java dan proses pemuatan kelas

Mulakan pemuat kelas

Pemuat kelas mula dilaksanakan dalam bahasa C/C++, menggunakan untuk memuatkan Java perpustakaan kelas teras. Kelas permulaan hanya memuatkan kelas yang nama pakejnya bermula dengan: java, javax dan sun

Pemuat kelas lanjutan

Pemuat kelas induk ialah

. 启动类加载器Muatkan perpustakaan kelas dalam dua direktori berikut:

  • Direktori java.ext.dirs

  • Direktori pemasangan JDK:

    Direktorijre/lib/ext

Kita boleh meletakkan pakej kita sendiri dalam direktori di atas dan ia akan dimuatkan secara automatik.

Pemuat kelas aplikasi

Pemuat kelas induk ialah

, yang bertanggungjawab untuk memuatkan pustaka kelas di bawah laluan yang ditentukan oleh 启动类加载器 atau 环境变量classpath Ia adalah kelas lalai pemuat dalam program Semua kelas dalam program Java kami dimuatkan olehnya. 系统属性java.class.path

Pemuat kelas tersuai

mewarisi kelas

dan mengatasi kaedah findClass(). Jika tiada keperluan yang terlalu kompleks, anda boleh terus mewarisi kelas java.lang.ClassLoader dan mengatasi kaedah URLClassLoader. loadClass

Fungsi

  • Penyulitan: Kod Java boleh dinyahkompilasi dengan mudah, jika anda perlu menyahkompilasi kod anda sendiri Untuk menyulitkan untuk mengelakkan penyahkompilasi, anda boleh menyulitkan kod yang disusun dengan algoritma penyulitan tertentu Selepas kelas disulitkan, anda tidak boleh lagi menggunakan ClassLoader Java untuk memuatkan kelas Dalam kes ini, anda perlu menyesuaikan ClassLoader untuk menyahsulit kelas terlebih dahulu apabila memuatkan kelas , dan kemudian muat semula.

  • Memuatkan kod daripada sumber bukan standard: Jika bytecode anda diletakkan dalam pangkalan data atau pun dalam awan, anda boleh menyesuaikan pemuat kelas untuk memuatkan kelas daripada sumber yang ditentukan .

Model perwakilan ibu bapa

jvm menggunakan kaedah pemuatan atas permintaan untuk fail kelas Apabila kelas perlu digunakan, jvm akan memuatkan fail kelasnya objek dalam ingatan. Apabila memuatkan kelas,

digunakan. 双亲委派机制

  • Jika

    menerima permintaan daripada 类加载器, ia tidak akan memuatkannya terlebih dahulu, tetapi akan mewakilkan permintaan itu kepada 类加载 untuk pelaksanaan. 父类加载器

  • Jika kelas induk masih mempunyai pemuat kelas induk, teruskan mewakilkan ke atas sehingga

    启动类加载器:Bootstrap ClassLoader

  • Jika pemuat kelas induk Jika tugasan memuatkan boleh diselesaikan, hasil yang berjaya akan dikembalikan Jika kelas induk gagal dimuatkan, subkelas akan cuba memuatkannya dengan sendirinya Jika subkelas gagal dimuatkan, pengecualian

    Ini ialah ClassNotFoundException双亲委派模式

Memecahkan Model Delegasi Ibu Bapa

Tujuan:

  • Terdapat banyak pembekal perkhidmatan dalam Aplikasi Java Service Provider Interface (SPI) Antara muka ini membolehkan pihak ketiga menyediakan pelaksanaan untuk mereka Contohnya, SPI biasa termasuk JDBC, JNDI, dsb. Antara muka SPI ini tergolong dalam pustaka teras Java. dan secara amnya wujud dalam pakej rt.jar dan terdiri daripada beban kelas Bootstrap Loader. Pemuat kelas Bootstrap tidak boleh memuatkan kelas pelaksanaan SPI secara langsung, jadi ia perlu diwakilkan kepada pemuat kelas lain untuk memuatkan

  • Dalam pelayan Tomcat, terdapat pelayan yang menjalankan berbilang versi berbeza Walau bagaimanapun , disebabkan permintaan untuk perkhidmatan dengan nama yang sama, model delegasi induk perlu dipecahkan dan memuatkan berbilang kelas dengan nama yang sama.

Kaedah:

  • Gunakan pemuat kelas konteks

  • Tulis Semula

    kaedahloadClass

Atas ialah kandungan terperinci Gambaran keseluruhan pemuat kelas Java dan proses pemuatan kelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam