Bidang instance (termasuk bidang dukungan properti) mendapatkan N-salinan untuk objek-N.
Bidang statis mendapatkan satu salinan per kelas.
Metode adalah blok bytecode (atau setelah JIT, blok instruksi asli) yang merupakan bagian dari program "gambar" atau segmen kode yang dapat dieksekusi. Metode sudah menjadi bagian dari gambar program saat ia duduk di disk. Setelah gambar dimuat oleh OS (atau CLR), ada satu salinan bersama dari kode metode.
Mereka bukan bagian dari "heap" atau alokasi runtime secara umum, kecuali dalam kasus di mana Anda dapat menggunakan kompiler yang dapat di-host untuk mengkompilasi metode baru dengan cepat. Metode tidak mendapatkan "dialokasikan" seperti objek dan mereka tidak "dialokasikan" relatif terhadap pembuatan objek. Mereka hanya ada sebagai bagian dari program sebelum objek tunggal pernah dipakai. Bahkan lambda / delegasi tidak dialokasikan dengan cepat. Compiler membuat kelas sesuai permintaan untuk mengimplementasikan objek kode yang tampaknya dinamis ini, dan mereka juga ada sebagai bagian dari gambar bytecode pada disk.
PEMBARUAN per komentar:
Standar JVM mengatakan ini:
2.5.4. Area Metode
Java Virtual Machine memiliki area metode yang dibagi di antara semua utas Java Virtual Machine. Area metode analog dengan area penyimpanan untuk kode yang dikompilasi dari bahasa konvensional atau analog dengan segmen "teks" dalam proses sistem operasi. Ini menyimpan struktur per-kelas seperti pool konstan run-time, data lapangan dan metode, dan kode untuk metode dan konstruktor, termasuk metode khusus (§2.9) yang digunakan dalam kelas dan instance inisialisasi dan inisialisasi antarmuka.
Area metode dibuat pada permulaan mesin virtual. Meskipun area metode secara logis bagian dari heap, implementasi sederhana dapat memilih untuk tidak mengumpulkan sampah atau memadatkannya. Versi spesifikasi Java Virtual Machine ini tidak mengamanatkan lokasi area metode atau kebijakan yang digunakan untuk mengelola kode yang dikompilasi. Area metode dapat berukuran tetap atau dapat diperluas seperti yang dipersyaratkan oleh perhitungan dan dapat dikontrak jika area metode yang lebih besar menjadi tidak perlu. Memori untuk area metode tidak perlu bersebelahan.
Jadi jelas bahwa (1) ya spec tidak menentukan bagaimana hal ini dilakukan, tetapi (2) itu analog dengan area penyimpanan untuk kode yang dikompilasi dari bahasa konvensional, yaitu. segmen teks. Inilah poin yang saya buat.