Sejumlah parameter mempengaruhi ukuran generasi. Diagram berikut menggambarkan perbedaan antara ruang yang dikomit dan ruang virtual di heap. Pada inisialisasi mesin virtual, seluruh ruang untuk heap dicadangkan. Ukuran ruang yang dipesan dapat ditentukan dengan -Xmx
opsi. Jika nilai -Xms
parameter lebih kecil dari nilai -Xmx
parameter, tidak semua ruang yang dicadangkan segera berkomitmen ke mesin virtual. Ruang yang tidak terikat diberi label "virtual" pada gambar ini. Berbagai bagian tumpukan (generasi permanen, generasi bertenor, dan generasi muda) dapat tumbuh hingga batas ruang virtual sesuai kebutuhan.
Secara default, mesin virtual menumbuhkan atau mengecilkan tumpukan di setiap koleksi untuk mencoba menjaga proporsi ruang bebas untuk benda hidup di setiap koleksi dalam rentang tertentu. Rentang target ini ditetapkan sebagai persentase berdasarkan parameter - XX:MinHeapFreeRatio=<minimum>
dan -XX:MaxHeapFreeRatio=<maximum>
, dan ukuran total dibatasi di bawah ini oleh -Xms<min>
dan di atas oleh -Xmx<max>
.
Nilai Default Parameter
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
Nilai default parameter ukuran tumpukan pada sistem 64-bit telah ditingkatkan sekitar 30%. Peningkatan ini dimaksudkan untuk mengimbangi ukuran objek yang lebih besar pada sistem 64-bit.
Dengan parameter ini, jika persentase ruang kosong dalam satu generasi turun di bawah 40%, generasi akan diperluas untuk mempertahankan ruang kosong 40%, hingga ukuran maksimum yang diizinkan dari generasi tersebut. Demikian pula, jika ruang bebas melebihi 70%, pembangkitan akan dikontrak sehingga hanya 70% dari ruang bebas, tergantung pada ukuran minimum generasi.
Aplikasi server besar sering mengalami dua masalah dengan standar ini. Salah satunya adalah startup lambat, karena tumpukan awal kecil dan harus diubah ukurannya pada banyak koleksi utama. Masalah yang lebih mendesak adalah bahwa ukuran tumpukan maksimum default terlalu kecil untuk sebagian besar aplikasi server. Aturan praktis untuk aplikasi server adalah: