1. Gambaran keseluruhan
Pengumpulan sampah adalah keajaiban bahasa pengaturcaraan Java yang menyediakan kami dengan pengurusan memori automatik. Pengumpulan sampah menyembunyikan perincian untuk mengagihkan dan mengalihkan memori secara manual. Walaupun mekanisme ini hebat, kadangkala tidak berfungsi seperti yang kita mahukan. Dalam tutorial ini, kita akan meneroka pilihan pembalakan Java untuk statistik pengumpulan sampah dan mengetahui cara mengarahkan statistik ini ke fail .
2. Bendera Pembalakan GC di Java 8 dan Sebelumnya
Pertama, mari kita meneroka bendera JVM yang berkaitan dengan log masuk GC dalam versi Java sebelum Java 9.
2.1. -XX: + PrintGC
The -XX: + PrintGC bendera adalah alias untuk -verbose: gc dan menghidupkan pembalakan GC asas . Dalam mod ini, satu baris dicetak untuk setiap koleksi generasi muda dan setiap generasi penuh. Sekarang mari kita beri perhatian untuk memberikan maklumat GC terperinci.
2.2. -XX: + PrintGCDetail
Begitu juga, kita mempunyai bendera -XX: + PrintGCDetails digunakan untuk mengaktifkan terperinci GC pembalakan bukannya -XX: + PrintGC .
Perhatikan bahawa output dari -XX: + PrintGCDetail berubah bergantung pada algoritma GC yang digunakan.
Seterusnya, kita akan melihat catatan log dengan maklumat tarikh dan masa.
2.3. -XX: + PrintGCDateStamps dan -XX: + PrintGCTimeStamps
Kami dapat menambahkan tarikh dan maklumat masa ke log GC kami dengan menggunakan bendera -XX: + PrintGCDateStamps dan -XX: + PrintGCTimeStamps , masing-masing.
Pertama, -XX: + PrintGCDateStamps menambah tarikh dan masa entri log ke permulaan setiap baris.
Kedua, -XX: PrintGCTimeStamps menambah cap waktu ke setiap baris log yang memperincikan masa yang berlalu (dalam beberapa saat) sejak JVM dimulakan.
2.4. -Xloggc
Akhirnya, kami mengalihkan log GC ke fail . Bendera ini mengambil nama fail pilihan sebagai argumen menggunakan fail sintaks -Xloggc: dan tanpa kehadiran nama fail log GC ditulis untuk standard keluar.
Selain itu, bendera ini juga menetapkan bendera -XX: PrintGC dan -XX: PrintGCTimestamps untuk kami. Mari lihat beberapa contoh:
Sekiranya kita ingin menulis log GC ke output standard, kita boleh menjalankan:
java -cp $CLASSPATH -Xloggc mypackage.MainClass
Atau untuk menulis log GC ke fail, kami akan menjalankan:
java -cp $CLASSPATH -Xloggc:/tmp/gc.log mypackage.MainClass
3. Bendera Pembalakan GC di Java 9 dan Kemudian
Di Java 9+, -XX: PrintGC , alias untuk -verbose: gc , telah digunakan untuk memilih pilihan pembalakan bersatu, -Xlog . Semua bendera GC lain yang disebutkan di atas masih berlaku di Java 9+. Pilihan pembalakan baru ini membolehkan kita menentukan mesej mana yang harus ditunjukkan, menetapkan tahap log, dan mengarahkan output .
Kita boleh menjalankan perintah di bawah ini untuk melihat semua pilihan yang tersedia untuk tahap log, penghias log, dan set teg:
java -Xlog:logging=debug -version
Sebagai contoh, jika kita mahu log semua mesej GC ke fail, kita akan menjalankan:
java -cp $CLASSPATH -Xlog:gc*=debug:file=/tmp/gc.log mypackage.MainClass
Selain itu, bendera penyatuan log baru ini dapat diulang, jadi anda boleh, misalnya, log semua mesej GC ke standard keluar dan fail :
java -cp $CLASSPATH -Xlog:gc*=debug:stdout -Xlog:gc*=debug:file=/tmp/gc.log mypackage.MainClass
4. Kesimpulan
Dalam artikel ini, kami telah menunjukkan cara mencatat output pengumpulan sampah di Java 8 dan Java 9+ termasuk cara mengalihkan output ke fail.