“Java versi berapa yang sebaiknya saya pelajari?” adalah pertanyaan pembuka yang wajar. Jawabannya bergantung pada dua hal: siklus rilis enam bulanan yang berjalan terus, dan status Long-Term Support (LTS) yang menentukan berapa lama sebuah versi dirawat. Salah memilih jarang berakibat fatal — kode Java 8 masih berjalan hari ini — tetapi pilihan yang tepat menghemat kerja migrasi bertahun-tahun ke depan. Chapter ini membahas siklus rilis, lini masa dukungan tiap LTS, ragam distribusi JDK, dan rekomendasi konkret untuk proyek baru maupun sistem lawas.

Siklus Rilis Enam Bulanan #

Sejak 2017, versi Java baru terbit setiap Maret dan September tanpa kecuali. Rilis ini bernomor urut — 26, 27, 28, begitu seterusnya — dan tiap rilis hanya membawa fitur yang benar-benar siap pada jadwal tersebut. Model ini menguntungkan pengembang fitur: hasil kerja terbit dalam hitungan bulan, bukan menunggu rilis besar bertahun-tahun. Konsekuensinya jelas pada sisi perawatan: rilis non-LTS hanya menerima pembaruan sampai rilis berikutnya keluar — sekitar enam bulan — lalu dianggap tergantikan. Memasang non-LTS untuk produksi jangka panjang berarti berhenti menerima perbaikan keamanan sebelum setahun.

Apa Itu LTS #

Setiap dua tahun, satu rilis September ditandai sebagai Long-Term Support: versi yang dijanjikan dirawat bertahun-tahun oleh Oracle, distribusi JDK, dan ekosistem framework. LTS adalah jangkar migrasi industri — tim di berbagai perusahaan menaikkan versi dari LTS ke LTS, melompati rilis-rilis non-LTS di antaranya. Barisan LTS saat ini: Java 8 (2014), 11 (2018), 17 (2021), 21 (2023), dan 25 (2025); LTS berikutnya direncanakan pada September 2027. Karena hanya LTS yang mendapat dukungan panjang, hampir seluruh proyek produksi berdiri di atas salah satu dari lima versi tersebut.

Lini Masa Dukungan #

Berapa lama sebuah LTS dirawat? Jawabannya bergantung pada siapa yang merawat. Tabel berikut merangkum dua sumber dukungan yang paling sering dirujuk: program Oracle untuk pelanggan berbayar, dan jadwal minimal Eclipse Temurin (distribusi komunitas gratis yang dipakai Course ini):

VersiRilis (GA)StatusDukungan Oracle (pelanggan)Dukungan Temurin (minimal)
8Maret 2014LTS paling lawasExtended hingga Desember 2030Hingga Desember 2030
11September 2018LTS matangExtended hingga Januari 2032Hingga Oktober 2027
17September 2021LTS matangExtended hingga September 2029Hingga Oktober 2027
21September 2023LTS aktifExtended hingga September 2031Hingga Desember 2029
25September 2025LTS terkiniExtended hingga September 2033Hingga September 2031

Pembacaan tabelnya lugas: Java 8 masih dirawat sampai 2030 karena basis instalasinya sangat besar, sementara Java 25 akan terus menerima perbaikan hingga setidaknya 2031-2033. Semakin baru LTS-nya, semakin lama rentang perawatan yang tersisa untuk proyek baru.

Ragam Distribusi JDK #

Semua distribusi JDK dibangun dari kode sumber yang sama — repositori OpenJDK — sehingga berpindah distribusi umumnya tidak mengubah perilaku program. Pembedanya ada pada siapa yang merakit, kanal dukungan, dan jadwal pembaruan:

DistribusiPerakitCatatan
Oracle JDKOracleBuild resmi Oracle; gratis untuk produksi dengan ketentuan lisensi per rilis
Oracle OpenJDKOracleBuild murni open source; pembaruan hanya beberapa bulan per rilis
Eclipse TemurinYayasan Eclipse (Adoptium)Build komunitas gratis; LTS dirawat bertahun-tahun; dipakai Course ini
Amazon CorrettoAmazonGratis; jalur dukungan menyatu dengan layanan AWS
Azul ZuluAzul SystemsGratis; opsi dukungan komersial Azul
BellSoft LibericaBellSoftGratis; populer di lingkungan container dan Linux
Red Hat Build of OpenJDKRed HatGratis; jalur dukungan menyatu dengan RHEL
GraalVMOracleJDK plus compiler Graal dan kemampuan native image

Untuk belajar dan kebanyakan proyek, satu distribusi LTS gratis mana pun sudah memadai. Pertimbangkan distribusi vendor tertentu ketika tim Anda membutuhkan kanal dukungan komersial atau integrasi dengan platform tertentu seperti AWS dan RHEL.

