Rumah  >  Artikel  >  Java  >  Apakah pengumpul sampah biasa untuk pengoptimuman prestasi java?

Apakah pengumpul sampah biasa untuk pengoptimuman prestasi java?

王林
王林ke hadapan
2023-04-20 11:40:121136semak imbas

Pengumpul sampah dan algoritma biasa

Saya percaya anda boleh belajar banyak tentang pengumpul sampah melalui dua artikel lain yang saya sediakan. Pengumpul sampah yang benar-benar perlu kita perhatikan dan mungkin juga boleh digunakan adalah empat jenis berikut:

pengumpul sampah bersiri bersiri

Jika ia berada dalam mesin maya taip client atau dalam 单核 Pengumpul sampah ini akan menjadi pemungut sampah lalai pada pelayan. Sama ada GC Kecil atau GC Penuh, semua urutan permohonan akan digantung. Serial Old digunakan dalam generasi lama, yang juga merupakan versi generasi lama satu benang.

Mesin maya jenis pelanggan, kami telah menyatakan sebelum ini bahawa jenis kompilasi dibahagikan kepada klien dan pelayan JVM akan menyusun kod ke dalam kod bait yang diiktiraf oleh JVM melalui pengkompil klien (benang tunggal).

boleh diwakili oleh bendera berikut:

    -XX:+UseSerialGC

Pengumpul sampah berbilang benang selari

Pada mesin maya jenis pelayan atau berbilang -pelayan berulir, Jenis pengumpul sampah yang digunakan oleh jdk8 secara lalai.

Kedua-dua GC Minor dan GC Penuh menggunakan pelbagai benang untuk mengumpul sampah Kedua-dua jenis GC akan menyebabkan urutan aplikasi dijeda. Tetapi ia mempunyai lebih pemprosesan dan merupakan pemungut sampah yang paling sesuai apabila tiada keperluan yang berlebihan pada masa tindak balas.

Anda boleh menyemak statusnya melalui bendera berikut:

Generasi muda:

-XX:+UseParallelGC

Generasi lama:

-XX:+UseParallelOldGC

Pengumpul CMS

pada asalnya direka untuk mengurangkan ketinggalan sistem jangka panjang yang disebabkan oleh pengumpul bersiri dan selari semasa kitar semula.

Ia juga akan menangguhkan semua utas aplikasi apabila Minor GC berlaku Bezanya generasi muda tidak menggunakan selari atau bersiri, tetapi menggunakan pengumpul generasi muda yang disesuaikan khas dengan CMSParNew.

boleh dilihat melalui bendera berikut:

-XX:+UseParNewGC

CMS tidak lagi akan menggantung semua urutan aplikasi apabila GC Penuh berlaku, menggunakan berbilang benang dan urutan aplikasi Jalankan serentak untuk membersihkan objek yang tidak lagi digunakan. Ini sangat mengurangkan masa jeda pemungut sampah CMS. Amat jelas berbanding pengumpul Parelel.

Kelemahan:

  • CMS perlu menduduki lebih banyak sumber CPU untuk memastikan bahawa apabila utas aplikasi berjalan, utas gc terus mengimbas timbunan angkasa lepas.

  • tidak akan memampatkan dan menyusun memori, mengakibatkan pemecahan memori.

Jika sumber CPU tidak mencukupi, atau pemecahan memori mencapai had, ia akan merosot menjadi serial pengumpul.

boleh dilihat melalui bendera berikut:

-XX:+UseConcMarkSweepGC

Pengumpul G1

juga boleh dipanggil 垃圾优先收集器 (sampah dahulu).

Direka untuk meminimumkan lag yang berlaku apabila memproses timbunan yang sangat besar (4gb). G1 masih pengumpul generasi, tetapi perbezaannya ialah ia 逻辑分代. G1 membahagikan ruang timbunan kepada beberapa wilayah (Kawasan pengumpulan sampah dalam generasi baharu masih menggunakan kaedah menjeda semua utas aplikasi untuk menyalin objek yang masih hidup ke generasi lama atau ruang Survivor. Generasi lama juga dibahagikan kepada banyak kawasan, dan pengumpul G1 menyelesaikan kerja pembersihan dengan menyalin objek dari satu kawasan ke kawasan lain. Ini menyelesaikan masalah pemecahan memori dalam CMS.

Sama seperti CMS, G1 juga merupakan pengumpul serentak Apabila GC Penuh berlaku pada generasi lama, utas latar belakang menyelesaikan kerja kitar semula tanpa menjeda utas aplikasi.

Lihat melalui tanda berikut:

-XX:+UseG1GC

Malah, kandungan di atas adalah penerangan ringkas Untuk butiran pelaksanaan sebenar, sila lihat artikel yang disediakan di permulaan.

Kutipan sampah eksplisit

Kutipan sampah eksplisit yang disebut di sini sebenarnya merujuk kepada kutipan sampah yang dicetuskan secara manual, seperti yang ditunjukkan di bawah:

System.gc;

Ini ialah satu cara untuk mengawal dan memaksa JVM mempunyai GC paksa. Tidak digalakkan menggunakan kaedah ini untuk kutipan sampah pada bila-bila masa.

Apabila anda menggunakan spesifikasi ini, tidak kira apa jenis pemungut sampah, walaupun CMS atau G1, GC Penuh akan berlaku dan semua utas aplikasi akan dihentikan pada masa yang sama, yang akan menyebabkan ketinggalan untuk tempoh yang lama masa.

Pengecualian:

  • Analisis prestasi, ujian

  • Analisis timbunan

Dalam situasi di atas, memanggil System.gc akan membantu kami menganalisis masalah aplikasi semasa dengan lebih baik.

Atas ialah kandungan terperinci Apakah pengumpul sampah biasa untuk pengoptimuman prestasi java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam