Artikel ini terutama mempelajari pemahaman log GC di mesin virtual Java, sebagai berikut.
Memahami Log GC adalah keterampilan dasar dalam menangani masalah memori mesin virtual Java.
Dengan menambahkan parameter ke jenis perintah Java, tentukan tipe GC yang sesuai, cetak informasi log GC dan output ke file dan kebijakan lainnya.
Kelas Publik ReferenceCountINGC {Public Object Instance = NULL; private static final int one_mb = 1024 * 1024; byte private [] BigSize = byte baru [2 * One_MB]; public static void main (string [] args) {testgc ();} public static void testgc () {referenceCount ();} public static void testgc () {ReferenceCount (); ReferenceCountinggc (); ReferenceCountinggc Objb = ReferenceCountinggc baru (); obja.instance = objb; objb.instance = obja; obja = null; objb = null; system.gc ();}}Javac ReferenceCountINGC.java
java -xx:+printgcdatestamps -xx:+printgcdetails referenceCountinggc
Daftar parameter yang sesuai
-Xx:+printgc output gc log
-Xx:+printgcdetails output log terperinci dari GC
-Xx:+printgcTimestamps Output Timestamps GC (dalam bentuk waktu referensi)
-Xx:+printgcdatestamps output timestamp GC (dalam bentuk tanggal, seperti 2013-05-04T21: 53: 59.234+0800)
-Xx:+printheapatgc Cetak informasi heap sebelum dan sesudah GC
-Xloggc: ../ log/gc.log jalur output file log
Hasil hasil:
2016-03-20t14: 34: 55.118-0800: [GC [Psyounggen: 6123k-> 400k (38912k)] 6123k-> 400k (125952K), 0,0012070 detik] [Waktu: Pengguna = 0,00 sys = 0,00, 0,00, 0,0012070 SECS] [Waktu: Pengguna = 0,00 SYS = 0,00, 0,00, 0,00,]
2016-03-20t14: 34: 55.119-0800: [GC penuh [Psyounggen: 400k-> 0k (38912k)] [Paroldgen: 0k-> 282k (87040k)] 400k-> 282k (125952K) [pspermgen: 262k-> 282k (125952k) [pspermgen: 262k-> 282k (125952K) [pspermgen. SECS] [kali: pengguna = 0,01 sys = 0,00, nyata = 0,01 detik]
Tumpukan
PSYOUNGGEN Total 38912K, Digunakan 1013K [0x00000007D55000000, 0x00000007D80000000, 0x000000008000000000)
Eden Space 33792K, 3% Digunakan [0x00000007D5500000, 0x00000007D55FD7D0, 0x00000007D76000000)
Dari Space 5120k, 0% Digunakan [0x00000007D7600000, 0x00000007D7600000, 0x00000007D7B000000)
ke Space 5120k, 0% Digunakan [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen Total 87040K, Digunakan 282K [0x0000000780000000, 0x00000007855000000, 0x00000007D55000000)
Object Space 87040K, 0% Digunakan [0x0000000780000000, 0x0000000780046BF8, 0x00000007855000000)
PSPERMGEN Total 21504K, Digunakan 2628K [0x0000000077AE000000, 0x000000077C3000000, 0x00000007800000000)
Ruang Objek 21504K, 12% Digunakan [0x000000077AE000000.0X00000077B091380.0X00000077C3000000)
Psyounggen berarti generasi baru, dan nama ini ditentukan oleh kolektor, yang merupakan pemulung paralel. Paroldgen, pspermgen secara permanen
Anda dapat melihat bahwa ada dua jenis GC: GC dan GC penuh. Ada pernyataan lengkap yang berhenti di dunia saat ini.
Klan GC (Minor GC): mengacu pada aksi pengumpulan sampah yang terjadi di klan. Karena sebagian besar benda Java memiliki karakteristik hidup dan mati, GC kecil sangat sering dan umumnya kecepatan daur ulang sangat cepat.
GC yang lebih tua (Mayor GC/Full GC): mengacu pada GC yang terjadi di usia tua. Mayor GC muncul, yang sering disertai dengan GC kecil setidaknya sekali. Kecepatan GC utama umumnya lebih dari 10 kali lebih lambat dari GC kecil.
[GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 detik] [kali: Pengguna = 0,00 sys = 0,00, nyata = 0,00 detik]]
6123K-> 400K (38912K) di dalam braket persegi di atas menunjukkan bahwa area memori telah menggunakan kapasitas sebelum GC -> GC setelah GC, dan 38912K di dalam braket bundar di belakang adalah kapasitas total dari area memori.
6123K-> 400K (125952K) di luar kurung persegi berarti bahwa tumpukan Java telah menggunakan kapasitas sebelum GC -> tumpukan Java telah menggunakan kapasitas setelah GC, dan 125952K di dalam kurung bundar di belakang adalah kapasitas total dari tumpukan Java.
[Waktu: pengguna = 0,00 sys = 0,00, nyata = 0,00 detik] masing -masing mewakili waktu CPU yang dikonsumsi oleh pengguna, waktu CPU yang dikonsumsi oleh keadaan kernel, dan waktu jam dinding berlalu dari awal hingga akhir operasi. Perbedaan antara waktu CPU dan waktu jam dinding adalah bahwa waktu jam dinding mencakup berbagai waktu tunggu non-operasi, seperti menunggu disk I/O dan menunggu pemblokiran benang, sedangkan waktu CPU tidak termasuk waktu ini.
Anda dapat menggunakan beberapa alat offline untuk menganalisis log GC, seperti Sun's Gchisto (https://java.net/projects/gchisto) dan gcviewer (https://github.com/chewiebug/gcviewer). Ini semua adalah alat open source. Pengguna dapat langsung mengunduh kode sumber mereka melalui alat kontrol versi untuk analisis offline.
Di atas adalah semua tentang analisis log GC Java Virtual Machine, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!