SORU
27 Ocak 2010, ÇARŞAMBA


Neden ekleme "" bir Dize için bellek kaydetmek?

İçinde çok fazla veri ile bir değişken kullandım, ki String data. Aşağıdaki şekilde bu dize küçük bir kısmını kullanmak istedim:

this.smallpart = data.substring(12,18);

Hata ayıklama (bellek görüntüleyici ile) birkaç saat sonra nesneleri alan smallpart sadece alt alan olsa da data, tüm verileri hatırladı öğrendim.

Kodu değiştirdim:

this.smallpart = data.substring(12,18) ""; 

..sorun çözüldü! Şimdi başvurumu şimdi çok az bellek kullanır!

Bu nasıl mümkün olabilir? Biri bunu açıklayabilir mi? Bu bence.smallpart veri doğru başvuran tuttu, ama neden?

GÜNCELLEME: Ne kadar büyük bir Dize sonra temizleyebilir miyim? Veri = new String(veriler.alt(0,100)) şey ne?

CEVAP
27 Ocak 2010, ÇARŞAMBA


Bunun için aşağıdakileri yapın:

data.substring(x, y)   ""

(küçük) yeni bir String nesnesi oluşturur ve uzak Dize dize tarafından oluşturulan başvuru atar(), böylece bu çöp toplama sağlar.

Anlamak için önemli şey substring() üzerine bir pencere verirmevcutString - ya da daha doğrusu, karakter dizisi özgün Dize yatan. Bu yüzden ilk Dizesi aynı bellek tüketir. Bu bir dize ve özgün Dize elden öğrendiğini olarak almak isterseniz bazı durumlarda avantajlı, ama sorunlu olabilir.

Daha fazla bilgi için İLGİLENİYORUZ Dize kaynağı substring() method bir göz atın.

Ek soru, dize yeni bir Dize hafıza kullanımını azaltır inşa cevaplamak İçin . EDİT: ^em>sağladıözgün Dize için başvurular, sen bin.

NOT (Ocak 2013). Yukarıdaki davranış in Java 7u6 değişti. Kolay desen artık kullanılmamaktadır ve substring() beklediğiniz gibi çalışır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • CruzerLite

    CruzerLite

    1 EKİM 2011