Saya telah mengkonfigurasi java untuk membuang informasi pengumpulan sampah ke dalam log ( GC verbose ). Saya tidak yakin apa arti entri pengumpulan sampah di log. Contoh entri ini diposting di bawah ini. Saya telah mencari-cari di Google dan belum menemukan penjelasan yang solid.
Saya memiliki beberapa tebakan yang masuk akal, tetapi saya sedang mencari jawaban yang memberikan definisi yang ketat tentang arti angka-angka dalam entri, didukung oleh sumber yang dapat dipercaya. +1 otomatis untuk semua jawaban yang mengutip dokumentasi matahari. Pertanyaan saya adalah:
- Apa yang dimaksud dengan PSYoungGen? Saya berasumsi itu ada hubungannya dengan generasi sebelumnya (lebih muda?), Tapi apa sebenarnya?
- Apa perbedaan antara triplet angka kedua dan yang pertama?
- Mengapa nama (PSYoungGen) ditentukan untuk triplet pertama angka tetapi tidak yang kedua?
- Apa arti setiap angka (ukuran memori) dalam triplet. Misalnya di 109884K-> 14201K (139904K), adalah memori sebelum GC 109884k dan kemudian dikurangi menjadi 14201K. Bagaimana angka ketiga relevan? Mengapa kita membutuhkan rangkaian angka kedua?
8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0,0454530 dtk]
8112.111: [GC [PSYoungGen: 126649K-> 15528K (142336K)] 707780K-> 605892K (1121472K), 0,0934560 dtk]
8112.802: [GC [PSYoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895K (1097728K), 0,0682690 dtk]
sumber
Jawaban:
Sebagian besar dijelaskan dalam Panduan Tuning GC (yang sebaiknya Anda baca juga).
Saya tidak yakin mengapa ada PSYoungGen di dalam diri Anda; apakah Anda mengganti pemulung?
sumber
Contoh GC penuh terkait juga menunjukkan kolektor yang digunakan untuk generasi lama dan permanen:
Terakhir, uraikan satu baris keluaran log contoh Anda:
sumber
Saya hanya ingin menyebutkan bahwa seseorang bisa mendapatkan log GC mendetail dengan
parameter. Kemudian Anda melihat output PSYoungGen atau PSPermGen seperti pada jawaban.
Juga
-Xloggc:gc.log
tampaknya menghasilkan keluaran yang sama seperti-verbose:gc
tetapi Anda dapat menentukan file keluaran di pertama.Contoh penggunaan:
Untuk memvisualisasikan data dengan lebih baik, Anda dapat mencoba gcviewer (versi yang lebih baru dapat ditemukan di github ).
Berhati-hatilah untuk menulis parameter dengan benar, saya lupa "+" dan JBoss saya tidak dapat dijalankan, tanpa pesan kesalahan!
sumber
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution