Java'da yığın boyutunu artırma


276

8 GB RAM ile bir Windows 2003 sunucusunda (64 bit) çalışıyorum. Yığın belleği maksimumu nasıl artırabilirim? -Xmx1500mYığın boyutunu 1500 Mb'a yükseltmek için bayrağı kullanıyorum . Yığın belleğini fiziksel belleğin% 75'ine çıkarabilir miyim (6 GB Yığın)?


2
Denedin -Xmx6gmi Bu işe yaramadı mı? Ne gözlemledin?
oxbow_lakes

2
Sanırım öbeği artırmayı denedin ama başarısız oldun? 64 bit JVM mi kullanıyorsunuz?
Bart Kiers

Yorum için teşekkürler ama bu çalışmıyor
Sunil

Peki - bunun işe yaramadığını nasıl anlarsınız? JVM başlamıyor mu?
oxbow_lakes

Yanıtlar:


327

32 bit sistemde 4 GB'a kadar yükseltebilirsiniz. 64 bit bir sistemdeyseniz daha yükseğe çıkabilirsiniz. Yanlış seçerseniz endişelenmenize gerek yok, 32 bit sistemde 5g isterseniz java geçersiz bir değerden şikayet edecek ve çıkacaktır.

Diğerlerinin gönderdiği gibi, cmd satırı bayraklarını kullanın - ör.

java -Xmx6g myprogram

Java -X yazarak tam bir liste (veya neredeyse tam bir liste) alabilirsiniz.


16
Benim tecrübem, gerçek yığın boyutu Java'nın 32b VM (32b veya 64b sistemde - burada önemli kısımdır), 2G civarında olduğunu kabul edeceğini kabul etti. Ayrıca, şaşırmış asker önce arama ve bulmadı: stackoverflow.com/questions/1596009/… ve: stackoverflow.com/questions/37335/…
wsorenson

2
ah, elbette haklısın - 32 bit sistemde sadece 2 Gb belleğe hitap edebilirsin.
Steve

Maksimum yığın ve minimum yığın boyutunun aynı olması gerekli midir?
user1747935

1
Hayır. Ancak insanlar genellikle bunu yapar çünkü JVM asla yeniden boyutlandırmak için zaman kaybetmez. Çok önemli olduğundan şüphe, TBH.
Steve

1
@PhilipRego, JVM'nin ele alabileceği sınırlara kadar istediğinizi ayarladınız. -Xmx2G belleğinizi 2G olarak ayarlar (ayrıca -Xms'ye bakın). Bu, ne kadar belleğe ihtiyacınız olduğu hakkında hiçbir şey söylemiyor.
Steve

155

Komut satırı seçeneklerini kullanarak JVM tarafından ayrılan yığın boyutunu artırmak mümkündür Burada 3 seçeneğimiz var

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

Yukarıdaki satırda minimum yığını 16mb'ye ve maksimum yığını 64mb'ye ayarlayabiliriz


28

32 bit JVM'de, teorik olarak ayarlayabileceğiniz en büyük yığın boyutu 4 gb'dir. Daha büyük bir yığın boyutu kullanmak için 64 bit JVM kullanmanız gerekir. Takip etmeyi dene:

java -Xmx6144M -d64

-D64 bayrağı, JVM'ye 64 bit modunda çalışmasını bildirdiği için önemlidir.


Teşekkür ederim patron ama benim sistemimde çalışmıyor eksik başka bir şey var
Sunil

4
"Çalışmıyor" u tanımlayın. Başlamıyor ve size bir hata veriyor mu? Başlıyor, ancak farklı bir yığın boyutu kullanıyor mu?
Kevin

11

Tutulmada JVM tarafından tahsis edilen yığın boyutunu doğrudan arttırmak mümkündür. Tutulma IDE goto

Çalıştır ----> Yapılandırmaları Çalıştır ----> Bağımsız Değişkenler

-Xmx1g girin (Maksimum boyutu Xmx256m veya Xmx1g ...... gibi ayarlamak için kullanılır m -> mb g ---> gb)


3
Sadece eklemek için bir VM argümanı olmalıdır (eclipse size iki seçenek sunar).
Matt Boyle

11

java -d64 -Xms512m -Xmx4g HelloWorld

nerede, -d64: 64 bit JVM'yi etkinleştirir -Xms512m: İlk yığın boyutunu 512 MB olarak ayarlar -Xmx4g: Maksimum yığın boyutunu 4 GB olarak ayarlar (burada java dosya adı: HelloWorld.java)


9

Aşağıdaki gibi JVM parametrelerini -Xms ve -Xmx ileterek Öbek Boyutunu artırabilirsiniz :

Jar Dosyaları için:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Java Dosyaları için:

 java -Xms4096M -Xmx6144M ClassName

Yukarıdaki parametreler InitialHeapSize (-Xms) değerini 4GB (4096 MB) ve MaxHeapSize (-Xmx) değerini 6GB'a (6144 MB) yükseltir .

Ancak, Genç Nesil Yığın Boyutu aynı kalacak ve Eski Nesil Yığın Boyutuna ek HeapSize eklenecektir . To Genç Gen Heap ve Eski Gen Heap boyutunu eşitlemek , kullanım -XX: NewRatio = 1 XX: -UseAdaptiveSizePolicy parametreler.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Eski Gen Yığın Boyutu: Genç Gen HeapSize (İstediğiniz oranı elde etmek için bu oranla oynayabilirsiniz).


7

Yığın belleğini fiziksel belleğin% 75'ine çıkarabilir miyim (6GB Yığın).

Evet yapabilirsin. Aslında, isterseniz fiziksel bellek miktarından daha fazlasına yükseltebilirsiniz.

Bunu yapmanın iyi bir fikir olup olmadığı, sisteminizde başka ne kadar çalıştığına bağlıdır. Özellikle, çalışmakta olan uygulamaların ve hizmetlerin "çalışma kümesi" kullanılabilir fiziksel belleği önemli ölçüde aşarsa, sisteminiz sanal bellek sayfalarını diske ve diskten taşımak için çok zaman harcayarak "thrash" e karşı sorumludur. Net etki, sistemin korkunç derecede yavaşlamasıdır.


Yorumunuz için teşekkürler Ama nasıl artırabilirim.Plz komut verebilir misiniz.
Sunil

-Xmx6000m'yi deneyin. Java'nın 64bit sürümünü kullanıyorsanız çalışması gerekir.
Stephen C

3
Java'nın 64bit sürümünü çalıştırdığınızdan emin misiniz? 64 bit işletim sisteminde mi?
Stephen C

4

Yığın boyutunu 6 GB olarak değiştirmek için lütfen aşağıdaki komutu kullanın

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Sistemimde 8G bellek varsa ve görev yöneticisinden bunun% 70'inin kullanımda olduğunu görebiliyorsam; java yığın boyutuna 6G bellek ayırmak mümkün mü?
17:27 de Reihan_amn

1
@Reihan_amn Evet ve hayır, eğer hafızanızı aşarsanız diskte ve inanılmaz derecede yavaş olan disk belleğine geçilir. Sayfa dosyalarını aşarsanız kötü bir süre içindesiniz.
CodeMonkey

2

Birkaç kişi arasında jvm seçenekleriyle yığın boyutu için belirli cevaplar işaret -Xmsve -Xms. Bu jvm için tek bellek seçenekleri türü olmadığını belirtmek istiyorum. Özellikle yığın akışları alıyorsanız, aşağıdaki gibi ek bir seçenek ekleyerek yığının boyutunu artırmak istersiniz.-Xss8m .

Bu sorun için, jvm seçenekleri gibi bir şeyin -Xms2g -Xmx6g -Xss8m bir bir çözüm olacaktır.

Ben jvm bellek artırmak için google aramalar beni bu çözüm aldı ve çözümleri yüksek miktarda bellek ayırma ile işe yaramadı gibi bu bilgileri paylaşıyorum. Belirli ayarların ne için olduğunu anladıktan sonra, google'ın yığın boyutunu nasıl artırabildiğimi ve eksik parametreyi buldum. :) Umarım bu başkalarına zaman kazandırır, çünkü bana bir ton zaman kazandırdı. :)


2

Bu yalnızca Java'nın 64 bit sürümü ile çalışır. Denetim Masası'na gidin ve Java simgesini tıklayın. Java Denetim Masası'nın küçük penceresinde, Java menü çubuğuna tıklayın ve ardındanview düğmesine tıklayın.

İki Java platformunuz varsa, Java'nın önceki sürümünü devre dışı bırakın, ardından Çalışma zamanı parametreleri metin alanına tıklayın ve -Xmx1024mRAM boyutuna yazın veya daha az yazın. Öbek boyutunu RAM'e eşit artırmayın, aksi takdirde sisteminiz çökecektir.


Yığın boyutunu RAM'e eşit yaparsanız, sistem çökmez. Bunun yerine, sistem çağrı yapmaya başlayacak ve iyi ve yavaşlayacak.
DaveTheMinion

0

Evet. Yapabilirsin.

Yığın belleğinizi fiziksel belleğin% 75'ine (6 GB Yığın) veya daha yükseğe yükseltebilirsiniz.

64bit kullandığınız için yığın boyutunuzu istediğiniz miktara artırabilirsiniz. 32bit kullanıyorsanız 4GB ile sınırlıdır.

$ java -Xms512m -Xmx6144m JavaApplication

Başlangıç ​​yığın boyutunu 512mb ve maksimum yığın boyutunu 6GB olarak ayarlar.

Umarım yardımcı olur.. :)


Bu, birkaç yıl önce yayınlanan en çok oy alan iki cevaba çok benziyor.
Bernhard Barker

0

Eclipse / STS kullanarak benim java kodunda py dosyaları çalışan sorun var, yetersiz jvm yığın bellek nedeniyle PyException alıyorum. Değişiklikleri aşağıda belirtildiği gibi yaptım ve bu sorunu çözebiliyorum. Aşağıda Sistem yapılandırmam var.

resim açıklamasını buraya girin

Ve bunlar benim çalışma alanımda yaptığım değişiklikler ve şimdi mükemmel çalışıyor voila.

resim açıklamasını buraya girin resim açıklamasını buraya girin

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.