java.lang.OutOfMemoryError: GC overhead limit aşıldı
(15-20) birkaç metin girdileri her ile çok sayıda (yüzlerce, binlerce) HashMap nesneleri oluşturan bir programda bu hatayı alıyorum. Bu Dizeler tüm toplanan (küçük miktarlar halinde kırılma olmadan) bir veritabanına gönderilmeden önce olmak zorunda.
Göre GüneÅŸ, hata olur "eÄŸer çok fazla zaman harcanan çöp toplama: daha fazla ˜ toplam süre harcanan çöp toplama ve daha az 2% yığın kurtarıldı, bir OutOfMemoryError olacak atılır.".
Görünüşe göre, bir komut satırı için JVM argümanları geçmek için kullanabilir
- Yığın boyutunu artırarak, ile "-Xmx1024m" (veya daha fazla), ya da
- Hata tamamen kontrol devre dışı bırakılması, ile "-XX:-UseGCOverheadLimit".
İlk yaklaşım iyi çalışır, ikinci bir java kadar biter.lang.OutOfMemoryError, bu sefer öbek hakkında.
Yani, soru şu: böyle bir program alternatiftir, özellikle kullanma durumu (yani, birkaç küçük HashMap nesneler) için? Eğer HashMap açık kullanırsam() yöntemi, örneğin, sorun uzağa gider, ancak veri HashMap içinde saklı öyle! :-)
CEVAP
Aslında bellek işlemi sorunsuz çalıştırmak için çalışan sensin. Akla gelen seçenekler:
- Daha fazla bellek bahsettiÄŸiniz gibi,
-Xmx512m
gibi arasında bir şeyler denemek belirtin HashMap
mümkünse aynı anda işlemek için nesneler daha küçük gruplar ile çalışmak- Eğer yinelenen dizeleri bir sürü varsa,
HashMap
içine koyarak önce onlarıString.intern()
kullanın - Dava için ayarlamak için
HashMap(int initialCapacity, float loadFactor)
oluşturucu kullanın
java.lang.OutOfMemoryError: GC overhea...
Ä°le " uÄŸraÅŸan;java.lang.OutOfMemor...
Nasıl başa "java.lang.OutOfMemory...
java.lang.OutOfMemoryError: VM bütçemi...
&; java".lang.OutOfMemoryError: PermGe...