1. Algoritma Analisis Aksesibilitas (Pencarian Root)
JVM menentukan apakah objek bertahan melalui analisis aksesibilitas. Gagasan dasar dari algoritma ini adalah menggunakan serangkaian objek yang disebut GC Roots sebagai titik awal, dan mencari ke bawah dari node -node ini. Jalur yang dicari disebut rantai referensi. Ketika suatu objek terhubung ke GC Roots tanpa rantai referensi, terbukti bahwa objek ini tidak tersedia. Pada gambar di bawah ini, Objects object1 , object2 , object3 , dan object4 adalah objek yang tersedia. Meskipun object5 , object6 , dan object7 terkait satu sama lain, mereka tidak dapat dijangkau dengan GC Roots , sehingga mereka akan dinilai sebagai objek yang dapat didaur ulang.
Dalam bahasa Java, objek berikut yang dapat digunakan sebagai akar GC termasuk:
1. Objek yang dirujuk dalam tumpukan mesin virtual (variabel lokal dalam bingkai tumpukan).
2. Objek yang dirujuk oleh atribut statis kelas di area metode.
3. Objek yang dirujuk oleh konstanta di area metode.
4. Objek yang dirujuk oleh JNI (Metode Asli) dalam Stack Metode Lokal.
2. Kode Sumber Musim Semi
spring membuat objek melalui kelas yang mengimplementasikan antarmuka BeanFactory , dengan struktur implementasi berikut:
SimpleJnDibeanFactory.java
kelas publik SimpleJnDibeanFactory memperluas jndilocatorsupport mengimplementasikan beanfactory {private final set <string> shareableresources = new hashset (); // Peta yang dibuat menggunakan baru adalah objek yang dirujuk dalam tumpukan dan dapat digunakan sebagai objek GC Roots Private Final Map <String, Object> singletonObjects = new HashMap (); peta akhir pribadi <string, kelas <? >> Resourcetypes = new HashMap (); Public SimpleJnDibeanFactory () {this.setResourCeref (true); } public void addShareAbleresource (String ShareAbleresource) {this.shareAbleresources.add (ShareAbleresource); } public void setShareAblerSources (String ... ShareAbleresources) {this.shareAbleresources.addall (arrays.aslist (Shareableresources)); } objek publik getBean (nama string) melempar beansException {return this.getBean (name, object.class); }}StaticListableBeanFactory.java
Public Class StaticListableBeanFactory mengimplementasikan ListableBeanFactory {Private Final Map <String, Object> Beans; Public StaticListableBeanFactory () {// Peta yang dibuat menggunakan baru adalah objek yang dirujuk dalam tumpukan, yang dapat digunakan sebagai objek akar GC this.beans = new LinkedHashMap (); } public staticListableBeanFactory (peta <string, objek> beans) {assert.notnull (kacang, "peta kacang tidak boleh nol"); this.beans = kacang; } public void addbean (nama string, objek bean) {this.beans.put (name, bean); }} Dari kode sumber di atas, kita dapat melihat bahwa objek disimpan dalam peta, di mana mapsingletonObjects digunakan untuk menyimpan objek singleton. map singletonObjects dan beans (baru di konstruktor) keduanya dibuat secara langsung menggunakan kata kunci new , yang merupakan referensi yang kuat dan memenuhi kondisi sebagai objek GC Roots (objek yang dirujuk dalam tumpukan mesin virtual (variabel lokal dalam bingkai tumpukan). Objek yang dibuat dengan cara ini terhubung ke GC Roots对di map , sehingga mereka tidak akan dipanggil kembali.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu studi atau pekerjaan Anda. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.