JVM için maksimum bellek kullanımı nasıl ayarlanır?


Yanıtlar:


95

argümanları kullanın -Xms<memory> -Xmx<memory>. Sırasıyla Megs ve Gigs baytlarını belirtmek için sayılardan sonra Mveya kullanın G. -Xmsminimum ve -Xmxmaksimumları gösterir.


1
MaxPermSize'a da bakmak isteyebilirsiniz.
urmalp

89
JVM hafızasını soruyor. Söylediğin şey yığın boyutudur. İkisi de farklı
vsingh

8
Diğer yorumların bahsettiklerini yeniden yinelemek için, Xms ve Xmx yalnızca yığını yapılandırır. Bu değişkenleri yapılandırmanın yığın olmayan alan üzerinde dolaylı bir etkisi olmasına rağmen, soruyu soran kişi toplam bellek kullanımını (yığın + yığın olmayan) yapılandırmanın bir yolu olup olmadığını belirlemeye çalışıyor
murungu

2
uhu. bu yüzden ayarladım -Xmx524Mve işlem 1.2 GB RAM alıyor. (?)
phil294

7
Bu doğru yanıt değildir, -Xms ve -Xmx seçenekleri toplam bellek ayırmayı değil, yalnızca jvm yığın boyutunu düzenler.
Peter De Winter

31

Bellek sızıntısı konusunda endişelenmenize gerek yok (çok nadirdir). Yığının kontrolden çıkmasını sağlayabileceğiniz tek zaman sonsuz (veya gerçekten derin) özyinelemedir.

Bu sadece yığın. Üzgünüm, ilk başta sorunuzu tam olarak okumadım.

JVM'yi aşağıdaki komut satırı bağımsız değişkeniyle çalıştırmanız gerekir.

-Xmx<ammount of memory>

Misal:

-Xmx1024m

Bu, JVM için maksimum 1GB belleğe izin verecektir.


1
Yani bu konuya göre doğru değildir, sen yığın dışında sızıntı birden çok yolu vardır stackoverflow.com/questions/1475290/...
erotsppa

Haklısın, yığınla ilgili olmayan bellek sorunlarına sahip olmanın birçok yolu var. Ancak, çok yaygın değiller.
jjnguy

9
Yığın olmayan bellek boyutunu kontrol edemeyeceğinizden oldukça eminsiniz, değil mi?
matt b

Üzerinden kontrol edebileceğinizden oldukça eminim -XX:MaxDirectMemorySize. Emin olmak için yoğun bir şekilde profil oluşturduğumdan değil ama yine de;)
alexandergunnarson

2
@alexandergunnarson MaxDirectMemorySizeYalnızca NIO arabelleklerini etkiler. Diğer tüm yerel bellek türleri JVM tarafından kullanılır.
Christopher Schultz

16

Jvm için belleği sınırlamak istiyorsanız (yığın boyutu değil) ulimit -v

Jvm ve yığın bellek arasındaki fark hakkında bir fikir edinmek için, bu mükemmel makaleye bakın http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html


8
ulimitbir Linux komut? Hızlı bir Google araması yaptım ulimitve JVM ile arasında herhangi bir ilişki görmedim . Y
Sam


11

Yukarıdaki cevap biraz doğrudur, bir java işleminin ne kadar yerel bellek ayırdığını incelikle kontrol edemezsiniz. Uygulamanızın ne yaptığına bağlıdır.

Bununla birlikte, platforma bağlı olarak, bir java veya başka bir işlemin boyutunu sınırlamak için bazı mekanizmalar kullanabilirsiniz, örneğin, ulimit.

Bu sınıra ulaşırsa, sorunsuz bir şekilde başarısız olmasını beklemeyin. Yerel bellek ayırma hataları, java yığınındaki ayırma hatalarından çok daha zordur. Uygulamanın çökme ihtimali oldukça yüksektir, ancak sistem için size uygun olabilecek işlem boyutunu düşük tutmanın sistem için ne kadar kritik olduğuna bağlı olarak.


1

NativeHeap -XX artırılabilir: MaxDirectMemorySize = 256M (varsayılan 128'dir)

Ben hiç kullanmadım. Belki onu faydalı bulursun.


1
Operatörün bunu istediğinden şüpheliyim: java'dan C / C ++ koduna çağrı yaptığınızda yerel bellek kullanılır.
om-nom-nom

6
yerel bellek, arabellekleri doğrudan belleğe ayırırsanız, nio çağrıları yaparken de kullanılır. (... ve sınıf yükleyiciler ve iş parçacığı bilgileri ....)
stu
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.