-Xmxn
Seçeneği Java komut satırından çıkarırsam, varsayılan bir değer kullanılır. Java belgelerine göre
"varsayılan değer çalışma zamanında sistem yapılandırmasına göre seçilir"
Hangi sistem yapılandırma ayarları varsayılan değeri etkiler?
-Xmxn
Seçeneği Java komut satırından çıkarırsam, varsayılan bir değer kullanılır. Java belgelerine göre
"varsayılan değer çalışma zamanında sistem yapılandırmasına göre seçilir"
Hangi sistem yapılandırma ayarları varsayılan değeri etkiler?
Yanıtlar:
Windows'ta, uygulamalarınızın çalıştığı sistemdeki varsayılanları bulmak için aşağıdaki komutu kullanabilirsiniz.
java -XX: + PrintFlagsFinal-sürüm | findstr HeapSize
MaxHeapSize
(For -Xmx
) ve InitialHeapSize
for seçeneklerini arayın -Xms
.
Unix / Linux sisteminde şunları yapabilirsiniz:
java -XX: + PrintFlagsFinal-sürüm | grep HeapSize
Elde edilen çıktının bayt cinsinden olduğuna inanıyorum.
InitialHeapSize = 262803264
ve yanılmıyorsam MaxHeapSize = 4206886912
yaklaşık 256 MB ve 4 GB . Bu, her JVM'nin -Xms256m -Xmx4g
seçeneklerle başlatıldığı gibi başladığı anlamına mı geliyor ?
java -XX:+PrintFlagsFinal -version | findstr /R /C:"HeapSize"
-version
uzun "kullanım" metnini bastırıyor stderr
.
Java SE 5 için: Çöp Toplayıcı Ergonomisine Göre [Oracle] :
ilk yığın boyutu:
Makinenin fiziksel belleğinin 1 / 64'ü daha büyük veya makul bir minimum. J2SE 5.0'dan önce, varsayılan ilk yığın boyutu platforma göre değişen makul bir minimumdur. -Xms komut satırı seçeneğini kullanarak bu varsayılanı geçersiz kılabilirsiniz.
maksimum yığın boyutu:
Fiziksel belleğin 1 / 4'ü veya 1 GB'den daha küçük. J2SE 5.0'dan önce, varsayılan maksimum yığın boyutu 64 MB'dı. -Xmx komut satırı seçeneğini kullanarak bu varsayılanı geçersiz kılabilirsiniz.
GÜNCELLEME:
Tom Anderson'ın yorumunda da belirtildiği gibi, yukarıdakiler sunucu sınıfı makineler içindir. Dan 5.0 JavaTM Virtual Machine Ergonomi :
J2SE platformunun 5.0 sürümünde, sunucu sınıfı makine olarak adlandırılan bir makine sınıfı, aşağıdakileri içeren bir makine olarak tanımlanmıştır:
- 2 veya daha fazla fiziksel işlemci
- 2 veya daha fazla Gbyte fiziksel bellek
Windows işletim sisteminin bir sürümünü çalıştıran 32 bit platformlar hariç. Diğer tüm platformlarda varsayılan değerler 1.4.2 sürümü için varsayılan değerlerle aynıdır.
J2SE platformunun 1.4.2 sürümünde varsayılan olarak aşağıdaki seçimler yapılmıştır
- İlk yığın boyutu 4 Mbayt
- maksimum yığın boyutu 64 Mbayt
Java 8 den fazla sürer 1 / 64. sizin için fiziksel bellek Xmssize (Minimum HeapSize) ve daha az 1 / 4th sizin için fiziksel bellek -Xmxsize (Maksimum HeapSize).
Varsayılan Java yığın boyutunu aşağıdakileri yaparak kontrol edebilirsiniz :
In Windows'un :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
In Linux :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Hangi sistem yapılandırma ayarları varsayılan değeri etkiler?
Makinenin fiziksel belleği ve Java sürümü.
Bu, Java 6 güncelleme 18'de değiştirilmiştir .
1 GB'den fazla fiziksel belleğe sahip olduğumuzu varsayarsak (bu günlerde oldukça yaygındır), sunucu vm için her zaman fiziksel belleğinizin 1 / 4'üdür.
greater than or equal to 1 gigabyte of physical memory results in a maximum heap size of 256 megabytes
Ernesto haklı. Yayınladığı bağlantıya göre [1]:
Güncellenmiş İstemci JVM yığın yapılandırması
Müşteri JVM'sinde ...
Varsayılan maksimum yığın boyutu, fiziksel belleğin yarısı 192 megabayt fiziksel belleğe, aksi takdirde fiziksel belleğin dörtte biri 1 gigabayt fiziksel belleğe kadar.
Örneğin, makinenizde 128 megabayt fiziksel bellek varsa, maksimum yığın boyutu 64 megabayttır ve 1 gigabayt fiziksel belleğe eşit veya daha büyükse, maksimum yığın boyutu 256 megabayt ile sonuçlanır.
Programınız gerektirecek kadar nesne oluşturmadıkça, maksimum yığın boyutu JVM tarafından gerçekte kullanılmaz. İlk yığın boyutu olarak adlandırılan çok daha küçük bir miktar, JVM başlatma sırasında tahsis edilir. ...
- ...
- Sunucu JVM yığın yapılandırma ergonomisi artık İstemci ile aynıdır, ancak 32 bit JVM'ler için varsayılan maksimum yığın boyutu 4 gigabayt ve 64 bit JVM'ler için 32 gigabayt , karşılık gelen 32 gigabayttır. 128 gigabaytlık fiziksel bellek boyutuna kadar.
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
IBM JVM için komut aşağıdaki gibidir:
java -verbose:sizes -version
Java 8 için IBM SDK hakkında daha fazla bilgi için: http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html ? lang = tr
En sonunda!
Java 8u191'den itibaren artık seçenekleriniz var:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
öbeği kullanılabilir fiziksel RAM'in yüzdesi olarak boyutlandırmak için kullanılabilir. (ki RAM'in çekirdeğin kullandığından daha az yüklü olmasıyla aynıdır).
Java8 u191 için Sürüm Notlarına bakın fazla bilgi için bkz. için . Seçeneklerin bir Docker başlığı altında belirtildiğini, ancak Docker ortamında veya geleneksel bir ortamda olsanız da geçerli olduklarını unutmayın.
İçin varsayılan değer MaxRAMPercentage
% 25'tir. Bu son derece muhafazakârdır.
Kendi kuralım: Eğer ana makineniz verilen java uygulamasını çalıştırmak için az çok kendini adamışsa, sorun olmadan önemli ölçüde artabilirsiniz. Linux'taysanız, sadece standart cinleri çalıştırıyor ve RAM'i 1 Gb ve üstü bir yerden yüklediyseniz, JVM'nin yığını için% 75'i kullanmaktan çekinmeyin. Yine, bunun RAM yüklü değil, kullanılabilir RAM'in% 75 olduğunu unutmayın. . Geriye kalan, ana bilgisayarda çalışan diğer kullanıcı arazi işlemleri ve JVM'nin ihtiyaç duyduğu diğer bellek türleri (örn. Yığın için). Hep birlikte, bu genellikle kalan% 25'e güzelce uyacaktır. Açıkçası, daha fazla kurulu RAM ile% 75 daha güvenli ve daha güvenli bir bahistir. (Keşke JDK milletinin bir merdiven belirtebileceğiniz bir seçenek uygulamış olmasını dilerim)
MaxRAMPercentage
Seçeneği ayarlamak şöyle görünür:
java -XX:MaxRAMPercentage=75.0 ....
Bu yüzde değerlerinin 'çift' tipte olduğunu ve bu nedenle bunları ondalık nokta ile belirtmeniz gerektiğini unutmayın . "75.0" yerine "75" kullanırsanız biraz garip bir hata alırsınız.
sistem yapılandırmasına bağlı olarak çalışma zamanında varsayılan değer seçilir
Belgeler sayfasına göz atın
Varsayılan Öbek Boyutu
Başlangıç ve maksimum yığın boyutları komut satırında belirtilmedikçe, bunlar makinedeki bellek miktarına göre hesaplanır.
İstemci JVM Varsayılan Başlangıç ve Maksimum Öbek Boyutları:
Varsayılan maksimum yığın boyutu, fiziksel belleğin 192 megabayt (MB) boyutuna kadar, aksi halde fiziksel belleğin dörtte biri 1 gigabayt (GB) boyutuna kadar .
Sunucu JVM Varsayılan Başlangıç ve Maksimum Öbek Boyutları:
32 bit JVM'lerde, 4 GB veya daha fazla fiziksel bellek varsa, varsayılan maksimum yığın boyutu 1 GB'a kadar çıkabilir . 64 bit JVM'lerde, 128 GB veya daha fazla fiziksel bellek varsa, varsayılan maksimum yığın boyutu 32 GB'a kadar çıkabilir
Hangi sistem yapılandırma ayarları varsayılan değeri etkiler?
Başlangıç ve maksimum yığın boyutlarını -Xms (başlangıç yığın boyutu) ve -Xmx (maksimum yığın boyutu). Uygulamanızın ne kadar yığın yığınının iyi çalışması gerektiğini biliyorsanız, -Xms ve -Xmx değerlerini aynı değereayarlayabilirsiniz
Xms
Ve Xmx
Java sanal makinesinin olan bayrak (JVM):
Xms
: initial and minimum
JVMheap size
Format
: -Xmx<size>[g|G|m|M|k|K]
Default Size
:
-server
modu:% 25 boş fiziksel bellek,> = 8 MB ve <= 64 MB-client mode
:% 25 boş fiziksel bellek,> = 8 MB ve <= 16 MBTypical Size
:
-Xms128M
-Xms256M
-Xms512M
Function
/Effect
:
Xms
boyutu bellek ile başlarXmx
: maximum
JVMheap size
Format
: -Xmx<size>[g|G|m|M|k|K]
Default Size
:
<= R27.2
Windows
: 75%
toplam fiziksel belleğe kadar1GB
Linux/Solaris
: 50%
kullanılabilir fiziksel belleğe kadar1GB
>= R27.3
Windows X64
: 75%
toplam fiziksel belleğe kadar2GB
Linux/Solaris X64
: 50%
kullanılabilir fiziksel belleğe kadar2GB
Windows x86
: 75%
toplam fiziksel belleğe kadar1GB
Linux/Solaris X86
: 50%
kullanılabilir fiziksel belleğe kadar1GB
Typical Size
:
-Xmx1g
-Xmx2084M
-Xmx4g
-Xmx6g
-Xmx8g
Function
/ Effect
:
Xmx
boyutta bellek
kullanımına izin verirXmx
, olacakjava.lang.OutOfMemoryError
OutOfMemoryError
?
Xmx
değeri
aş-Xmx4g
ila-Xmx8g
resmi dokümana bakınız: -X Komut Satırı Seçenekleri
Bazı parametreler üretim boyutunu etkiler. Aşağıdaki şema, ayrılmış alan ile yığındaki sanal alan arasındaki farkı göstermektedir. Sanal makinenin başlatılması sırasında, yığın için tüm alan ayrılmıştır. Ayrılan alanın boyutu -Xmx
seçenekle belirtilebilir . -Xms
Parametrenin değeri parametrenin değerinden küçükse -Xmx
, ayrılan alanın tamamı hemen sanal makineye ayrılmaz. Taahhütsüz alan bu şekilde "sanal" olarak etiketlenmiştir. Yığının farklı kısımları (kalıcı nesil, dayanıklı nesil ve genç nesil) sanal alanın sınırına kadar büyüyebilir.
Varsayılan olarak, sanal makine belirli bir aralıktaki her koleksiyondaki canlı nesneler için boş alan oranını korumaya çalışmak amacıyla her koleksiyondaki yığını büyütür veya daraltır. Bu hedef aralık, parametreler tarafından yüzde olarak ayarlanır - XX:MinHeapFreeRatio=<minimum>
ve -XX:MaxHeapFreeRatio=<maximum>
toplam boyut, aşağıda -Xms<min>
ve tarafından sınırlanır -Xmx<max>
.
Parametre Varsayılan Değeri
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
64 bit sistemlerde yığın boyutu parametrelerinin varsayılan değerleri yaklaşık% 30 oranında artırılmıştır. Bu artış, 64 bit sistemdeki daha büyük nesnelerin boyutunu telafi etmek içindir.
Bu parametrelerle, bir nesnedeki boş alan yüzdesi% 40'ın altına düşerse, üretim, neslin izin verilen maksimum boyutuna kadar% 40 boş alanı korumak için genişletilecektir. Benzer şekilde, boş alan% 70'i aşarsa, jenerasyon sözleşmeye tabi tutulacak ve böylece alanın minimum% 70'ine bağlı olarak alanın sadece% 70'i serbest olacaktır.
Büyük sunucu uygulamaları genellikle bu varsayılanlarla iki sorun yaşar. Birincisi yavaş başlangıçtır, çünkü ilk yığın küçüktür ve birçok büyük koleksiyonda yeniden boyutlandırılması gerekir. Daha acil bir sorun, varsayılan maksimum yığın boyutunun çoğu sunucu uygulaması için makul olmayan şekilde küçük olmasıdır. Sunucu uygulamaları için temel kurallar:
Genel olarak, ayırma paralel hale getirilebildiğinden, işlemci sayısını artırdıkça belleği artırın.
Orada tam makale