Ben ısmarlama tel protokolü kullanılarak TCP üzerinden gönderilen iletileri işlemek için bir Codec yazıyorum. Kod çözme işlemi sırasında bir dizi String
s, BigDecimal
s ve tarihleri oluşturuyorum. istemci-sunucu erişim desenler istemci isteği için ve sonra ben Dolayısıyla vbString
s, BigDecimal
s yinelenen çok sayıda sonuçlanır tepki mesajları binlerce,PermGen alanını mı yoksa kendi dahili yöntem mi kullanıyorsunuz?
deşifre için yaygın olduğu anlamına Nesnelerin her sınıfını tutmamı sağlayan bir InternPool<T>
sınıfı oluşturduk. Dahili olarak, havuz bir WeakHashMap<T, WeakReference<T>>
kullanır.
InternPool<BigDecimal> pool = new InternPool<BigDecimal>();
...
// Read BigDecimal from in buffer and then intern.
BigDecimal quantity = pool.intern(readBigDecimal(in));
Benim soru: Örneğin: Ben BigDecimal
için InternPool
kullanarak ama am Ben de inanıyorum ki, String
yerineString
'ın intern()
yöntemi için kullanmaktan düşünmelisiniz PermGen boşluk kullanır? PermGen alanı kullanmanın avantajı nedir? Zaten böyle bir InternPool
sınıf varsa
Kts: Byte [] 'ı BigDecimal ile eşleştireceksem sorun şu ki, bu bilgi havuzunun oluşturduğu/BigDecimal'i döndürdüğü zaman, byte [] öğesinden herhangi biriyle başvurmayacaktır. Bayt [], alttaki WeakHashMap'teki anahtar olduğunu varsayarak, girdinin kullanımdaki ilgili BigDecimal'e rağmen kaldırılmasına neden olur. – Adamski
"WeakReference" buna uygun mu, yoksa bir "SoftReference" kullanıyor muydunuz? GC, her ikisi için farklı davranır ve bu bir çeşit önbellek oluşturmaya çalıştığınız gibi geliyor; zayıf referanslar bu amaç için iyi bir kullanım değildir. Bazı nedenlerden dolayı cevabımı burada görebilirsiniz: http://stackoverflow.com/questions/2861410/weakhashmap-iteration-and-garbage-collection/2862174#2862174 –
@Adamski Yalnızca bir BigRecence ile bir ReferenceQueue kullanırdım. BigDecimal bir kez basıldıktan sonra haritadan 'bayt []' ı kaldır. (Muhtemelen bir BiMap'e ihtiyaç var).Bu, bellek/gc çalışma zamanı ve yürütme süresinden tasarruf eden gereksiz BigDecimal nesnelerinin oluşturulmasını ortadan kaldırabilir (yalnızca bir kez oluşturmalıdır). – KitsuneYMG