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

Apakah pengumpul sampah biasa untuk pengoptimuman prestasi java?

王林
Lepaskan: 2023-04-20 11:40:12
ke hadapan
1219 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

Generasi lama:

-XX:+UseParallelOldGC
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan