Episode ini mengupas cara kerja Java di balik layar: proses kompilasi source code menjadi bytecode, arsitektur JVM dengan class loader, bytecode verifier, JIT compiler, dan garbage collector, peran JVM, JRE, dan JDK, struktur project standar, serta classpath, module path, dan JPMS.

Episode 1 menjelaskan mengapa Java ada. Episode 2 membahas bagaimana Java bekerja. Ini adalah episode paling fundamental di seluruh series: kalian akan membedah arsitektur JVM, memahami perbedaan JDK, JRE, dan JVM, serta mengenal struktur project dan mekanisme pengelolaan class.
Pemahaman ini bukan sekadar teori. Ketika kalian menghadapi error seperti ClassNotFoundException atau NoClassDefFoundError, atau ketika kalian harus mengatur classpath untuk library eksternal, pengetahuan di episode ini akan menjadi penyelamat.
Setiap program Java dimulai sebagai file source dengan ekstensi .java. Compiler javac mengubahnya menjadi bytecode dengan ekstensi .class. Bytecode bukan kode mesin native, melainkan instruksi untuk JVM yang bersifat netral platform.
Alurnya sederhana: source code .java dikompilasi menjadi bytecode .class, lalu dieksekusi oleh JVM. Untuk melihat hasilnya, buat file Halo.java dan jalankan:
public class Halo {
public static void main(String[] args) {
System.out.println("Halo dari JVM");
}
}Kompilasi dan jalankan:
javac Halo.java
java Halojavac Halo.java menghasilkan Halo.class, dan java Halo memuat serta mengeksekusi class tersebut di JVM. Perhatikan bahwa perintah java memakai nama class, bukan nama file.
Untuk melihat isi bytecode, gunakan tool javap:
javap -c Halojavap -c Halo menampilkan instruksi bytecode seperti getstatic dan invokevirtual. Ini membuktikan bahwa Java tidak mengeksekusi kode mesin secara langsung, melainkan instruksi virtual yang dijalankan JVM.
JVM bekerja melalui beberapa komponen yang berkolaborasi:
.class ke dalam memori saat diperlukan.Saat java dijalankan, class loader memuat class utama beserta dependensinya, verifier memeriksa keamanan bytecode, lalu interpreter atau JIT compiler mengeksekusi instruksinya. JVM juga mengelola memori heap, memantau thread, dan menjalankan garbage collection secara berkala.
load class -> verify bytecode -> interpret / JIT compile -> run & collect garbagejavac dan tool pengembangan untuk membuat aplikasi.JDK berisi JRE berisi JVMUntuk mengembangkan aplikasi, kalian butuh JDK. Untuk sekadar menjalankan aplikasi, JRE sudah cukup. Itu sebabnya di episode 0 kita menginstall JDK — karena series ini juga menulis kode.
Project Java modern mengikuti struktur standar yang dipahami Maven dan Gradle:
src/main/java: source code utama.src/test/java: source code untuk pengujian.src/main/resources: file konfigurasi dan aset non-Java.Struktur ini adalah konvensi yang membuat project mudah dipahami dan diotomasi.
Package mengelompokkan class ke dalam namespace untuk menghindari konflik nama. Konvensinya menggunakan nama domain terbalik, misalnya com.perusahaan.aplikasi. Paket juga menjadi dasar dari dependency management dan modul.
Classpath memberi tahu JVM di mana mencari class dan library. Saat menjalankan program dengan dependency eksternal, kalian mengatur classpath dengan flag -cp:
java -cp .:lib/library.jar com.aplikasi.Main-cp .:lib/library.jar memberitahu JVM untuk mencari class di direktori saat ini dan di file JAR. Jika library tidak ditemukan di classpath, muncul ClassNotFoundException.
Java 9 memperkenalkan Java Platform Module System (JPMS) sebagai fitur modern pengelolaan dependency. Modul dideklarasikan dalam file module-info.java dan dijalankan lewat module path, bukan classpath. JPMS memberikan enkapsulasi yang lebih kuat karena setiap modul mendeklarasikan package mana yang diekspor.
classpath: daftar direktori dan JAR, tidak ada batasan akses
module path: modul dengan deklarasi requires dan exportsEpisode 18 akan membahas JPMS secara mendalam. Untuk sekarang, pahami bahwa classpath adalah mekanisme klasik, sedangkan module path adalah evolusi modernnya.
Episode 2 membedah fondasi teknis Java: proses kompilasi dari source code menjadi bytecode, arsitektur JVM dengan keempat komponen intinya, perbedaan JDK, JRE, dan JVM, struktur project standar, serta mekanisme classpath dan module path.
Inti yang harus dibawa pulang:
javac mengubah source code menjadi bytecode .class, lalu java mengeksekusinya di JVM.src/main/java, src/test/java, dan src/main/resources.ClassNotFoundException biasanya karena classpath yang salah.Di episode 3 selanjutnya kita akan membahas sintaks dasar dan struktur kode Java — program pertama, deklarasi class, method, field, dan visibilitas akses, statement, blok, komentar, aturan penamaan, serta menjalankan aplikasi dari command line dan IDE. Saatnya menulis kode sungguhan!