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

  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • kourtneyannmakeup

    kourtneyannm

    19 ŞUBAT 2012
  • TouchePro

    TouchePro

    27 EYLÜL 2007