cari
RumahJavajavaTutorialMempelajari dan memahami rujukan lemah Java

Apa——Apakah rujukan yang lemah?

Rujukan lemah dalam Java secara khusus merujuk kepada kelas java.lang.ref.WeakReference 🎜>Kewujudan objek rujukan yang lemah tidak akan menghalang objek yang ditunjukkannya daripada dikitar semula oleh pemungut sampah. Penggunaan rujukan lemah yang paling biasa adalah untuk melaksanakan pemetaan kanonik (seperti jadual cincang).


Andaikan pemungut sampah menentukan pada masa tertentu bahawa objek lemah boleh dicapai (iaitu, semua titik semasa yang menunjuk kepadanya adalah rujukan lemah), maka pemungut sampah akan Kosongkan semua rujukan yang lemah ke objek, dan kemudian tandakan objek yang boleh dicapai dengan lemah sebagai boleh dimuktamadkan supaya ia akan dikitar semula kemudian. Pada masa yang sama atau kemudian, pemungut sampah akan meletakkan rujukan lemah yang baru sahaja dikosongkan ke dalam baris gilir rujukan (Reference Queue) yang ditentukan semasa mencipta objek rujukan yang lemah.

Sebenarnya, terdapat empat jenis rujukan dalam Java, iaitu daripada kuat kepada lemah ialah: rujukan kuat, rujukan lembut, rujukan lemah dan rujukan maya. Di bawah ini kami memperkenalkan secara ringkas tiga jenis rujukan yang lain kecuali rujukan yang lemah:

    Rujukan Kuat: Biasanya apabila kita mencipta objek baru melalui yang baru, rujukan yang dikembalikan adalah rujukan yang kuat, jika objek boleh dicapai melalui satu siri rujukan yang kuat, ia boleh dicapai dengan kuat, maka ia tidak akan dikitar semula
  • Rujukan Lembut: Rujukan Lembut Perbezaan antara rujukan dan rujukan lemah ialah jika objek boleh dicapai dengan rujukan yang lemah, ia akan dikitar semula tanpa mengira sama ada memori semasa mencukupi, manakala objek yang boleh dicapai oleh rujukan lembut akan dikitar semula apabila ingatan tidak mencukupi, jadi rujukan lembut adalah lebih baik daripada rujukan lemah. Rujukan adalah "lebih kuat"
  • Rujukan Hantu: Rujukan Hantu ialah rujukan paling lemah di Jawa, jadi sejauh manakah ia lemah? Ia sangat rapuh sehinggakan kita tidak boleh mendapatkan objek yang dirujuk melalui rujukan maya Satu-satunya tujuan rujukan maya ialah apabila objek yang dituju dikitar semula, rujukan maya itu sendiri akan ditambahkan pada baris gilir rujukan untuk merekodkannya. Objek runcing telah dikitar semula.
Mengapa——Mengapa menggunakan rujukan yang lemah?


Pertimbangkan senario berikut: Kini terdapat kelas Produk yang mewakili produk Kelas ini direka bentuk untuk tidak boleh dilanjutkan, dan pada masa ini kami mahu menambah nombor pada setiap produk . Satu penyelesaian ialah menggunakan HashMap. Jadi persoalan timbul Jika kita tidak lagi memerlukan objek Produk untuk wujud dalam ingatan (contohnya, produk ini telah dijual), dengan mengandaikan bahawa rujukan yang menunjuk kepadanya adalah produkA, kita akan menetapkan nilai produkA kepada null pada masa ini . Walau bagaimanapun, pada masa ini Objek Produk yang ditunjuk oleh productA pada masa lalu tidak akan dikitar semula kerana ia jelas masih dirujuk oleh HashMap.

Jadi dalam kes ini, jika kita ingin benar-benar mengitar semula objek Produk, tidak cukup dengan hanya memberikan rujukan kukuhnya kepada null, tetapi juga untuk mengalih keluar masukan yang sepadan daripada HashMap. Jelas sekali kami tidak mahu melakukan kerja "mengalih keluar entri yang tidak diperlukan lagi daripada HashMap" sendiri Kami ingin memberitahu pemungut sampah bahawa apabila hanya kekunci dalam HashMap merujuk kepada objek Produk, objek Produk yang sepadan boleh menjadi. dikitar semula. Jelas sekali, menurut definisi rujukan lemah sebelum ini, menggunakan rujukan yang lemah boleh membantu kita mencapai matlamat ini. Kita hanya perlu menggunakan objek rujukan lemah yang menunjuk ke objek Produk sebagai kunci dalam HashMap.

Bagaimana——Bagaimana untuk menggunakan rujukan yang lemah?


Ambil senario yang diterangkan di atas sebagai contoh Kami menggunakan objek rujukan yang lemah yang menunjuk ke objek Produk sebagai kunci HashMap Kami hanya perlu mentakrifkan objek rujukan yang lemah seperti ini :

Produk produkA = Produk baharu(...);
WeakReference weakProductA = WeakReference(productA);



Sekarang, jika objek weakProductA dirujuk Ia menunjuk kepada Product object productA. Jadi bagaimana kita mendapatkan produk objek ProdukA yang ditunjukkannya melalui weakProduct? Ia sangat mudah. ​​Anda hanya memerlukan kod berikut:

Product product = weakProductA.get();
Malah, untuk situasi ini, perpustakaan kelas Java menyediakan kami kelas WeakHashMap, yang boleh digunakan dengan kelas ini, kuncinya secara semula jadi adalah objek rujukan yang lemah, dan kita tidak perlu membungkus objek asal secara manual. Dengan cara ini, apabila productA menjadi batal (menunjukkan bahawa Produk yang dirujuknya tidak perlu lagi wujud dalam ingatan), objek rujukan lemah weakProductA menunjuk ke objek Produk Jelas sekali, objek Produk yang sepadan adalah lemah pada masa ini. jadi rujukan lemah yang menunjuk kepadanya akan dikosongkan, objek Produk akan dikitar semula serta-merta, dan objek rujukan lemah yang menunjuk kepadanya akan memasuki baris gilir rujukan.

Barisan Rujukan


Mari perkenalkan secara ringkas konsep baris gilir rujukan. Malah, kelas WeakReference mempunyai dua pembina:

Kita dapat melihat bahawa pembina kedua menyediakan parameter jenis ReferenceQueue Dengan menyediakan parameter ini, kita mencipta rujukan yang lemah Objek didaftarkan pada rujukan baris gilir, supaya apabila ia dibersihkan oleh pemungut sampah, ia akan dihantar ke baris gilir rujukan, dan kami boleh menguruskan objek rujukan lemah yang dibersihkan ini secara seragam.
//创建一个指向给定对象的弱引用
WeakReference(T referent) 
//创建一个指向给定对象并且登记到给定引用队列的弱引用
WeakReference(T referent, ReferenceQueue super T> q)

Atas ialah kandungan terperinci Mempelajari dan memahami rujukan lemah Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Kemerdekaan Platform Java: Keserasian dengan OS yang berbezaKemerdekaan Platform Java: Keserasian dengan OS yang berbezaMay 13, 2025 am 12:11 AM

Javaachievesplatformindependencethroughthejavavirtualmachine (JVM), membenarkancodetorunondifferentoperatingsystemswithoutmodification.thejvmcompilesjavacodeintoplatform-bebastbytecode, yang mana-mana

Ciri -ciri apa yang menjadikan Java masih kuatCiri -ciri apa yang menjadikan Java masih kuatMay 13, 2025 am 12:05 AM

Javaispowerfulduetoitsplatformindantrectence, orientednature orientednature, richstandardlibrary, perfanksapabilities, andstrongSecurityfeatures.1) PlatformIndendenceAllowsApplicationStorAnanydeviceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceDeviceViceDeviceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceD

Ciri -ciri Java Teratas: Panduan Komprehensif untuk PemajuCiri -ciri Java Teratas: Panduan Komprehensif untuk PemajuMay 13, 2025 am 12:04 AM

Fungsi Java teratas termasuk: 1) pengaturcaraan berorientasikan objek, menyokong polimorfisme, meningkatkan fleksibiliti kod dan pemeliharaan; 2) mekanisme pengendalian pengecualian, meningkatkan keteguhan kod melalui blok percubaan-catch-finally; 3) pengumpulan sampah, memudahkan pengurusan memori; 4) generik, meningkatkan keselamatan jenis; 5) Ekspresi AMBDA dan pengaturcaraan berfungsi untuk menjadikan kod lebih ringkas dan ekspresif; 6) Perpustakaan standard yang kaya, menyediakan struktur data dan algoritma yang dioptimumkan.

Adakah Java benar -benar platform bebas? Bagaimana 'tulis sekali, jalankan di mana sahaja' berfungsiAdakah Java benar -benar platform bebas? Bagaimana 'tulis sekali, jalankan di mana sahaja' berfungsiMay 13, 2025 am 12:03 AM

Javaisnotentirelyplatformindependentduetojvmvariationsandnativecodeintegration, butitlargelyupholdsitsworapromise.1) javacompil estobytecoderunbythejvm, membolehkanCross-platformexecution.2) Walau bagaimanapun, setiap satuplatformrequiresaspecificjvm, dandifferencesinjvmimpleme

Demystifying the JVM: Kunci anda untuk memahami pelaksanaan JavaDemystifying the JVM: Kunci anda untuk memahami pelaksanaan JavaMay 13, 2025 am 12:02 AM

Thjavavirtualmachine (jvm) isanabstractcomputingmachinecrucialforjavaexecutionasitrunsjavabytecode, enablingthe "writeonce, rayanywhere" kemampuan.TheJvm'skeycomponentlude: 1)

Adakah Java masih merupakan bahasa yang baik berdasarkan ciri -ciri baru?Adakah Java masih merupakan bahasa yang baik berdasarkan ciri -ciri baru?May 12, 2025 am 12:12 AM

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)

Apa yang menjadikan Java hebat? Ciri dan faedah utamaApa yang menjadikan Java hebat? Ciri dan faedah utamaMay 12, 2025 am 12:11 AM

Javaisgreatduetoitsplatformindantrect, robustoopsupport, extensivelibraries, andstrongcommunity.1) platformindependenceviajvmallowscodetorunonvariousplatforms.2)

Ciri -ciri Java 5 Teratas: Contoh dan PenjelasanCiri -ciri Java 5 Teratas: Contoh dan PenjelasanMay 12, 2025 am 12:09 AM

Lima ciri utama Java adalah polimorfisme, ekspresi lambda, streamsapi, generik dan pengendalian pengecualian. 1. Polimorfisme membolehkan objek kelas yang berbeza digunakan sebagai objek kelas asas biasa. 2. Ekspresi Lambda menjadikan kod lebih ringkas, terutama sesuai untuk mengendalikan koleksi dan aliran. 3.StreamsAPI dengan cekap memproses set data yang besar dan menyokong operasi deklaratif. 4. Generik menyediakan jenis keselamatan dan kebolehgunaan semula, dan kesilapan jenis ditangkap semasa penyusunan. 5. Pengendalian Pengecualian membantu mengendalikan kesilapan dengan elegan dan menulis perisian yang boleh dipercayai.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod