0Pricing
Java Academy · Pelajaran

Kompilasi JIT dan Kompilasi Bertingkat

Pelajari cara JVM menginterpretasikan lalu mengompilasi metode yang sering digunakan dengan JIT, serta cara memicu dan mengamati kompilasi.

Kompilasi JIT dan Kompilasi Bertingkat adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Penerjemah vs JIT

JVM awalnya menafsirkan kode bita. Ketika suatu metode sering dipanggil ("panas"), kompilator JIT mengompilasinya menjadi kode mesin asli agar eksekusinya jauh lebih cepat.

Kompilasi Bertingkat (Bawaan Sejak Java 8)

Kompilasi bertingkat menggunakan lima tingkat: T0 (penerjemah), T1 (C1 sederhana), T2 (C1 dengan pembuatan profil terbatas), T3 (C1 dengan pembuatan profil penuh), T4 (C2 yang dioptimalkan sepenuhnya). Metode naik tingkat seiring semakin sering digunakan.

// Enable/disable tiered compilation:
// -XX:+TieredCompilation   (default ON in Java 8+)
// -XX:-TieredCompilation   (disables — only C2 used)

Kompilator C1 (Kompilator Klien)

C1 mengompilasi dengan cepat menggunakan optimisasi sedang. C1 menambahkan instrumentasi pembuatan profil untuk mengukur frekuensi pemanggilan dan hasil percabangan bagi C2.

Kompilator C2 (Kompilator Server)

C2 (Opto) melakukan optimisasi mendalam: penyisipan, analisis pelolosan, pembukaan gulungan perulangan, vektorisasi, dan penghapusan kode mati. C2 menghasilkan kode asli tercepat, tetapi membutuhkan waktu lebih lama untuk mengompilasi.

// Force server JIT only:
java -server MyApp
// Or explicitly:
java -XX:-TieredCompilation MyApp   // uses C2 only (warm-up is slower)

Ambang Hotspot

Suatu metode dikompilasi JIT setelah melewati ambang pencacah pemanggilan. Bawaan: 10.000 pemanggilan (C2). Sesuaikan dengan -XX:CompileThreshold=N.

// Lower threshold for faster warm-up (at cost of less optimization):
java -XX:CompileThreshold=1000 MyApp

Penyisipan

Penyisipan adalah optimisasi C2 yang paling berdampak: metode kecil yang dipanggil dari kode panas "disalin-tempel" di lokasi pemanggilan, sehingga beban tambahan pengiriman metode dihilangkan dan optimisasi lanjutan dapat dilakukan.

// Check inlining decisions:
java -XX:+PrintInlining -XX:+UnlockDiagnosticVMOptions MyApp
// Output:
// @ 5  com.example.User::getName (5 bytes)   inlined

Analisis Pelolosan

Jika C2 menentukan bahwa suatu objek tidak pernah keluar dari metode (atau utas) saat ini, objek tersebut dapat dialokasikan di tumpukan alih-alih di memori dinamis — sehingga tekanan pada pengumpul sampah dihilangkan sepenuhnya.

// Objects that don't escape are stack-allocated:
String result = new StringBuilder().append("Hello ").append(name).toString();
// The StringBuilder may be eliminated by escape analysis

Log Kompilasi JIT

Gunakan -XX:+PrintCompilation untuk mencatat setiap metode saat dikompilasi. Keluaran menampilkan nama metode, tingkat, dan penanda kompilasi.

// java -XX:+PrintCompilation MyApp
// Output:
//    1   n    java.lang.String::hashCode (0 bytes)
//   25   3    com.example.UserService::findById (42 bytes)
//   31   4    com.example.UserService::findById (42 bytes) made not entrant

Deoptimisasi

Jika asumsi JIT dilanggar (misalnya, sebuah kelas dimuat sehingga mengubah tipe penerima di lokasi pemanggilan), C2 melakukan "deoptimisasi" — kembali ke penerjemah atau C1. Hal ini normal dan biasanya tidak terlihat.

Waktu Pemanasan

Kompilasi JIT membutuhkan waktu. Dalam proses berumur pendek, metode mungkin tidak pernah dikompilasi JIT. Gunakan kompilasi sebelum eksekusi (GraalVM Native Image) atau simpan hasil JIT dalam cache dengan Class Data Sharing (CDS) untuk mempercepat waktu mulai.

// Enable AppCDS to cache JIT-compilable classes:
java -XX:ArchiveClassesAtExit=app.jsa -cp app.jar MyApp   # generate archive
java -XX:SharedArchiveFile=app.jsa -cp app.jar MyApp       # use archive

JIT GraalVM

GraalVM menggantikan C2 dengan JIT yang ditulis dalam Java. Hal ini memungkinkan optimisasi yang lebih baik, penggunaan JIT untuk bahasa non-Java, dan menjadi dasar bagi Native Image (kompilasi sebelum eksekusi).

Pemeriksaan Singkat

Apa teknik kompilasi JIT yang menghilangkan beban pemanggilan metode dengan menggabungkan metode kecil ke dalam pemanggilnya?

Ringkasan

Kompilasi bertingkat memindahkan metode melalui C1 (kompilasi cepat, membuat profil) ke C2 (optimisasi mendalam). Optimisasi utama: penyisipan, analisis pelolosan, dan pembukaan gulungan perulangan. Gunakan -XX:+PrintCompilation untuk mengamati keputusan JIT. Lakukan pemanasan sebelum pembandingan kinerja.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kompilasi JIT dan Kompilasi Bertingkat” gratis?

Ya — teks lengkap “Kompilasi JIT dan Kompilasi Bertingkat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kompilasi JIT dan Kompilasi Bertingkat”?

Pelajari cara JVM menginterpretasikan lalu mengompilasi metode yang sering digunakan dengan JIT, serta cara memicu dan mengamati kompilasi. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Kompilasi JIT dan Kompilasi Bertingkat” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi
  2. Hierarki ClassLoader dan Pemuat Kustom
  3. Memeriksa Bytecode dengan javap
  4. Kompilasi JIT dan Kompilasi Bertingkat
← Kembali ke Java Academy