JVM'yi başlatırken -Xms ve -Xmx parametreleri nelerdir?


1007

Lütfen JVM'lerde Xmsve Xmxparametrelerinin kullanımını açıklayınız . Onlar için varsayılan değerler nelerdir?


2
kullanırken -Xmx128m -Xms64metrafta zirve olabilir 275mRes mem, ama kullanırken -Xmx128m -Xms128metrafında zirve olabilir 550mRES GC ve neler olduğuna göz ... strese Java 8 En şeyi olduğu kullanma mem
Christophe Roussy

Yanıtlar:


1359

Bayrak Xmx, Java sanal makinesi (JVM) için maksimum bellek ayırma havuzunu Xmsbelirtirken, ilk bellek ayırma havuzunu belirtir.

Bu, JVM'nizin Xmsbellek miktarıyla başlatılacağı ve maksimum Xmxbellek kullanabileceği anlamına gelir . Örneğin, aşağıdaki gibi bir JVM'yi başlatmak 256 MB bellekle başlayacak ve işlemin 2048 MB'a kadar bellek kullanmasına izin verecektir:

java -Xms256m -Xmx2048m

Bellek bayrağı, kilobayt, megabayt vb. Gibi farklı boyutlarda da belirtilebilir.

-Xmx1024k
-Xmx512m
-Xmx8g

XmsBayrak varsayılan değerine sahiptir ve Xmxtipik olarak 256 MB'lık bir varsayılan değeri vardır. Bu bayraklar için yaygın bir kullanım, bir java.lang.OutOfMemoryError.

Bu ayarları kullanırken, bu ayarların JVM'nin yığını için olduğunu ve JVM'nin yalnızca öbeğe ayrılan boyuttan daha fazla bellek kullanabileceğini / kullanacağını unutmayın. Gönderen Oracle'ın belgelerinde :

JVM'nin yalnızca yığından daha fazla bellek kullandığını unutmayın. Örneğin, Java yöntemleri, iş parçacığı yığınları ve yerel tanıtıcılar bellekte yığıntan ayrı olarak JVM dahili veri yapılarına ayrılır.


12
Bellek kullanımı Xmx'i aştığında bellek istisnasından jvm elde ederiz.
Pankaj

59
Evet doğru. O, o aşmasına çalıştığında o halde olabilir yeterli belleği boşaltmak için denemek için çöp toplamak. Hala isteği karşılamak için yeterli bellek yoksa ve yığın zaten maksimum boyuta ulaştıysa, bir OutOfMemoryErrorgerçekleşir.
David Conrad

2
ForkJoin çerçevesini kullandığımda bilgisayarım çöküyor çünkü çok fazla bellek kaplıyor. OpenJDK'da varsayılan olarak bellekte sabit bir sınır yoktur?
Christophe De Troyer

6
Sırasında açıklandığı gibi mu java -Xmx 1G 1 GB ya da 2 ^ 30 B demek? , ne kadar bellekle başladığınızı ifade etmenin kesin yolu -Xms256m"256 MiB", "256 MB" değil, çünkü on güçten ziyade ikili güçlerle çalışıyor. Bkz. En.wikipedia.org/wiki/Binary_prefix . Buna ek olarak, fazladan bir Survivor alanı havuzu için bazı kullanılamayan alan Runtime.getRuntime().maxMemory()
ayrıldığından

1
Öbek boyutu ile ilgili yaygın hataların yararlı bir kılavuzu: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
ctrlplusb

314

Komutu çalıştırın java -Xve tüm -Xseçeneklerin bir listesini alacaksınız :

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

-X seçenekleri standart değildir ve önceden bildirilmeksizin değiştirilebilir.

Bu anlamanıza yardımcı olacağını umuyoruz Xms, Xmxen önemli olan yanı sıra birçok başka şeyler. :)


1
Bugün yeni bir komut öğrendim, teşekkürler @RupeshYadav
jumping_monkey

18

IDE'nizde belirtebilirsiniz. Örneğin, Çalıştırma YapılandırmalarıVM bağımsız değişkenlerindeki Eclipse için . Sen girebilirsiniz -Xmx800m -Xms500molarak

Resim açıklamasını buraya girin


OSX'teki RubyMine'de, Yardım menüsü> Özel VM Seçeneklerini Düzenle'de bulunur.
Jon Schneider

8
Bu soruya cevap vermiyor. Soru, nasıl ayarlanacağı değil, ne için oldukları ile ilgilidir.
Kaptan Adam

@Hearen intellij nasıl ayrılır ??

13

Sorunun kendisi yukarıda zaten ele alındı. Varsayılan değerlerin bir kısmını eklemeniz yeterlidir.

Http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html uyarınca

Xmx'in varsayılan değeri platforma ve sistemde kullanılabilir bellek miktarına bağlı olacaktır.


8
Diğer JVM'ler için (JRockit dışında), JVM'nizin varsayılan Xmx / Xms değerlerini belirlemek için bu gönderiye bakın: stackoverflow.com/questions/4667483/…
Ogre Psalm33

3

-Xms başlangıç ​​için başlangıç ​​yığın boyutu, ancak çalışma işlemi sırasında yığın boyutu, kullanıcıların hareketsizliği veya GC yinelemeleri nedeniyle -Xms'den küçük olabilir . Bu, gerekli minimum yığın boyutu değil.

-Xmx maksimum yığın boyutu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.