Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 24728|Yanıt: 1

[Kaynak] 2097152KB nesne yığını için yeterli alan ayıramadım

[Bağlantıyı kopyala]
Yayınlandı 24.07.2017 10:43:36 | | | |
Hata: 2097152KB nesne yığını için yeterli alan ayıramadım

Activemq'yu başlattım ve hata bildirdim, bu çok fazla tahsis nedeniyle oldu, bu yüzden MQTT bellek tahsis ederken, sunucu bellek boyutu (serbest -g kullanın) ve JDK'nın bellek boyutunu destekleyip desteklemediği birleştirilerek belirlenmeli.

JVM parametre ayarları

Ana parametreler:
-Xms: Başlangıç bellek boyutu
-Xmx: Maksimum bellek boyutu
-Xmn: Genç nesil büyüklüğü

Java -Xmx2047M -version komutunu kullanarak bunun uyumlu olup olmadığını kontrol edin:


Çözüm:

Başlat - > Kontrol Paneli - > Sistem - > Gelişmiş Ayarlar - > Ortam Değişkenleri - > Sistem Değişkenleri

Yeni Değişken:
Değişken Adı: _JAVA_OPTIONS   
Değişken değeri: -Xmx1G






Önceki:MySQL, boş kayıt sayısı olmayan bir tabloyu sorgular
Önümüzdeki:Java'nın sanal makinesi JVM'nin sunucusu ile istemcisi arasındaki fark
 Ev sahibi| Yayınlandı 24.07.2017 10:45:37 |
Son zamanlarda Java için bir program üzerinde çalışıyorum. Başlangıçta, Java'nın bellek yönetimini hep sevmişimdir, hafıza tahsis etmekten endişelenmenize gerek yok, sadece tahsis edin, çöp toplayıcı belleği sizin için geri alacak. Şimdi program büyük miktarda veriyle geliştirildi ve hız için tüm bilgileri hafızaya yükleyeceğim, böylece hızlı yanıt sağlanacak. Hâlâ kendi veri miktarımı tekrar tekrar sayıyorum, bu da başlangıçta yeterli olmalı (makinemde 4G bellek var, ama Windows 3.5G'yi tanıyor ama mevcut veri hacmimle karşılaştırıldığında sorun yaşamalı).

Beklenmedik şekilde, ilk deneyin programı birkaç saat çalıştı ve bir Hafıza Dışı İstisna ile karşılaştı. Kendi VM ayarlarıma baktığımda -Xms512M -Xmx1024M ayarlarını ayarladım. Düşünmeden doğrudan -Xms512M -Xmx2048M olarak değiştirdim ve sonuçta nesne yığını için yeterli alan ayıramadım. Program kalkmıyor. Ancak o zaman orijinal maksimum hafızanın hâlâ bir sınırı olduğunu fark ettim. İnternette arama yaptım ve bu konuyu ele alan birçok makale buldum. Son olarak, BEA'nın DEV2DEV forumunda en faydalı makaleyi buldum

Burada moderatör YuLimin testi yaptı ve sonuca vardı:

Şirket JVM sürümü Maksimum bellek (mega) istemci Maksimum bellek (mega) sunucu

SUN 1.5.x 1492 1520

SUN 1.5.5(Linux) 2634 2660

PAZAR 1.4.2 1564 1564

SUN 1.4.2(Linux) 1900 1260

IBM 1.4.2(Linux) 2047 N/A

BEA JRockit 1.5 (U3) 1909 1902

Şu anda JDK1.6.0_05 kullanıyorum, test ettim. İstemci durumunda en büyük sorun, JDK'nın -Server parametresini tanımaması ve sunucu durumunu test edememesi. Tahminler de yaklaşık aynı.

PAZAR 1.6.0 1442 Yayın

Java'da büyük bellek kullanmak imkansız görünüyor. Genel olarak deyim, hafıza çok büyükse çöp toplama süresi uzun olur. Bu da anlaşılır, genellikle bellek yeterli olmadığında toplanır, tarama 2G bellek elbette 1G'den çok daha yavaştır ve daha fazla bellek nesnesi vardır, tahmini ilişki katlanarak artar.

Aşağıda YuLimin'in test yöntemleri ve test kayıtları eklenmiş olarak yer almaktadır.

Test yöntemi: Komut satırında test etmek için java -XmxXXXXM -sürüm komutunu kullanın ve ardından XXXX'in değerini kademeli olarak artırın; normal çalışıyorsa belirtilen bellek boyutu kullanılabilir oluraksi takdirde bir hata mesajı yazılır.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com