java程序运行的时候,是把所有的class文件都加载到内存吗?还是用的什么加载什么?
高洛峰
高洛峰 2017-04-18 10:49:58
0
4
601

一运行就全部加载?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(4)
洪涛

Tidak semua dimuatkan, ia boleh difahami sebagai memuatkan atas permintaan.
Contohnya, kelas induk yang diwarisi, antara muka yang dilaksanakan, pembolehubah yang diisytiharkan, jenis pemulangan kaedah, dsb.

Iaitu, apabila menggunakan kelas semasa, mana-mana kelas yang diperlukan yang tiada akan dimuatkan serta-merta.

Peter_Zhu

Muat atas permintaan.
Masa pemuatan kelas:

1) Apabila menemui empat arahan kod bait baharu, getstatic, putstatic atau invokestatic, jika kelas belum dimulakan, permulaannya perlu dicetuskan terlebih dahulu. Senario kod Java yang paling biasa yang menjana empat arahan ini ialah: apabila menggunakan kata kunci baharu untuk membuat seketika objek, membaca atau menetapkan medan statik kelas (diubah suai secara akhir, dan hasilnya telah dimasukkan ke dalam kumpulan malar pada masa penyusunan ).
2) Apabila menggunakan kaedah pakej java.lang.reflect untuk membuat panggilan reflektif ke kelas, jika kelas belum dimulakan, pemulaannya perlu dicetuskan terlebih dahulu.
3) Apabila memulakan kelas, jika didapati bahawa kelas induknya belum dimulakan, anda perlu mencetuskan permulaan kelas induknya terlebih dahulu.
4) Apabila mesin maya dimulakan, pengguna perlu menentukan kelas utama untuk dilaksanakan (kelas yang mengandungi kaedah main()), dan mesin maya akan mula-mula memulakan kelas utama.
5) Apabila menggunakan sokongan bahasa dinamik JDK 1.7, jika hasil penghuraian akhir bagi contoh java.lang.invoke.MethodHandle ialah pemegang kaedah REF_getStatic, REF_putStatic, REF_invokeStatic dan kelas yang sepadan dengan pemegang kaedah ini mempunyai belum dimulakan, anda perlu mencetuskan permulaannya terlebih dahulu.
Untuk lima senario yang akan mencetuskan permulaan kelas, spesifikasi mesin maya menggunakan kelayakan yang sangat kuat: "ya dan sahaja". Di samping itu, semua kaedah merujuk kelas tidak akan mencetuskan permulaan dan dipanggil rujukan pasif.

Sumber: Pemahaman mendalam tentang masa pemuatan kelas JVM 7.2

巴扎黑

Saya belum memahami sepenuhnya bidang ini, jadi saya tidak berani untuk mengelirukan orang lain.
Seperti yang saya tahu, apabila mesin maya sedang berjalan, ia akan pramuat kelas yang biasa digunakan, seperti kelas di bawah pakej java.lang.
Bagi fail kelas/pakej balang yang anda rujuk dalam program anda, terdapat proses pemuatan.
Apabila mesin maya memerlukan fail kelas, ia akan memanggil classLoader.loadClass() untuk memuatkannya terlebih dahulu ditemui, ia akan diserahkan kepada pemuat induk. Selepas mencari lapisan demi lapisan, classLoader akan memanggil kaedah findClass untuk memuatkan fail.
Kelas yang dilindungi<?> loadClass(Nama rentetan, penyelesaian boolean)

    throws ClassNotFoundException
{
    synchronized (getClassLoadingLock(name)) {
        // First, check if the class has already been loaded
        Class<?> c = findLoadedClass(name);
        if (c == null) {
            long t0 = System.nanoTime();
            try {
                if (parent != null) {
                    c = parent.loadClass(name, false);
                } else {
                    c = findBootstrapClassOrNull(name);
                }
            } catch (ClassNotFoundException e) {
                // ClassNotFoundException thrown if class not found
                // from the non-null parent class loader
            }

            if (c == null) {
                // If still not found, then invoke findClass in order
                // to find the class.
                long t1 = System.nanoTime();
                c = findClass(name);

                // this is the defining class loader; record the stats
                sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                sun.misc.PerfCounter.getFindClasses().increment();
            }
        }
        if (resolve) {
            resolveClass(c);
        }
        return c;
    }
伊谢尔伦

http://blog.csdn.net/briblue/...
Anda boleh rujuk blog ini, ia sangat bagus

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan