Mekanisme pengumpulan sampah Java secara automatik menguruskan memori, mengenal pasti dan membebaskan objek yang tidak lagi digunakan untuk mengelakkan kebocoran ingatan. 1. Gunakan analisis kebolehcapaian untuk menentukan sama ada objek itu adalah sampah; 2. Pengitar semula umum termasuk Serial GC, selari GC, CMS, G1, ZGC dan Shenandoah; 3. Pemaju dapat mengoptimumkan prestasi GC dengan menetapkan saiz timbunan yang munasabah, mengelakkan kebocoran memori, mengoptimumkan kitaran hayat objek, memantau tingkah laku GC, dll.
Koleksi Sampah Java (GC) adalah mekanisme pengurusan memori automatik Java Virtual Machines (JVMS). Fungsi utamanya adalah untuk mengenal pasti dan membebaskan ruang ingatan yang diduduki oleh objek yang tidak lagi digunakan oleh program ini, dengan itu mengelakkan kebocoran memori dan kesilapan yang disebabkan oleh pengurusan memori manual.

Prinsip asas kitar semula sampah
Objek di Java dicipta pada timbunan. Apabila objek tidak lagi ditunjuk oleh pembolehubah rujukan, ia menjadi "sampah" dan boleh dikitar semula. JVM akan menjalankan pemungut sampah secara berkala untuk membersihkan objek -objek yang tidak berguna ini dan membebaskan sumber memori.
Terdapat dua cara biasa untuk menentukan sama ada objek itu adalah sampah:

- Kaedah Pengiraan Rujukan : Mengekalkan kaunter untuk setiap objek, tambahkan satu apabila rujukan menunjuk kepadanya, dan pengurangan satu apabila rujukan gagal. Objek dengan kiraan sifar adalah sampah.
- Analisis kebolehcapaian : Bermula dari satu set nod akar (seperti pembolehubah tempatan, pembolehubah statik, dan lain -lain dalam timbunan thread), beralih melalui semua rantaian rujukan. Objek yang tidak dicapai dianggap tidak dapat dicapai, iaitu sampah.
Walaupun konsep penghitungan rujukan adalah mudah, Java sebenarnya menggunakan analisis kebolehcapaian kerana ia tidak dapat menyelesaikan masalah rujukan bulat.
Jenis pengumpul sampah
JVM menyediakan pelbagai pengumpul sampah yang sesuai untuk senario dan keperluan prestasi yang berbeza:

- Serial GC : Recycler Single-threaded, sesuai untuk aplikasi kecil atau mod klien.
- GC selari : Multi-threaded Recycler, memberi tumpuan kepada throughput, sesuai untuk perkhidmatan latar belakang atau tugas batch.
- CMS (Sweep Mark Serentak) : Bertujuan pada masa jeda terpendek, sesuai untuk aplikasi yang sensitif terhadap masa tindak balas.
- G1 (Sampah Pertama) : Pengitar semula arus perdana moden yang membahagikan timbunan ke dalam pelbagai wilayah (wilayah), mengutamakan kitar semula kawasan dengan sampah yang paling banyak, dengan mengambil kira throughput dan latency.
- ZGC dan Shenandoah : Generasi baru kitar semula rendah latency yang sesuai untuk mengendalikan memori tumpukan super besar.
Anda boleh memilih pemungut sampah yang sesuai berdasarkan keperluan prestasi dan saiz timbunan aplikasi anda.
Cara mempengaruhi prestasi koleksi sampah
Walaupun pengumpulan sampah dilakukan secara automatik, pemaju masih dapat mengoptimumkan prestasi GC dalam beberapa cara:
- Sediakan saiz timbunan : Tetapkan memori timbunan awal dan maksimum melalui
-Xms
dan-Xmx
untuk mengelakkan pengembangan yang kerap atau memori yang tidak mencukupi. - Elakkan kebocoran ingatan : seperti menutup sumber dalam masa dan mengelakkan rujukan kitaran jangka hayat yang tidak bermakna.
- Pilih objek yang betul. Kitaran Hidup : Objek pendek harus dikitar semula dalam generasi baru sebanyak mungkin untuk mengurangkan kebarangkalian memasuki usia tua.
- Memantau tingkah laku GC : Gunakan alat seperti
jstat
,VisualVM
atau alat analisis log untuk melihat kekerapan GC, penggunaan masa dan petunjuk lain.
Sekiranya anda mendapati bahawa program ini sering mempunyai GC penuh atau mempunyai jeda yang lama, anda mungkin perlu menyesuaikan parameter atau menyemak logik kod.
Petua: Beberapa butiran yang mudah diabaikan
- Walaupun
System.gc()
dipanggil, JVM tidak semestinya melakukan pengumpulan sampah dengan segera, ia hanya membuat permintaan. - Menggunakan kaedah
finalize()
akan menjejaskan prestasi GC, kerana JVM perlu memproses objek ini tambahan, jadi tidak disyorkan untuk bergantung padanya untuk pembersihan sumber. - Dalam JVM moden, kebanyakan objek kitaran hayat pendek diperuntukkan di kawasan Eden . Selepas beberapa kali, objek yang masih bertahan dalam GC kecil akan dipindahkan ke kawasan yang selamat dan akhirnya memasuki usia tua .
Pada dasarnya itu sahaja. Walaupun pengumpulan sampah selesai secara automatik, memahami mekanisme kerja dan faktor -faktor yang mempengaruhi akan membantu menulis program Java yang lebih cekap dan stabil.
Atas ialah kandungan terperinci Apakah koleksi sampah di java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

SetupaMaven/gradleprojectwithjax-rsdependencyiSejersey; 2.createarescresourceUsingAnnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationsubclassorweb.xml;

Maven adalah alat standard untuk pengurusan dan pembinaan projek Java. Jawapannya terletak pada hakikat bahawa ia menggunakan pom.xml untuk menyeragamkan struktur projek, pengurusan pergantungan, automasi kitaran hayat pembinaan dan sambungan pemalam; 1. Gunakan pom.xml untuk menentukan kumpulan, artifactid, versi dan kebergantungan; 2. Perintah teras utama seperti mvnclean, penyusun, ujian, pakej, memasang dan menggunakan; 3. Gunakan DependencyManagement dan Pengecualian untuk Menguruskan Versi Ketergantungan dan Konflik; 4. Mengatur aplikasi besar melalui struktur projek multi-modul dan diuruskan secara seragam oleh POM induk; 5.

Untuk menjana nilai hash menggunakan Java, ia boleh dilaksanakan melalui kelas MessageDigest. 1. Dapatkan contoh algoritma yang ditentukan, seperti MD5 atau SHA-256; 2. Panggil kaedah .Update () untuk lulus dalam data untuk disulitkan; 3. Panggil kaedah .digest () untuk mendapatkan pelbagai hash byte; 4. Tukar array byte ke dalam rentetan heksadesimal untuk membaca; Untuk input seperti fail besar, baca dalam ketulan dan panggilan .Update () beberapa kali; Adalah disyorkan untuk menggunakan SHA-256 dan bukannya MD5 atau SHA-1 untuk memastikan keselamatan.

Pertama, gunakan JavaScript untuk mendapatkan pilihan sistem pengguna dan tetapan tema yang disimpan di dalam negara, dan memulakan tema halaman; 1. Struktur HTML mengandungi butang untuk mencetuskan Topik Switching; 2. CSS menggunakan: Root untuk menentukan pembolehubah tema yang cerah, kelas mod-mode mentakrifkan pembolehubah tema gelap, dan menggunakan pembolehubah ini melalui VAR (); 3. JavaScript mengesan lebih suka skema-skema dan membaca LocalStorage untuk menentukan tema awal; 4. Tukar kelas mod gelap pada elemen HTML apabila mengklik butang, dan menjimatkan keadaan semasa ke LocalStorage; 5. Semua perubahan warna disertakan dengan animasi peralihan 0.3 saat untuk meningkatkan pengguna

Ya, menu drop-down CSS biasa boleh dilaksanakan melalui HTML dan CSS tulen tanpa JavaScript. 1. Gunakan UL dan Li bersarang untuk membina struktur menu; 2. Gunakan: Hover pseudo-Class untuk mengawal paparan dan menyembunyikan kandungan tarik-turun; 3. Tetapkan Kedudukan: Relatif untuk Ibu Bapa Li, dan submenu diletakkan menggunakan kedudukan: mutlak; 4. Submenu mungkir untuk memaparkan: Tiada, yang menjadi paparan: blok apabila melayang; 5. Multi-level pull-down boleh dicapai melalui bersarang, digabungkan dengan peralihan, dan menambah animasi pudar, dan disesuaikan dengan terminal mudah alih dengan pertanyaan media. Penyelesaian keseluruhannya mudah dan tidak memerlukan sokongan JavaScript, yang sesuai untuk besar

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

Gunakan DateTime.StrpTime () untuk menukar rentetan tarikh ke dalam objek DateTime. 1. Penggunaan Asas: Parse "2023-10-05" sebagai objek DateTime melalui "%y-%m-%d"; 2. Menyokong pelbagai format seperti "%m/%d/%y" untuk menghuraikan tarikh Amerika, "%d/%m/%y" untuk menghuraikan tarikh British, "%b%d,%y%i:%m%p" untuk menghuraikan masa dengan am/pm; 3. Gunakan dateUtil.parser.parse () untuk secara automatik menyimpulkan format yang tidak diketahui; 4. Gunakan .D

Gunakan modul UUID untuk mendapatkan alamat MAC kad rangkaian pertama mesin di seluruh platform, tanpa memerlukan perpustakaan pihak ketiga, dan menukarnya menjadi format standard melalui uuid.getNode (); 2. Gunakan subprocess untuk memanggil arahan sistem seperti ipconfig atau ifconfig, dan menggabungkannya dengan pengekstrakan tetap semua alamat kad rangkaian MAC, yang sesuai untuk senario di mana banyak maklumat kad rangkaian perlu diperoleh; 3. Gunakan perpustakaan pihak ketiga getMac, hubungi get_mac_address () selepas pemasangan untuk mendapatkan MAC, yang menyokong pertanyaan melalui antara muka atau IP, tetapi memerlukan ketergantungan tambahan; Ringkasnya, jika tiada perpustakaan luaran diperlukan, kaedah UUID disyorkan. Jika anda perlu fleksibel mendapatkan maklumat kad pelbagai rangkaian, anda boleh menggunakan penyelesaian subprocess untuk membolehkan anda memasang getma ketergantungan.
