Dalam dokumentasi Oracle saya menemukan:
-Xmxsize Menentukan ukuran maksimum (dalam byte) dari kumpulan alokasi memori dalam byte ... Nilai default dipilih saat runtime berdasarkan konfigurasi sistem.
Apa yang dimaksud dengan konfigurasi sistem?
Dalam dokumentasi Oracle saya menemukan:
-Xmxsize Menentukan ukuran maksimum (dalam byte) dari kumpulan alokasi memori dalam byte ... Nilai default dipilih saat runtime berdasarkan konfigurasi sistem.
Apa yang dimaksud dengan konfigurasi sistem?
Hal ini bervariasi tergantung implementasi dan versinya, namun biasanya bergantung pada VM yang digunakan (misalnya klien atau server, lihat parameter -client
dan -server
) dan pada memori sistem Anda.
Seringkali untuk client
nilai defaultnya adalah 1/4 dari memori fisik Anda atau 1GB (mana yang lebih kecil).
Opsi konfigurasi Java juga (parameter baris perintah) dapat "dialihdayakan" ke variabel lingkungan termasuk -Xmx
, yang dapat mengubah default (artinya menentukan default baru). Khususnya variabel lingkungan JAVA_TOOL_OPTIONS
diperiksa oleh semua alat Java dan digunakan jika ada (detail lebih lanjut di sini dan di sini).
Anda dapat menjalankan perintah berikut untuk melihat nilai default:
java -XX:+PrintFlagsFinal -version
Ini memberi Anda daftar yang sangat panjang, -Xmx
ada di MaxHeapSize
, -Xms
ada di InitialHeapSize
. Filter keluaran Anda (misalnya |grep
di linux) atau simpan dalam file sehingga Anda dapat mencari di dalamnya.
java -XX:+PrintCommandLineFlags
untuk mencetak ukuran heap (dan informasi lainnya) yang dipilih oleh JVM berdasarkan informasi sistem saat ini
- person Cristian Vat; 02.02.2015
-XX:+PrintFlagsFinal
, yang Anda sarankan tidak berfungsi untuk saya. Menambahkannya ke jawabannya.
- person icza; 02.02.2015
-XX:+PrintFlagsFinal
adalah opsi terbaik karena ini akan menampilkan semua informasi setelah semuanya diperhitungkan (termasuk opsi manual dan ergonomis). Meskipun -XX:+PrintCommandLineFlags
tampaknya berfungsi di JVM saya (mungkin bergantung pada versi persisnya)
- person Cristian Vat; 02.02.2015
java -XX:+PrintFlagsFinal -version | grep HeapSize
- person user218867; 18.01.2017
-XX:+UseCGroupMemoryLimitForHeap
aktif.
- person xmar; 20.03.2019
Seperti yang telah Anda sebutkan, -Xmxsize
default (Ukuran Heap Maksimum) bergantung pada konfigurasi sistem Anda.
Java8 client
membutuhkan 1/64 memori fisik lebih besar untuk Xmssize
(Ukuran Tumpukan Minimum) dan Lebih kecil 1/4 memori fisik untuk -Xmxsize
(Ukuran Tumpukan Maksimum).
Artinya jika Anda memiliki memori fisik RAM 8GB, Anda akan memiliki Xmssize
Lebih Besar dari 8*(1/64) dan Lebih Kecil dari -Xmxsize
as 8*(1/4).
Anda dapat Memeriksa HeapSize default Anda dengan
Di Windows:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Di Linux:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Nilai default ini juga dapat diubah ke jumlah yang Anda inginkan.
Anehnya pertanyaan ini tidak memiliki jawaban pasti yang terdokumentasi. Mungkin titik data lain akan memberikan nilai bagi orang lain yang mencari jawaban. Pada sistem saya yang menjalankan CentOS (6.8,7.3) dan Java 8 (build 1.8.0_60-b27, Server 64-Bit):
memori default adalah 1/4 dari memori fisik, tidak dibatasi oleh 1GB.
Juga, -XX:+PrintFlagsFinal
mencetak ke STDERR sehingga perintah untuk menentukan memori default saat ini yang disajikan oleh orang lain di atas harus diubah menjadi yang berikut:
java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
Berikut ini dikembalikan pada sistem dengan RAM fisik 64GB:
uintx MaxHeapSize := 16873684992 {product}
Di VM Ubuntu saya, dengan total RAM 1048 MB, java -XX:+PrintFlagsFinal -version | grep HeapSize
dicetak: uintx MaxHeapSize := 266338304
, yaitu kira-kira 266MB dan merupakan 1/4 dari total RAM saya.
Pada 8 Mei 2019:
Ukuran heap JVM bergantung pada konfigurasi sistem, artinya:
a) jvm klien vs jvm server
b) 32bit vs 64bit.
Tautan:
1) pembaruan dari J2SE5.0: https://docs.Oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2) jawaban singkat: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html
3) jawaban terperinci: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size
4) klien vs server: https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
Ringkasan: (Sulit untuk memahaminya dari tautan di atas. Jadi, rangkumlah di sini)
1) Ukuran heap maksimum default untuk Klien jvm adalah 256mb (ada pengecualian, baca dari tautan di atas).
2) Ukuran heap maksimum default untuk Server jvm 32bit adalah 1gb dan 64 bit adalah 32gb (sekali lagi ada pengecualian di sini juga. Silakan membacanya dari tautan).
Jadi ukuran heap jvm maksimum default adalah: 256mb atau 1gb atau 32gb bergantung pada VM, di atas.
-Xmx
, setidaknya di Java 8, karena pada sistem linux 64bit saya, dengan total memori 6Gb, saya memiliki jvm yang memiliki -Xmx = 1.5Gb, secara default. - person user218867   schedule 18.01.2017