/ 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
Dekonstruktor i java
Fra : Søren Sømand


Dato : 11-10-03 10:54

Hey NG!
Jeg arbejder på Legos Mindstorm, hvor der jo er meget begrænset med plads.
Jeg har derfor et problem med at finde en måde at nedlægge objekter, da jeg
ikke har adgang til Garbage Collectoren. I C++ vile jeg have lavet en
dekonstruktor, men hvad gør man i Java ?
Mvh.
Søren Søpølse



 
 
Lars M (11-10-2003)
Kommentar
Fra : Lars M


Dato : 11-10-03 11:38


"Søren Sømand" <DetFaaDuIkke@vide.dk> wrote in message
news:bm8k04$1vki$1@news.cybercity.dk...
> Hey NG!
> Jeg arbejder på Legos Mindstorm, hvor der jo er meget begrænset med plads.
> Jeg har derfor et problem med at finde en måde at nedlægge objekter, da
jeg
> ikke har adgang til Garbage Collectoren. I C++ vile jeg have lavet en
> dekonstruktor, men hvad gør man i Java ?
> Mvh.
> Søren Søpølse
>
Der findes INGEN måde at tvangs-nedlægge objekter i java.
Det eneste du kan gøre er at være "flink" ved garbage collectoren, altså :
null-e referencer til objekter som ikke længere er i brug (specielt vigtigt
ved sammensatte datastrukturer).
Du kan også overveje, om det kunne være en hjælp at genbruge objekter
(pooling).

Mvh
Lars




Per Thomsen (11-10-2003)
Kommentar
Fra : Per Thomsen


Dato : 11-10-03 12:41

Lars M wrote:

> "Søren Sømand" <DetFaaDuIkke@vide.dk> wrote in message
> news:bm8k04$1vki$1@news.cybercity.dk...
[snip]
>>ikke har adgang til Garbage Collectoren. I C++ vile jeg have lavet en
>>dekonstruktor, men hvad gør man i Java ?
>>Mvh.
>>Søren Søpølse
>
> Der findes INGEN måde at tvangs-nedlægge objekter i java.
> Det eneste du kan gøre er at være "flink" ved garbage collectoren, altså :
> null-e referencer til objekter som ikke længere er i brug (specielt vigtigt
> ved sammensatte datastrukturer).
> Du kan også overveje, om det kunne være en hjælp at genbruge objekter
> (pooling).
>
> Mvh
> Lars

Mon ikke også man kan få noget ud af at lave finalization metoder på
klasserne og så kalde

   System.runFinalization()
og
   System.gc()

Jeg har en mistanke om at man måske kunne optimere hukommelsesforbruget
vha af at kombinere disse to System metoder med Lars' forslag om at
null'e referencerne.

MVH Per Thomsen,
http://www.pert.dk/


Lars M (11-10-2003)
Kommentar
Fra : Lars M


Dato : 11-10-03 13:16


"Per Thomsen" <pert@pert.dk> wrote in message
news:bm8q8u$99n$1@sunsite.dk...
> Lars M wrote:
>
[snip]
>
> Mon ikke også man kan få noget ud af at lave finalization metoder på
> klasserne og så kalde
>
> System.runFinalization()
> og
> System.gc()
>
> Jeg har en mistanke om at man måske kunne optimere hukommelsesforbruget
> vha af at kombinere disse to System metoder med Lars' forslag om at
> null'e referencerne.
>
> MVH Per Thomsen,
> http://www.pert.dk/
>
Hmm finalize frarådes generelt (bla af suns egne eksperter).
Læs f.eks. her:
http://developer.java.sun.com/developer/TechTips/2000/tt0124.html#tip1

Uddrag:
"So why do developers leap to the wrong conclusion and rely on finalize?
There are two reasons: they are swayed by the analogy to the C++ destructor,
and they often get away with it in the short run. Combine a simple project
with a better-than-average VM implementation, and finalize will appear
almost as reliable as a C++ destructor. Don't be fooled by this temporary
good luck. If you rely on finalize, your code will not scale to larger
projects, and it will not run consistently on different virtual machines. "


Mvh
Lars



Søren Sømand (12-10-2003)
Kommentar
Fra : Søren Sømand


Dato : 12-10-03 09:34

> > Mon ikke også man kan få noget ud af at lave finalization metoder på
> > klasserne og så kalde
> > System.runFinalization()
> > og
> > System.gc()
Som jeg har forstået det, kalder de jo Garbage Collectoren.....som ikke
findes.


>> Det eneste du kan gøre er at være "flink" ved garbage collectoren, altså
:
>> null-e referencer til objekter som ikke længere er i brug (specielt
vigtigt
>> ved sammensatte datastrukturer).
Det ser ud til (ved memorytests) at objekterne bliver liggende, selv om man
fjerner referencen...

Men tak for foreslagene...
Mvh.
Søren



Bertel Lund Hansen (12-10-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 12-10-03 11:18

Søren Sømand skrev:

>Som jeg har forstået det, kalder de jo Garbage Collectoren.....som ikke
>findes.

Den findes, men kan mig bekendt ikke styres - heller ikke med
kald til gc().

>Det ser ud til (ved memorytests) at objekterne bliver liggende, selv om man
>fjerner referencen...

Ja og nej. De forsvinder på et uforudsigeligt tidspunkt. Det er i
hvert fald hvad jeg har fået at vide.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Henrik Stidsen (12-10-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 12-10-03 15:22

Bertel Lund Hansen <nospamius@lundhansen.dk> wrote in
news:leaiovknlkennl547mal0ck0p9ptp6ehab@news.stofanet.dk

>>Det ser ud til (ved memorytests) at objekterne bliver liggende,
>>selv om man fjerner referencen...
>
> Ja og nej. De forsvinder på et uforudsigeligt tidspunkt. Det er
> i hvert fald hvad jeg har fået at vide.

Ja de forsvinder når den virtuelle maskine kører garbage colletoren,
det gør den når den synes eller når den lukkes ned.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Kristian Thy (12-10-2003)
Kommentar
Fra : Kristian Thy


Dato : 12-10-03 16:56

Henrik Stidsen uttered:
> Ja de forsvinder når den virtuelle maskine kører garbage colletoren,
> det gør den når den synes eller når den lukkes ned.

....og efter hvad jeg har fået fortalt, skulle den gerne synes det er
tid til at køre når der er lav memory. Så det burde faktisk ikke være
noget problem med pladsen, når bare man husker at nulle
objektreferencerne.

Søren Sømand bruger vel i øvrigt J2ME? Der burde være nogle mekanismer
til at styre hukommelsesforbruget...

\\kristian
--
Don't look back, something might be gaining on you.

Peter Kirk (13-10-2003)
Kommentar
Fra : Peter Kirk


Dato : 13-10-03 11:24


"Kristian Thy" <thy@it.edu> wrote in message
news:bmbti6$k8e2h$2@ID-157676.news.uni-berlin.de...
> Henrik Stidsen uttered:
> > Ja de forsvinder når den virtuelle maskine kører garbage colletoren,
> > det gør den når den synes eller når den lukkes ned.
>
> ...og efter hvad jeg har fået fortalt, skulle den gerne synes det er
> tid til at køre når der er lav memory. Så det burde faktisk ikke være
> noget problem med pladsen, når bare man husker at nulle
> objektreferencerne.

Jeg er heller ikke sikker på hvad problemet er. Garbage collectoren kører
når den har brug for hukommelsen. Man behøver ikke at sætte referencer til
null, bare objekterne er "out of scope", så er de tilgængelige til garbage
collectoren.

Kunne det være at problemet er at der er så mange objekter stadigvæk i scope
at der ikke er plads til at oprette flere?

Peter



Filip Larsen (13-10-2003)
Kommentar
Fra : Filip Larsen


Dato : 13-10-03 16:55

Peter Kirk skrev

> Jeg er heller ikke sikker på hvad problemet er. Garbage collectoren kører
> når den har brug for hukommelsen. Man behøver ikke at sætte referencer til
> null, bare objekterne er "out of scope", så er de tilgængelige til garbage
> collectoren.

Det med at sætte referencer til null kommer ind i billedet når referencen er
en instans- eller klassevariabel hvis levetid er mindre end levetiden af
instansen eller klassen, eller er en referencer på stakken af metoder der
har lang levetid (såsom GUI- og servertråde). I følgende tænkte eksempel
hvor man initialiserer en server med XML-data vil selve XML dokumentet leve
i hele serverens levetid hvis ikke den blev nullet:

public static void main(String[] args) {
Document config = getXMLConfiguration(...);
setConfiguration(config);
config = null;
enterServerLoop();
}

Du har dog ret i, at kode som ovenstående ikke burde skrive sådan, men
benytte scope's til at begrænse levetiden af referencer.


> Kunne det være at problemet er at der er så mange objekter stadigvæk i
scope
> at der ikke er plads til at oprette flere?

Jeg gætter på, at Søren Sømands kode skal køre på en JVM såsom leJOS der
ikke har en garbage-collector. Hvis man her fx. opretter nye objekter i en
løkke i stedet for at "recycle" dem, så løber man ret hurtigt tør for plads.
Og immutable objekter som String og Integer kan ikke engang genbruges særlig
godt pga. deres store tilstandsrum.


Mvh,
--
Filip Larsen



Filip Larsen (12-10-2003)
Kommentar
Fra : Filip Larsen


Dato : 12-10-03 02:06

Søren Sømand skrev

> Jeg arbejder på Legos Mindstorm, hvor der jo er meget begrænset med plads.
> Jeg har derfor et problem med at finde en måde at nedlægge objekter, da
jeg
> ikke har adgang til Garbage Collectoren. I C++ vile jeg have lavet en
> dekonstruktor, men hvad gør man i Java ?

Hvis du bruger leJOS (http://lejos.sourceforge.net/) så kan du måske gøre
som de har beskrevet i deres tutorial:
http://mp.scholz.bei.t-online.de/lejos/tutorial/essential/utilities/recycling.html.
Jeg vil gætte på, at det (eller nogen lignende) er det bedste man kan gøre
hvis man ingen garbage collecter har.


Mvh,
--
Filip Larsen



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste