0Pricing
Java Academy · Pelajaran

Memeriksa Bytecode dengan javap

Dekompilasi file kelas dengan javap -c untuk memahami cara konstruksi Java diterjemahkan menjadi bytecode.

Memeriksa Bytecode dengan javap adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Mengapa Memeriksa Kode Bita?

Memahami kode bita mengungkap cara JVM sebenarnya menjalankan kode Java Anda. Hal ini membantu men-debug masalah kinerja, memahami optimisasi kompilator, dan memastikan kode sintetis (lambda, kelas dalam) bekerja sesuai harapan.

Penggunaan Dasar javap

javap ClassName menampilkan API publik kelas tersebut (signature metode, deklarasi atribut). Perintah ini membaca berkas .class dari direktori saat ini atau jalur kelas.

# Compile first:
javac User.java
# Display public API:
javap User
# Output:
# public class User {
#   public java.lang.String getName();
#   public int getAge();
# }

Membongkar Kode Bita dengan -c

javap -c User menampilkan set instruksi JVM (kode operasi) untuk setiap metode. Inilah tampilan utama untuk memahami alur eksekusi.

# javap -c User
# public java.lang.String getName();
#   Code:
#      0: aload_0
#      1: getfield      #2  // Field name:Ljava/lang/String;
#      4: areturn

Keluaran Rinci dengan -v

javap -v User menambahkan kumpulan konstanta, penanda akses, ukuran tumpukan, dan tabel pengecualian — hal yang penting untuk analisis mendalam dan penelusuran kesalahan ClassCastException.

# javap -v User
# Constant pool:
#    #1 = Methodref  #5.#22  // java/lang/Object."<init>":()V
#    #2 = Fieldref   #4.#23  // User.name:Ljava/lang/String;
# ...

Instruksi Kode Bita yang Umum

Kenali kode operasi yang paling sering digunakan: aload_0 (memuat this), getfield, putfield, invokevirtual, invokespecial (konstruktor/pribadi), invokestatic, invokedynamic (lambda), return, areturn.

Lambda dan invokedynamic

Ekspresi lambda dikompilasi menjadi instruksi invokedynamic. Pemanggilan pertama menggunakan LambdaMetafactory untuk menghasilkan kelas; pemanggilan berikutnya menggunakannya kembali. javap -v menampilkan tabel metode bootstrap.

// Java:
list.forEach(s -> System.out.println(s));
// Compiles to invokedynamic — javap shows:
// invokedynamic #4,0  // InvokeDynamic #0:accept:()Ljava/util/function/Consumer;

Optimisasi Penggabungan String

javac modern menggunakan invokedynamic untuk "Hello " + name, bukan StringBuilder. javap -v menampilkan metode bootstrap StringConcatFactory.

// Java 9+ string concat:
String s = "Hello " + name;
// Compiles to:
// invokedynamic #5,0  // InvokeDynamic #1:makeConcatWithConstants

Melihat Akses Kelas Dalam

Saat kelas luar mengakses atribut privat kelas dalam (atau sebaliknya), kompilator menghasilkan metode sintetis access$000. javap -p (anggota privat) mengungkap metode tersebut.

# javap -p OuterClass
# static int access$000(OuterClass);
# -- synthetic bridge method generated by the compiler

Memverifikasi Biaya Pembungkusan Otomatis

Pembungkusan otomatis dikompilasi menjadi pemanggilan Integer.valueOf() atau int.intValue(). Gunakan javap -c untuk memastikan pembungkusan terjadi dan menentukan apakah sebaiknya menggunakan tipe primitif.

// Java:
List<Integer> list = new ArrayList<>();
list.add(42); // autoboxing
// Bytecode:
// bipush 42
// invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

Membaca Blok Coba-Tangkap dari Kode Bita

Penangan pengecualian muncul sebagai entri dalam tabel pengecualian, yang terlihat dengan javap -v. Setiap entri menampilkan awal coba, akhir coba, penangan, dan tipe yang ditangkap.

# Exception table:
# from    to  target  type
#    2    10      15  Class java/io/IOException
# -- means: if IOException in bytes 2-10, jump to handler at byte 15

Kepala Berkas Class

Kepala berkas class berisi nomor ajaib (CAFEBABE), versi mayor/minor, dan penanda akses. javap -v menampilkan versi mayor, yang menunjukkan rilis Java yang digunakan untuk mengompilasi class tersebut.

# javap -v User
# minor version: 0
# major version: 61   <- Java 17
# flags: ACC_PUBLIC, ACC_SUPER

Pemeriksaan Singkat

Flag javap mana yang menampilkan kode operasi JVM untuk setiap metode?

Ringkasan

Gunakan javap -c untuk kode operasi dan javap -v untuk detail lengkap. Kenali kode operasi utama: invokevirtual, invokespecial, invokedynamic, getfield. Periksa lambda, pembungkusan, dan penggabungan string untuk memahami keluaran kompilator.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memeriksa Bytecode dengan javap” gratis?

Ya — teks lengkap “Memeriksa Bytecode dengan javap” 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 “Memeriksa Bytecode dengan javap”?

Dekompilasi file kelas dengan javap -c untuk memahami cara konstruksi Java diterjemahkan menjadi bytecode. 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 3 dari 4.

Berapa lama pelajaran “Memeriksa Bytecode dengan javap” 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