0Pricing
Java Academy · Pelajaran

Flag Penyetelan JVM Umum

Opsi heap, GC, dan JIT.

Flag Penyetelan JVM Umum 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.

Mengapa Menyetel JVM

JVM memiliki setelan bawaan yang masuk akal, tetapi untuk layanan yang menuntut kinerja tinggi, terkadang Anda perlu menyesuaikan ukuran memori dinamis, pengumpul sampah, dan perilaku kompilasi tepat waktu.

Penyetelan adalah langkah terakhir: buat profil terlebih dahulu, perbaiki kode, lalu gunakan opsi hanya jika pengukuran membenarkannya.

Ukuran Memori Dinamis: -Xms dan -Xmx

Dua opsi yang paling umum menetapkan batas memori dinamis:

  • -Xms — ukuran awal memori dinamis.
  • -Xmx — ukuran maksimum memori dinamis.

Contoh: java -Xms512m -Xmx2g MyApp. Menetapkan -Xms sama dengan -Xmx menghindari jeda perubahan ukuran pada server yang berjalan lama.

Membaca Setelan Bawaan

Anda dapat menanyakan pilihan JVM. Runtime menyediakan angka memori dinamis saat ini, dan -XX:+PrintFlagsFinal menampilkan nilai efektif setiap opsi.

Contoh tersebut mencetak batas memori JVM yang sedang berjalan.

public class Main {
    public static void main(String[] args) {
        Runtime rt = Runtime.getRuntime();
        long mb = 1024 * 1024;
        System.out.println("Max heap (Xmx): " + (rt.maxMemory() / mb) + " MB");
        System.out.println("Total heap now: " + (rt.totalMemory() / mb) + " MB");
        System.out.println("Free in heap: " + (rt.freeMemory() / mb) + " MB");
        System.out.println("Available cores: " + rt.availableProcessors());
    }
}

Memilih Pengumpul

JDK modern menyediakan beberapa pengumpul sampah:

  • -XX:+UseG1GC — bawaan; seimbang dan berbasis wilayah.
  • -XX:+UseZGC — jeda sangat rendah, area memori besar.
  • -XX:+UseParallelGC — laju pemrosesan maksimum, jeda lebih panjang.
  • -XX:+UseSerialGC — menggunakan satu utas, untuk aplikasi dan kontainer kecil.

Target Jeda G1

G1 adalah pengumpul yang berorientasi pada waktu jeda. Anda memberinya tujuan dan pengumpul ini berusaha mencapainya:

  • -XX:MaxGCPauseMillis=200 meminta G1 menjaga jeda mendekati 200 milidetik.

Ini adalah target lunak, bukan jaminan. Menetapkannya terlalu rendah memaksa pengumpulan kecil yang sering dan dapat menurunkan laju pemrosesan.

ZGC untuk Latensi Rendah

Jika waktu jeda harus tetap di bawah satu milidetik bahkan pada area memori berukuran banyak gigabita, gunakan ZGC dengan -XX:+UseZGC.

Pengumpul ini melakukan sebagian besar pekerjaannya secara bersamaan dengan utas aplikasi Anda. Imbalannya adalah beban tambahan CPU dan memori yang sedikit lebih tinggi dibandingkan G1. Ideal untuk layanan yang sensitif terhadap latensi.

Pencatatan Pengumpulan Sampah

Untuk menyetel pengumpulan sampah, Anda harus dapat melihatnya. Aktifkan pencatatan terpadu:

  • -Xlog:gc*:file=gc.log:time,uptime,level,tags

Opsi ini merekam setiap pengumpulan beserta cap waktu dan durasinya. Masukkan log ke dalam penampil (atau JMC/JFR) untuk menemukan jeda yang panjang atau sering terjadi sebelum mengubah opsi apa pun.

Kontainer dan CPU

Di dalam kontainer, JVM membaca batas grup kontrol. Secara bawaan, JVM menggunakan sebagian dari batas memori untuk memori dinamis.

  • -XX:MaxRAMPercentage=75.0 menetapkan memori dinamis sebagai persentase dari memori kontainer.
  • -XX:ActiveProcessorCount=N mengganti jumlah CPU yang terdeteksi.

Dengan demikian, penggunaan memori berlebihan yang kemudian akan menyebabkan proses dihentikan oleh pengatur dapat dihindari.

Kompilasi Tepat Waktu dan Diagnostik

Beberapa opsi berguna lainnya:

  • -XX:+HeapDumpOnOutOfMemoryError — merekam isi memori heap saat OOM untuk analisis pascakejadian.
  • -XX:HeapDumpPath=/tmp — menentukan tempat untuk menuliskannya.
  • -XX:+PrintCompilation — melihat aktivitas kompilasi tepat waktu.

Opsi-opsi ini hampir tidak menambah beban dan sangat membantu ketika terjadi masalah.

Disiplin Penyetelan

Aturan emas untuk opsi:

  • Ubah satu opsi pada satu waktu dan ukur ulang dengan membandingkannya terhadap tolok ukur awal.
  • Jangan menyalin opsi secara membabi buta dari artikel di blog — opsi tersebut mungkin ditujukan untuk JVM lama.
  • Sebagian besar aplikasi hanya memerlukan -Xmx dan mungkin pilihan pengumpul; nilai bawaan sudah baik.

Metadata Kelas dan Utas

Heap bukan satu-satunya wilayah memori:

  • -XX:MaxMetaspaceSize membatasi ruang metadata kelas; tanpa opsi ini, kebocoran saat memuat kelas dapat menghabiskan memori tingkat sistem.
  • -Xss menetapkan ukuran tumpukan untuk setiap utas; kurangi nilainya jika Anda menjalankan sangat banyak utas, dan naikkan untuk rekursi yang dalam.

Opsi-opsi ini jarang perlu disetel, tetapi mengetahui keberadaannya membantu ketika masalahnya terletak pada memori tingkat sistem, bukan memori heap.

Uji Cepat

Apa yang dikendalikan oleh opsi -Xms dan -Xmx?

Ringkasan

Opsi-opsi yang perlu Anda ketahui:

  • -Xms / -Xmx membatasi ukuran heap.
  • Pilih pengumpul: G1 (bawaan), ZGC (jeda rendah), Parallel (kapasitas pemrosesan).
  • Tetapkan -XX:MaxGCPauseMillis untuk G1; aktifkan -Xlog:gc* untuk mengamati aktivitasnya.
  • Gunakan MaxRAMPercentage dalam kontainer dan HeapDumpOnOutOfMemoryError sebagai langkah pengamanan.
  • Ubah satu opsi pada satu waktu dan lakukan pengukuran.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Flag Penyetelan JVM Umum” gratis?

Ya — teks lengkap “Flag Penyetelan JVM Umum” 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 “Flag Penyetelan JVM Umum”?

Opsi heap, GC, dan JIT. 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 “Flag Penyetelan JVM Umum” 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. Mengidentifikasi Bottleneck
  2. Java Flight Recorder
  3. Menganalisis dengan JDK Mission Control
  4. Flag Penyetelan JVM Umum
← Kembali ke Java Academy