Membaca String Versi dari Dalam Program #

Program Java dapat memeriksa versi runtime yang menjalankannya lewat class Runtime.Version. Kemampuan ini berguna untuk alat CLI yang perlu menolak JVM yang terlalu lawas. Program berikut membaca versi lengkap, lalu membandingkannya dengan tiga batas LTS:

public class CekVersiRuntime {

    public static void main(String[] args) {
        Runtime.Version versi = Runtime.version();

        System.out.println("Versi lengkap     : " + versi);
        System.out.println("Angka feature     : " + versi.feature());

        Runtime.Version batas17 = Runtime.Version.parse("17");
        Runtime.Version batas21 = Runtime.Version.parse("21");
        Runtime.Version batas25 = Runtime.Version.parse("25");

        System.out.println("Memenuhi Java 17+ : " + (versi.compareTo(batas17) >= 0));
        System.out.println("Memenuhi Java 21+ : " + (versi.compareTo(batas21) >= 0));
        System.out.println("Memenuhi Java 25+ : " + (versi.compareTo(batas25) >= 0));
    }
}

Output yang Dihasilkan:

text
Versi lengkap     : 25.0.4.1+1-LTS
Angka feature     : 25
Memenuhi Java 17+ : true
Memenuhi Java 21+ : true
Memenuhi Java 25+ : true

Mari kita telaah cara kerjanya:

  1. Baris 4 (Runtime.Version versi = Runtime.version();): mengambil objek versi dari JVM yang sedang berjalan. Objek ini tahu segmen-segmen versi sampai nomor build.
  2. Baris 6-7 (versi dan versi.feature()): mencetak 25.0.4.1+1-LTS. Angka utama 25 adalah feature — penanda generasi rilis; 0.4.1 adalah pembaruan kuartalan dan patch; +1 nomor build; sedangkan LTS adalah penanda opsional yang ditambahkan distribusi Temurin.
  3. Baris 9-11 (Runtime.Version.parse("17") dst.): membangun objek versi pembanding dari string. Method ini juga dipakai alat build untuk memeriksa versi minimum.
  4. Baris 13-15 (versi.compareTo(batas17) >= 0): membandingkan dua versi — hasil tidak negatif berarti runtime sama baru atau lebih baru dari batas. Ketiga baris menghasilkan true karena 25 lebih baru dari 17, 21, dan setara dengan 25.

Rekomendasi untuk Proyek Baru dan Sistem Lawas #

Untuk proyek baru, mulai dari LTS terbaru yang didukung ekosistem Anda. Saat Course ini ditulis, jawaban tersebut adalah Java 25: dukungan panjang, fitur modern seperti record, pattern matching, dan virtual threads, serta jalur perawatan paling panjang. Pilihan kedua yang wajar adalah Java 21 atau 17 jika framework atau library kunci proyek Anda belum menyatakan dukungan untuk 25 — selalu cek halaman dukungan framework sebelum memutuskan. Rilis non-LTS sebaiknya dipakai untuk eksperimen fitur baru, bukan untuk sistem produksi.

Untuk sistem lawas, naik bertahap dari satu LTS ke LTS berikutnya (8 → 11 → 17 → 21 → 25) terbukti lebih terkendali daripada migrasi besar sekali jalan. Alat jdeps dan jdeprscan di folder bin JDK membantu memetakan dependensi API yang sudah dihapus atau tidak dianjurkan. Kunci keberhasilan migrasi bukan kecepatan, melainkan keajekan: seluruh anggota tim dan pipeline CI memakai versi yang sama, terpasang dari distribusi yang sama.

Dengan strategi versi yang jelas, fondasi pengetahuan kita lengkap: kita mengenal Java, sejarahnya, platformnya, cara kerjanya, posisinya di antara bahasa lain, dan cara memilih versinya. Section berikutnya beralih dari teori ke praktik — menyiapkan JDK dan editor di komputer Anda, lalu menjalankan program pertama secara mandiri.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

CekVersiRuntime.java

Unduh berkas
java
public class CekVersiRuntime {

    public static void main(String[] args) {
        Runtime.Version versi = Runtime.version();

        System.out.println("Versi lengkap     : " + versi);
        System.out.println("Angka feature     : " + versi.feature());

        Runtime.Version batas17 = Runtime.Version.parse("17");
        Runtime.Version batas21 = Runtime.Version.parse("21");
        Runtime.Version batas25 = Runtime.Version.parse("25");

        System.out.println("Memenuhi Java 17+ : " + (versi.compareTo(batas17) >= 0));
        System.out.println("Memenuhi Java 21+ : " + (versi.compareTo(batas21) >= 0));
        System.out.println("Memenuhi Java 25+ : " + (versi.compareTo(batas25) >= 0));
    }
}