SORU
15 AĞUSTOS 2009, CUMARTESİ


Java Standart bellek sızıntısı tuzakları API

Ne sınıflar Java Standart API (belli değil) yanlış bir şekilde kullanıldığında, bellek sızıntıları neden olabilir? Ve nasıl bu bellek sızıntıları önlenmiş/tamir edilebilir mi?

Örnek:ObjectInputStream ObjectOutputStream referanslar yerine kopyalarını (ve böylece döngüsel başvurular ile anlaşma) olarak aynı nesnenin sonraki olaylar göndermek için gördükleri tüm nesneler için başvurular devam et. Bu, bu tür bir akım süresiz (bu ağ üzerinden iletişim kurmak için kullanırken örneğin) açık tutmak, bellek sızıntısına neden oluyor.

Düzeltme:() Ara reset üst düzey her nesne sonra. düzenli olarak ya

CEVAP
15 AĞUSTOS 2009, CUMARTESİ


Büyük bir Java dizeleri dizeleri almak özgün dize anlamına gelir.

Örnek: 3000 karakter bir kitapta okudum ve 12 karakterlik bir dize, arayan (aynı JVM içinde) geri almak. Doğrudan orijinal dize bir başvuru yok olsa bile, o 12 karakter dizesi hala bellekte 3000 karakter kullanıyor.

Ve sonra bir sürü mesaj almak ayrıştırma sistemleri için, bu gerçek bir sorun olabilir.

Bunu önlemek için birkaç yolu vardır:

String sub = new String(str.substring(6,12));

ya

String sub = str.substring(6,12).intern();

İlk daha net. İkinci PermGen space kullandığın için diğer etkileri vardır. Gereksiz senin VM yeterince vermezseniz tükendi.

Bu küçük dizeleri almak ve sonra da özgün dize atmak ancak bu kadar ilgili ve bu çok yapıyorsun unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • graham025

    graham025

    25 NİSAN 2006
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • TheRightTire

    TheRightTire

    14 EKİM 2009