Oracle belgelerinde]1 buldum:
-Xmxsize Bellek ayırma havuzunun maksimum boyutunu (bayt cinsinden) bayt cinsinden belirtir ... Varsayılan değeri, sistem yapılandırmasına bağlı olarak çalışma zamanında seçilir.
Sistem yapılandırması* ne anlama geliyor?
Uygulamaya ve sürüme göre değişir, ancak genellikle kullanılan sanal makineye (örn. istemci veya sunucu, bkz. -client
ve -server
parametreleri) ve sistem belleğinize bağlıdır.
Genellikle varsayılan değeri fiziksel belleğinizin 1/4'ü veya 1GB'tır (hangisi daha küçükse).
Ayrıca Java yapılandırma seçenekleri (komut satırı parametreleri), varsayılanı değiştirebilen (yani yeni bir varsayılan belirleyebilen) -Xmx
de dahil olmak üzere ortam değişkenlerine "outsourced" edilebilir. Özellikle JAVA_TOOL_OPTIONS
ortam değişkeni tüm Java araçları tarafından kontrol edilir ve varsa kullanılır (daha fazla ayrıntı burada ve burada).
Varsayılan değerleri görmek için aşağıdaki komutu çalıştırabilirsiniz:
java -XX:+PrintFlagsFinal -version
Size çok uzun bir liste verir, -Xmx
MaxHeapSize
içinde, -Xms
InitialHeapSize
içinde. Çıktınızı filtreleyin (örneğin linux üzerinde |grep
) veya içinde arama yapabilmek için bir dosyaya kaydedin.
Bahsettiğiniz gibi, varsayılan -Xmxsize
(Maksimum HeapSize) sistem yapılandırmanıza bağlıdır.
Java8, Xmssize
(Minimum HeapSize) için fiziksel belleğinizin 1/6'sından daha büyük ve -Xmxsize
(Maksimum HeapSize) için fiziksel belleğinizin 1/4'ünden daha küçük bellek kullanır.
Bu da 8GB RAM fiziksel belleğiniz varsa, Xmssize
değerinin 8(1/6) değerinden büyük ve -Xmxsize
değerinin 8(1/4) değerinden küçük olacağı anlamına gelir.
Varsayılan HeapSize değerinizi şununla kontrol edebilirsiniz
Windows'da**:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Linux'ta**:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Bu varsayılan değerler de istediğiniz miktarda geçersiz kılınabilir.
Şaşırtıcı bir şekilde bu sorunun belgelenmiş kesin bir cevabı yok. Belki başka bir veri noktası cevap arayan diğerlerine değer sağlayabilir. CentOS (6.8,7.3) ve Java 8 (build 1.8.0_60-b27, 64-Bit Server) çalıştıran sistemlerimde:
varsayılan bellek fiziksel belleğin 1/4'üdür, 1GB ile sınırlı değildir.
Ayrıca, -XX:+PrintFlagsFinal
STDERR'ye yazdırır, bu nedenle yukarıda diğerleri tarafından sunulan mevcut varsayılan belleği belirleme komutu aşağıdakine göre ayarlanmalıdır:
java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize
Aşağıdakiler 64 GB fiziksel RAM'e sahip sistemde döndürülür:
uintx MaxHeapSize := 16873684992 {product}