Pengumpulan Sampah Masuk ke File di Java

1. Ikhtisar

Pengumpulan sampah adalah keajaiban bahasa pemrograman Java yang menyediakan manajemen memori otomatis. Pengumpulan sampah menyembunyikan detail tentang harus mengalokasikan dan membatalkan alokasi memori secara manual. Meskipun mekanisme ini luar biasa, terkadang tidak berfungsi seperti yang kita inginkan. Dalam tutorial ini, kita akan menjelajahi opsi logging Java untuk statistik pengumpulan sampah dan menemukan cara mengarahkan statistik ini ke file .

2. Bendera GC Logging di Java 8 dan Sebelumnya

Pertama, mari jelajahi flag JVM yang terkait dengan logging GC di versi Java sebelum Java 9.

2.1. -XX: + PrintGC

The XX: + PrintGC bendera adalah alias untuk verbose: gc dan ternyata di dasar logging GC . Dalam mode ini, satu baris dicetak untuk setiap generasi muda dan setiap koleksi generasi penuh. Sekarang mari kita alihkan perhatian kita untuk memberikan informasi GC yang terperinci.

2.2. -XX: + PrintGCDetail

Demikian pula, kami memiliki bendera -XX: + PrintGCDetail yang digunakan untuk mengaktifkan pencatatan GC mendetail alih-alih -XX: + PrintGC .

Perhatikan bahwa output dari -XX: + PrintGCDetailnya berubah bergantung pada algoritme GC yang digunakan.

Selanjutnya, kita akan melihat memberi catatan pada log kita dengan informasi tanggal dan waktu.

2.3. -XX: + PrintGCDateStamps dan -XX: + PrintGCTimeStamps

Kami dapat menambahkan informasi tanggal dan waktu ke log GC kami dengan menggunakan flag -XX: + PrintGCDateStamps dan -XX: + PrintGCTimeStamps .

Pertama, -XX: + PrintGCDateStamps menambahkan tanggal dan waktu entri log ke awal setiap baris.

Kedua, -XX: PrintGCTimeStamps menambahkan stempel waktu ke setiap baris log yang merinci waktu yang telah berlalu (dalam detik) sejak JVM dimulai.

2.4. -Xloggc

Akhirnya, kita sampai pada mengarahkan log GC ke sebuah file . Bendera ini mengambil nama file opsional sebagai argumen menggunakan sintaks -Xloggc: file dan tanpa kehadiran nama file, log GC ditulis sebagai standar.

Selain itu, tanda ini juga menyetel tanda -XX: PrintGC dan -XX: PrintGCTimestamps untuk kita. Mari kita lihat beberapa contoh:

Jika kita ingin menulis log GC ke keluaran standar, kita dapat menjalankan:

java -cp $CLASSPATH -Xloggc mypackage.MainClass

Atau untuk menulis log GC ke file, kami akan menjalankan:

java -cp $CLASSPATH -Xloggc:/tmp/gc.log mypackage.MainClass

3. Bendera GC Logging di Java 9 dan Nanti

Di Java 9+, -XX: PrintGC , alias untuk -verbose: gc , tidak digunakan lagi untuk mendukung opsi pencatatan terpadu, -Xlog . Semua tanda GC lainnya yang disebutkan di atas masih valid di Java 9+. Opsi logging baru ini memungkinkan kita untuk menentukan pesan mana yang harus ditampilkan, mengatur level log, dan mengarahkan keluaran .

Kita dapat menjalankan perintah di bawah ini untuk melihat semua opsi yang tersedia untuk level log, dekorator log, dan set tag:

java -Xlog:logging=debug -version 

Misalnya, jika kami ingin mencatat semua pesan GC ke sebuah file, kami akan menjalankan:

java -cp $CLASSPATH -Xlog:gc*=debug:file=/tmp/gc.log mypackage.MainClass

Selain itu, tanda logging terpadu baru ini dapat diulang, sehingga Anda dapat, misalnya, membuat log semua pesan GC ke standar dan file :

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 keluaran pengumpulan sampah di Java 8 dan Java 9+ termasuk cara mengarahkan keluaran tersebut ke file.