/ 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
Svage referencer og strings
Fra : Henry Vest


Dato : 27-04-01 22:08

Følgende kode

String s = new String("hej");
WeakReference w = new WeakReference(s);
s = null;
System.out.println(w.get());
System.gc();
System.out.println(w.get());

giver outputtet "hej" og "null" som forventet. Men erstatter jeg første
linie med
String s = "hej";
får jeg outputtet "hej" og "hej". Nogen der kan forklare det? Har det
noget at gøre med JVM's string pool?

PS: Ja, jeg ved godt System.gc() ikke /tvinger/ garbage collection, kun
opfordrer JVM til at udføre garbage collection.



 
 
Ulrik Magnusson (28-04-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 28-04-01 00:11

Henry Vest wrote:

> Følgende kode
> String s = new String("hej");
> WeakReference w = new WeakReference(s);
> s = null;
> System.out.println(w.get());
> System.gc();
> System.out.println(w.get());
> giver outputtet "hej" og "null" som forventet. Men erstatter jeg første
> linie med
> String s = "hej";
> får jeg outputtet "hej" og "hej". Nogen der kan forklare det? Har det
> noget at gøre med JVM's string pool?

Det er lidt relateret til intern() metoden på String. Alle strengkonstanter

"interneres", så ovenstående med "hej" i stedet for new String("hej")
svarer til:

String s = (new String("hej")).intern();

intern() lagrer så referencen i en tabel og nu kan den ikke
blive garbagecollect'et.

Ulrik Magnusson

--
What the world needs now is programs that WORK, not ones that don't
work, but don't work 5% faster.
Roedy Green
Visit my home page: http://www.geocities.com/ulrikm



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

Månedens bedste
Årets bedste
Sidste års bedste