Java Flight Recorder adalah Java Virtual Machine (JVM) profiler yang mengumpulkan metrik kinerja tanpa memberikan beban signifikan pada sumber daya. Profiler ini dirancang untuk tetap berjalan secara terus-menerus — bahkan pada sistem produksi — sehingga riwayat peristiwa yang dapat diperiksa akan ada meskipun virtual machine mengalami crash.
Java Mission Control
Java Flight Recorder dan alat pendampingnya, Java Mission Control, awalnya dikembangkan oleh Appeal Virtual Machines (AVM), sebuah perusahaan perangkat lunak asal Swedia. AVM juga mengembangkan JRockit, sebuah VM yang mengkhususkan diri dalam kinerja runtime dan optimasi bytecode. AVM diakuisisi oleh BEA Systems pada tahun 2002 dan kemudian oleh Oracle pada tahun 2008.
Versi berlisensi komersial dari Java Flight Recorder diintegrasikan ke dalam HotSpot JVM milik Oracle pada tahun 2013 sebagai bagian dari rilis Java 7 yang diperbarui. Penggunaan Java Mission Control dan Java Flight Recorder secara tidak berlisensi di lingkungan produksi tidak memungkinkan hingga Oracle merilis alat-alat ini ke komunitas sumber terbuka pada tahun 2018. JDK 11 adalah rilis dukungan jangka panjang pertama yang mencakup versi sumber terbuka dari alat-alat ini.
Java Flight Recorder dan optimasi JVM
Tujuan awal dari Java Mission Control dan Java Flight Recorder adalah untuk membantu mengembangkan dan mengoptimalkan JVM JRockit. Seorang pengembang dapat menggunakan metrik yang dikumpulkan untuk lebih memahami hal-hal berikut:
- bagaimana JVM berperilaku saat runtime;
- bagaimana JVM mengalokasikan sumber daya di bawah berbagai beban;
- di mana bottleneck terjadi saat bytecode diproses; dan
- bagaimana dan kapan kompilasi just-in-time dilakukan.
Meskipun tujuan awal Java Flight Recorder adalah untuk memberikan wawasan tentang bagaimana JVM yang mendasari beroperasi, cepat terlihat bahwa metrik-metrix ini juga sangat berharga bagi pengembang perangkat lunak yang tertarik untuk memeriksa kinerja aplikasi.

Optimasi Java Flight Recorder
Salah satu kelemahan dari banyak alat profiling aplikasi adalah mereka dapat mengurangi kinerja runtime. Java Flight Recorder dirancang untuk mengurangi masalah ini. Seorang pengembang dapat membiarkannya berjalan terus-menerus di latar belakang, bahkan pada sistem produksi.
Salah satu cara untuk mengurangi beban runtime adalah dengan beroperasi secara internal di dalam JVM. Sebagian besar alat profiling JDK mengharuskan pengembang untuk menginstal komponen tambahan pada JVM, yang kemudian melaporkan metrik ke alat pengumpulan data eksternal. “Keterbukaan” antara JVM dan alat pemantauan eksternal ini dapat mempengaruhi kinerja.
Java Flight Recorder lebih lanjut meminimalkan dampaknya terhadap kinerja dengan memanfaatkan data yang sudah dipelihara oleh JVM, bukannya mengimplementasikan mekanisme baru untuk melacak kinerja.
Sebagai contoh, setiap JVM melacak penggunaan memori, thread aktif, ukuran heap, dan rutinitas garbage collection sebagai bagian dari runtime normalnya. Java Flight Recorder memanfaatkan metrik yang sudah dihitung ini dan mencatatnya.
Instrumentasi vs. sampling
Java Flight Recorder juga mengurangi beban runtime-nya dengan melakukan sampling data sepanjang siklus hidup aplikasi. Ini tidak menangkap setiap kejadian pemblokiran thread atau pembuatan objek. Sebaliknya, Java Flight Recorder secara acak merekam metrik pada interval yang tidak teratur.
Meskipun mungkin kehilangan peristiwa individual, Java Flight Recorder akan mengambil cukup informasi seiring waktu untuk menggambarkan gambaran yang akurat tentang bagaimana JVM berperilaku.
Dalam hal pemecahan masalah, perilaku aplikasi seiring waktu biasanya lebih bermakna daripada peristiwa individual. Yang lebih penting, sampling jauh lebih efisien daripada instrumentasi tingkat rendah. Konfigurasi default Java Flight Recorder memiliki dampak kinerja kurang dari 1% pada sumber daya sistem, sementara profiling yang lebih mendalam tidak akan melebihi 2%.
Metrik Java Flight Recorder
Seorang pengembang dapat menggunakan sebagian atau seluruh metrik Java Flight Recorder berikut untuk memantau aplikasi dan memecahkan masalah:
- Aktivitas thread
- Alokasi objek
- Kunci instansi
- I/O file dan soket
- Jumlah pengecualian
- Waktu koleksi sampah
- Cache kode dan kompilasi
- Alokasi TLAB
- Penataan heap G1
- Operasi VM
- Konsumsi memori
- Jumlah objek hidup
Profiling Aplikasi Berkelanjutan
Java Flight Recorder bertindak mirip dengan kotak hitam pesawat terbang. Alat ini dirancang untuk selalu aktif dan mencatat peristiwa yang mengarah ke suatu kejadian.
Sebagai contoh, dengan profiling berkelanjutan diaktifkan, ketika JVM mengalami crash, Java Flight Recorder akan menulis semua data yang dimilikinya ke sistem berkas lokal. Fitur ini memungkinkan pengembang dan tim DevOps untuk memeriksa berbagai pola eksekusi sebelum kegagalan terjadi.
Bagaimana Memulai Java Flight Recorder
Selain mode perekaman berkelanjutan, seorang pengembang juga dapat secara eksplisit memulai Java Flight Recorder, menjalankannya untuk waktu yang telah ditentukan, dan kemudian memeriksa rekaman tersebut.
Seorang pengembang juga dapat mengaktifkan pemicu dalam Java Mission Control. Sebagai contoh, sebuah MBean yang memantau penggunaan CPU atau konsumsi memori dapat memicu Java Flight Recorder untuk mulai jika pemakaian melebihi ambang batas 80%.
Rilis Java 14 memperkenalkan kemampuan untuk melakukan streaming metrik Java Flight Recorder untuk profiling secara real-time. Selain itu, JDK dapat menjalankan beberapa aktivitas Java Flight Recorder secara bersamaan, yang memungkinkan pengembang menjalankan berbagai opsi perekaman secara bersamaan.
Java Flight Recorder dan Java Mission Control
Java Flight Recorder menyimpan datanya dalam format biner. Analisis data memerlukan alat tambahan untuk mem-parsing informasi tersebut. Java Mission Control adalah alat visualisasi data yang paling umum digunakan bersama dengan Java Flight Recorder, meskipun alat lain seperti VisualVM juga dapat membaca file Java Flight Recorder.
Selain itu, karena Java Mission Control sekarang sumber terbuka, alat ini tersedia dari berbagai vendor JDK, seperti:
- Azul
- Oracle
- Red Hat
- AdoptOpenJDK
- Eclipse Adoptium

Java Flight Recorder API
Java Flight Recorder API memungkinkan untuk mem-parsing, memproses, dan menginterpretasikan file data dengan cara yang sangat disesuaikan. Sebagai hasilnya, memungkinkan analisis rekaman tanpa antarmuka grafis.
Alat yang menggunakan API JFR untuk membuat grafik nyala api dan histogram metode adalah dua contoh alat analisis kinerja yang memperluas kemampuan Java Flight Recorder dan Java Mission Control.