Java tidak lahir dalam semalam. Bahasa ini bermula dari proyek riset kecil di Sun Microsystems pada awal 1990-an, lalu tumbuh menjadi platform yang menopang sistem perbankan, layanan backend, dan perangkat lunak perusahaan hingga hari ini. Dengan mengetahui sejarahnya, kita menjadi paham mengapa Java memuat pustaka lawas dan API modern sekaligus, mengapa penomoran versinya sempat memakai pola 1.x, dan mengapa pembaruannya kini datang setiap enam bulan. Chapter ini menelusuri garis waktu Java dari 1995 sampai sekarang, lalu memetakan ekosistem besar di sekelilingnya — mulai dari JDK, framework, build tools, hingga komunitas pengembangnya.
Dari Proyek Oak ke Rilis Publik #
Pada tahun 1991, tim kecil di Sun Microsystems yang dipimpin James Gosling — didampingi Mike Sheridan dan Patrick Naughton — memulai proyek riset bernama Oak. Tujuan awal Oak adalah bahasa untuk perangkat tertanam seperti pengendali televisi interaktif, yakni kelas perangkat dengan prosesor yang beragam sehingga kode program harus portabel. Solusi tim berupa bahasa yang dikompilasi menjadi bytecode dan dijalankan oleh mesin virtual — rancangan yang kelak menjadi ciri khas Java. Karena nama Oak telah dipakai produk lain, nama bahasa diganti menjadi Java pada 1995. Sun memperkenalkan Java kepada publik pada Mei 1995, JDK 1.0 menyusul pada Januari 1996, dan dukungan applet pada browser Netscape membuat popularitas bahasa ini melonjak pada era awal web.
Dari Java 2 ke Java 8 #
Versi 1.2 (1998) membawa perubahan besar sampai Sun menandainya sebagai Java 2 dan memecah platform menjadi J2SE untuk desktop, J2EE untuk server, serta J2ME untuk perangkat bergerak. Java 5.0 (2004) menyusul dengan perombakan bahasa terbesar pada masanya: generics, enum, autoboxing, dan perulangan for-each. Periode 2006-2007 menjadi titik penting lain karena Sun membuka kode sumber Java sebagai proyek OpenJDK dengan lisensi GPL. Pada 2010 Oracle mengakuisisi Sun, sehingga pengembangan Java berpindah ke Oracle. Kemudian hadir Java 8 (Maret 2014) dengan lambda expression, Stream API, dan API tanggal-baru java.time — kombinasi yang menjadikan Java 8 versi paling lama bertahan di sistem produksi hingga hari ini.
Irama Rilis Enam Bulanan dan LTS #
Sejak Java 9 (September 2017), pengembangan beralih ke irama rilis tetap: versi baru hadir setiap Maret dan September. Irama ini memperpendek jarak antara fitur selesai dan fitur bisa dipakai — pengembang tidak lagi menunggu bertahun-tahun seperti masa transisi Java 7 ke Java 8. Konsekuensinya, setiap rilis membawa lebih sedikit perubahan, dan hanya sebagian yang ditandai Long-Term Support (LTS): Java 11 (2018), 17 (2021), 21 (2023), dan 25 (2025), dengan LTS berikutnya direncanakan pada 2027. Rilis non-LTS hanya menerima pembaruan singkat sampai versi penggantinya terbit. Strategi memilih versi untuk proyek kita bedah tuntas pada Chapter Memilih Versi Java.
Peta Ekosistem Java #
Ekosistem Java tersusun berlapis, dan kita perlu mengenali tiap lapisannya sebelum menyelam lebih dalam.
| Lapisan | Contoh | Peran |
|---|---|---|
| Bahasa dan JDK | javac, JVM, pustaka standar | Fondasi resmi untuk menulis dan menjalankan kode |
| Framework | Spring Boot, Jakarta EE, Hibernate | Kerangka aplikasi siap pakai untuk backend dan data |
| Build tools | Maven, Gradle | Mengelola dependensi, kompilasi, dan pengujian |
| Komunitas | OpenJDK, JCP, Adoptium, Java User Group | Mengembangkan spesifikasi dan mendistribusikan JDK |
Fondasinya tentu saja JDK itu sendiri: compiler javac, JVM, dan pustaka standar yang luas. Di atas fondasi tersebut, framework mempercepat pembangunan aplikasi. Spring Boot mendominasi backend Java lewat pola dependency injection dan server tersemat; Hibernate (beserta standar Jakarta Persistence) mengurus pemetaan objek ke tabel database; Jakarta EE menjadi kumpulan spesifikasi enterprise yang diimplementasikan banyak vendor. Semua framework tersebut dibangun di atas pustaka standar, bukan menggantikannya.
Build tools menjawab kebutuhan praktis: dari mana library eksternal datang dan bagaimana proyek dibangun secara konsisten. Maven (rilis stabil pertama 2004) memakai deklarasi XML pom.xml, sedangkan Gradle (2012) memakai skrip Groovy atau Kotlin. Keduanya mengunduh dependensi dari repositori terpusat Maven Central, menjalankan pengujian, dan mengemas artefak — materi lengkapnya menunggu kita di Section Build Tools dan Dependency Management.
Komunitas menjaga seluruh ekosistem tetap bergerak. OpenJDK adalah tempat kode Java dikembangkan secara terbuka; fitur baru diusulkan melalui dokumen JEP. Java Community Process (JCP), yang berdiri sejak 1998, mengelola spesifikasi formal melalui mekanisme JSR. Yayasan Eclipse menjalankan proyek Adoptium yang membangun distribusi JDK Temurin secara gratis, sementara puluhan Java User Group menjadi wadah bertukar pengetahuan di banyak negara.
Jejak Rilis dalam Kode #
Linimasa di atas bisa kita buktikan langsung di terminal. Program berikut menyimpan delapan rilis penting Java ke dalam List berisi record, mencetak tabelnya secara berurutan, lalu menampilkan versi JDK yang benar-benar menjalankan program ini:
import java.util.List;
public class LinimasaRilis {
// Record: class ringkas khusus penyimpan data
record Rilis(int tahun, String versi, String sorotan) {}
public static void main(String[] args) {
List<Rilis> linimasa = List.of(
new Rilis(1996, "1.0", "Rilis JDK pertama untuk publik"),
new Rilis(2004, "5.0", "Generics, enum, autoboxing"),
new Rilis(2014, "8", "Lambda dan Stream (LTS paling lama dipakai)"),
new Rilis(2017, "9", "Modul JPMS, irama rilis baru dimulai"),
new Rilis(2018, "11", "LTS pertama di irama enam bulanan"),
new Rilis(2021, "17", "LTS, sealed class dan record"),
new Rilis(2023, "21", "LTS, virtual threads"),
new Rilis(2025, "25", "LTS, scoped values dan FFM API")
);
System.out.println("Linimasa rilis penting Java:");
for (Rilis r : linimasa) {
System.out.printf("%d Java %-3s %s%n", r.tahun(), r.versi(), r.sorotan());
}
System.out.println();
System.out.println("Contoh ini dijalankan oleh JDK "
+ System.getProperty("java.version") + " ("
+ System.getProperty("java.vendor") + ")");
}
}Output yang Dihasilkan:
Linimasa rilis penting Java:
1996 Java 1.0 Rilis JDK pertama untuk publik
2004 Java 5.0 Generics, enum, autoboxing
2014 Java 8 Lambda dan Stream (LTS paling lama dipakai)
2017 Java 9 Modul JPMS, irama rilis baru dimulai
2018 Java 11 LTS pertama di irama enam bulanan
2021 Java 17 LTS, sealed class dan record
2023 Java 21 LTS, virtual threads
2025 Java 25 LTS, scoped values dan FFM API
Contoh ini dijalankan oleh JDK 25.0.4.1 (Eclipse Adoptium)Hasil program ini identik setiap kali dijalankan karena seluruh data ditulis langsung di dalam kode. Mari kita telaah bagian-bagian pentingnya:
- Baris 6 (
record Rilis(int tahun, String versi, String sorotan) {}): mendeklarasikan record — class ringkas untuk menyimpan data. Compiler otomatis menyediakan constructor serta accessortahun(),versi(), dansorotan(); record kita bahas secara menyeluruh di Section Object-Oriented Programming. - Baris 9 (
List<Rilis> linimasa = List.of(...)): membangunListyang tidak dapat diubah (immutable) berisi delapan objekRilissesuai urutan penulisan. - Baris 21-23 (
for (Rilis r : linimasa)): perulangan for-each yang mengambil satu objekRilistiap iterasi, lalu mencetaknya. - Baris 22 (
System.out.printf("%d Java %-3s %s%n", ...)): mencetak dengan format —%duntuk bilangan bulat,%-3suntuk teks selebar minimal tiga karakter rata kiri, dan%nuntuk pindah baris. - Baris 26-28 (
System.getProperty("java.version")): membaca property runtime dari JVM yang sedang berjalan. Baris ini membuktikan versi konkret yang mengeksekusi program — dalam lingkungan Course ini, JDK 25 buatan Eclipse Adoptium (Temurin).
Sejarah memberi konteks; ekosistem memberi alat. Namun sebelum memakai alat-alat tersebut, kita perlu meluruskan tiga istilah yang paling sering tertukar di dunia Java: JDK, JRE, dan JVM. Chapter berikutnya membedah ketiganya lapis demi lapis, termasuk daftar alat pengembangan di dalam folder bin JDK.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
LinimasaRilis.java
Unduh berkasimport java.util.List;
public class LinimasaRilis {
// Record: class ringkas khusus penyimpan data
record Rilis(int tahun, String versi, String sorotan) {}
public static void main(String[] args) {
List<Rilis> linimasa = List.of(
new Rilis(1996, "1.0", "Rilis JDK pertama untuk publik"),
new Rilis(2004, "5.0", "Generics, enum, autoboxing"),
new Rilis(2014, "8", "Lambda dan Stream (LTS paling lama dipakai)"),
new Rilis(2017, "9", "Modul JPMS, irama rilis baru dimulai"),
new Rilis(2018, "11", "LTS pertama di irama enam bulanan"),
new Rilis(2021, "17", "LTS, sealed class dan record"),
new Rilis(2023, "21", "LTS, virtual threads"),
new Rilis(2025, "25", "LTS, scoped values dan FFM API")
);
System.out.println("Linimasa rilis penting Java:");
for (Rilis r : linimasa) {
System.out.printf("%d Java %-3s %s%n", r.tahun(), r.versi(), r.sorotan());
}
System.out.println();
System.out.println("Contoh ini dijalankan oleh JDK "
+ System.getProperty("java.version") + " ("
+ System.getProperty("java.vendor") + ")");
}
}