Yanıtlar:
argümanları kullanın -Xms<memory>
-Xmx<memory>
. Sırasıyla Megs ve Gigs baytlarını belirtmek için sayılardan sonra M
veya kullanın G
. -Xms
minimum ve -Xmx
maksimumları gösterir.
-Xmx524M
ve işlem 1.2 GB RAM alıyor. (?)
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.
-XX:MaxDirectMemorySize
. Emin olmak için yoğun bir şekilde profil oluşturduğumdan değil ama yine de;)
MaxDirectMemorySize
Yalnızca NIO arabelleklerini etkiler. Diğer tüm yerel bellek türleri JVM tarafından kullanılır.
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
ulimit
bir Linux komut? Hızlı bir Google araması yaptım ulimit
ve JVM ile arasında herhangi bir ilişki görmedim . Y
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.
NativeHeap -XX artırılabilir: MaxDirectMemorySize = 256M (varsayılan 128'dir)
Ben hiç kullanmadım. Belki onu faydalı bulursun.