/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
*host* java.util.WeakHashMap
Fra : Ulrik Magnusson


Dato : 26-05-03 21:49

Bare lige en advarsel: Denne klasse gemmer kun key som
WeakReference - _ikke_ value. Nu har jeg brugt en weekend
og en aften på at rive mig i håret over at nogle objekter ikke blev
gc'et, og er meget spændt på hvor mange nye bugs der er
introduceret ved mine desperate forsøg på at finde og fjerne
leak'et.

Løsningen blev at bruge nedenstående i stedet:

package weak;

public class WHashMap
extends java.util.WeakHashMap
{
public Object put( Object key, Object value )
{
return super.put( key, new java.lang.ref.WeakReference(value) );

}

public Object get( Object key )
{
Object value = super.get(key);
if( value == null )
{
return null;
}
return ((java.lang.ref.WeakReference)value).get();
}
}

Alternativt kunne man læse dokumentationen, før man
bruger nye klasser..

Ulrik Magnusson


 
 
Ulrik Magnusson (26-05-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 26-05-03 21:53



Ulrik Magnusson wrote:

> Bare lige en advarsel: Denne klasse gemmer kun key som
> WeakReference - _ikke_ value.

og et tooltip: jProbe er rigtig god til at finde den slags fejl - langt
bedre end OptimizeIt IMHO.

Ulrik Magnusson



Brian Matzon (27-05-2003)
Kommentar
Fra : Brian Matzon


Dato : 27-05-03 06:21

Ulrik Magnusson wrote:
> Bare lige en advarsel: Denne klasse gemmer kun key som
> WeakReference - _ikke_ value. Nu har jeg brugt en weekend
> og en aften på at rive mig i håret over at nogle objekter ikke blev
> gc'et, og er meget spændt på hvor mange nye bugs der er
> introduceret ved mine desperate forsøg på at finde og fjerne
> leak'et.
>
> Løsningen blev at bruge nedenstående i stedet:
Nja, er det nu en god ide? - i dette tilfælde kan value forsvinde,
selvom key er der?
Kunde man ikke wrappe Key i et object, der i sin finalize fjerner key/value?

> Alternativt kunne man læse dokumentationen, før man
> bruger nye klasser..
Altid en god ide!
"Implementation note: The value objects in a WeakHashMap are held by
ordinary strong references." Står jo også ret tydeligt :P

/Brian Matzon


Ulrik Magnusson (27-05-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 27-05-03 06:45

Brian Matzon wrote:

> Nja, er det nu en god ide? - i dette tilfælde kan value forsvinde,
> selvom key er der?

Det er der taget højde for - key og value peger på hinanden, så længe
jeg er interesseret i dem, men selve hashmap'en refereres der statisk
til (eller fra meget objekter med et meget langt liv).

> Kunde man ikke wrappe Key i et object, der i sin finalize fjerner key/value?

Jeg er ikke så glad for finalize - er der sket noget på det område siden
jeg sidst læste at den måske/måske ikke bliver kaldt?

> > Alternativt kunne man læse dokumentationen, før man
> > bruger nye klasser..
> Altid en god ide!
> "Implementation note: The value objects in a WeakHashMap are held by
> ordinary strong references." Står jo også ret tydeligt :P

Du kan jo næsten forestille dig hvad jeg tænkte - DOH!

Ulrik Magnusson


Niels Ull Harremoës (27-05-2003)
Kommentar
Fra : Niels Ull Harremoës


Dato : 27-05-03 09:23


"Brian Matzon" <brian@matzon.dk> skrev i en meddelelse
news:3ed2f594$0$76073$edfadb0f@dread11.news.tele.dk...
> Ulrik Magnusson wrote:
> > Bare lige en advarsel: Denne klasse gemmer kun key som
> > WeakReference - _ikke_ value. Nu har jeg brugt en weekend
> > og en aften på at rive mig i håret over at nogle objekter ikke blev
> > gc'et, og er meget spændt på hvor mange nye bugs der er
> > introduceret ved mine desperate forsøg på at finde og fjerne
> > leak'et.
> >
> > Løsningen blev at bruge nedenstående i stedet:
> Nja, er det nu en god ide? - i dette tilfælde kan value forsvinde,
> selvom key er der?
> Kunde man ikke wrappe Key i et object, der i sin finalize fjerner
key/value?

Jeg tror du kan løse problemet via en ReferenceQueue - så kan du blive
notificeret når din Key forsvinder.
Læs evt JavaWorld artiklen her:
http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-java101.html


>
> > Alternativt kunne man læse dokumentationen, før man
> > bruger nye klasser..
> Altid en god ide!
> "Implementation note: The value objects in a WeakHashMap are held by
> ordinary strong references." Står jo også ret tydeligt :P
>
> /Brian Matzon
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste