Pengumpulan Sampah Masuk ke Fail di Java

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.