SORU
1 EYLÜL 2008, PAZARTESİ


Nasıl başa "java.lang.OutOfMemoryError: Java heap space" hata (64 MB yığın boyutu)

İstemci tarafı yazıyorumSalıncakuygulama (grafik font tasarımcısı)Java 5. Son zamanlarda, bellek kullanımı konusunda muhafazakar değilim çünkü java.lang.OutOfMemoryError: Java heap space hata içine çalıştırıyorum. Kullanıcı dosyaları sınırsız sayıda açabilirsiniz ve programın anısına açılan nesneleri tutar. Hızlı bir araştırma sonrasında Ergonomics in the 5.0 Java Virtual Machine ve diğerleri Windows 64MB max varsayılan olarak JVM yığın boyutu makine derken buldum.

Bu durum göz önüne alındığında, nasıl bu kısıtlama ile mi ilgileneyim?

Artış olabilirmax yığın boyutukullanarakkomut satırıjava için bir seçenek, ama kullanılabilir RAM bulmaktan ve bazı program başlatma ya da senaryo yazmak gerekir. Ayrıca, bazı sonlu max artırma sonuçta sorun kurtulmak değil.

Benim kod bazı nesneler sistem sık sık dosya için ısrar neresinde olabilir (veritabanı kullanılarak aynı şeydir) bellekte yer açmak için. İşe yarayabilir, ama muhtemelen bir sürü de iş var.

Yukarıdaki fikirler ya da bazı alternatifleri ayrıntıları için benim gibi nokta yoksaotomatik sanal bellek, yığın boyutu uzanan dinamikbu harika olacak.

CEVAP
1 EYLÜL 2008, PAZARTESİ


Sonuçta her zaman öbek sınırlı max çalışan ne olursa olsun kullanmak zorunda. Windows 32 bit bu 2 GB (işlem başına bellek özellikle yığın ama toplam tutar). Sadece olur Java olur için varsayılan daha küçük (muhtemelen böylece programcı olamaz oluşturma programları var kaçak bellek ayırma olmadan çalışan bu sorun ve inceleyin tam olarak ne yapıyorlar).

Bu orada verilen ya ne gerek belirlemek için ya da bellek miktarını azaltmak için alabilir çeşitli yaklaşımlar çok kullanıyorsunuz. Java veya C gibi çöp toplama dil ile ortak bir hata# artık kullanan nesnelere başvurular etrafında tutmak için, ya da onları yerine. yeniden yapabilirsen eğer çok sayıda nesne ayrılırken Nesne için bir başvuru olduğu sürece çöp toplayıcı onları silmez olarak yığın alanı kullanmaya devam edecekler.

Bu durumda kullanabileceğiniz bir Java bellek profiler belirlemek için hangi metodu program ayrılırken çok sayıda nesne ve daha sonra belirlemek için bir yolu var emin olmak için onlar artık başvuru, ya da onları ayırmak. Eskiden var olan bir seçenek "" http://www.khelekore.org/jmp/. hafıza yerinin.

Eğer düşündüğünüz sen ayrılırken bu nesneler için bir sebep ve ihtiyacınız için etrafında tutmak başvuruları (bağlı olarak ne yapıyorsun bu olabilir durumda), sadece ihtiyaç artırmak için maksimum öbek boyutu başlattığınızda program. Bellek profil oluşturma ve nesneleri tahsis alıyorsanız nasıl anlıyorsun ancak, bir kez ne kadar ihtiyacınız hakkında daha iyi bir fikir olmalıdır.

Eğer program bellek (belki giriş boyutuna bağlı olarak) bazı sınırlı miktarda çalışacağını garanti verirseniz ... genel olarak her zaman bu sorun haline çalışacaktır. Sadece bu tüm tükettikten sonra nesneleri disk vb önbelleğe alma içine bakmak gerekir. Bu noktada çok iyi "bellek" bir şey için ve algoritmalar veya bellek ayırma alışkanlıkları geliştirerek bu bir çözüm olamaz. Xgb ihtiyacım var demek bir sebebi var, değil mi Genellikle bu sadece genellikle algoritma büyük veri setleri üzerinde çalışma durumunda (bir veritabanı veya bazı bilimsel analiz programı gibi) olacak ve önbellek ve bellek gibi teknikleri IO yararlı olmak eşlenen o zaman.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Peyton

    Peyton

    28 Aralık 2008
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006