/ 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
Hukommelsesoptimering
Fra : Morten Nørgaard


Dato : 13-08-03 14:59

Hej,

min applikation starter op med at fylde 42 MB i hukommelsen - fra
starten af. Det forekommer mig som unødigt meget, og jeg prøver at finde et
ståsted til at begynde på noget hukommelsesoptimering, i hvilken forbindelse
jeg ærbødigst spørger til råd.
Jeg har hentet en evalueringsversion af JProbe, der fortæller mig at
javax.swing.jmenuitem og javax.swing.button står for henved 52% af
hukommelsesforbruget. Dette skal naturligvis ses i lyset af deres
tilknyttede eventhandlers. Skal dette ses som et tegn på at jeg bør
strukturere min kode anderledes mht. event-håndtering - og hvordan kan jeg
evt. gøre det bedre?
Jeg er nok klar over at det er meget generelt at spørge om, hvorfor jeg
da også udbeder mig generelle råd mht. hukommelsesoptimering og håber at i
andre har nogle gode erfaringer til mig, specielt mht. hvordan man
lokaliserer hukommelsesslugerne.

På forhånd tak for svar,

Mvh.

Morten




 
 
Daniel Jacobsen (13-08-2003)
Kommentar
Fra : Daniel Jacobsen


Dato : 13-08-03 20:52

Groft sagt fylder objekter ikke mere end deres variable og konstante lagt
sammen, og hvis du skal have et enkelt objekt op og fylde bare 1 MB, skal
det være seriøst stort og 42 MB lyder derfor af meget. Er du sikker på at
JVM ikke tæller med i de 42 MB ?

// Daniel J.



Morten Nørgaard (14-08-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 14-08-03 07:58

Hej,

> Groft sagt fylder objekter ikke mere end deres variable og konstante lagt
> sammen, og hvis du skal have et enkelt objekt op og fylde bare 1 MB, skal
> det være seriøst stort og 42 MB lyder derfor af meget. Er du sikker på at
> JVM ikke tæller med i de 42 MB ?

Det gør den formentlig - jeg ser efter "java.exe" i task-manager'en, og det
er den der fylder de 42. Hvor meget fylder JVM'en, groft sagt?

/Morten



M_abs (14-08-2003)
Kommentar
Fra : M_abs


Dato : 14-08-03 14:20

"Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> skrev i en
meddelelse news:bhfbpq$o4l$1@news.net.uni-c.dk...
> Hej,
>
> > Groft sagt fylder objekter ikke mere end deres variable og konstante
lagt
> > sammen, og hvis du skal have et enkelt objekt op og fylde bare 1 MB,
skal
> > det være seriøst stort og 42 MB lyder derfor af meget. Er du sikker på
at
> > JVM ikke tæller med i de 42 MB ?
>
> Det gør den formentlig - jeg ser efter "java.exe" i task-manager'en, og
det
> er den der fylder de 42. Hvor meget fylder JVM'en, groft sagt?

Du kunne jo prøve flg. kode for at se hvor meget ram der bliver brugt på
ingenting, min bruger 4.3 mb

class Tester

{

public static void main(String x[]) throws Exception

{

Thread.sleep(1000000);

}

}




Morten Nørgaard (15-08-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 15-08-03 08:00


> Du kunne jo prøve flg. kode for at se hvor meget ram der bliver brugt på
> ingenting, min bruger 4.3 mb
>

Hm.. Min bruger 5,7. Trækker jeg det fra mine 42 MB, bliver det rundt regnet
36MB som min app starter op med at bruge... Det er ikke så godt. Jeg bruger
en del JAI billedbehandling, kanske det kan have noget at sige. Men når jeg
ser på, hvilke objekter der tager plads, bruger javax.swing.JMenuItem noget
nær 30% af de 42MB. Der _burde_ være noget her der kan optimeres - for det
stinker af en memory-leak, synes jeg. Jeg må vist til at kommentere ud og
køre hele møllen igennem...

/Morten




Daniel Jacobsen (15-08-2003)
Kommentar
Fra : Daniel Jacobsen


Dato : 15-08-03 08:26

JVM fylder langt mere en du tror: 20-30 MB ca. - det afhænger f.eks. meget
af hvor meget Swing du aktiverer; selvfølgelig kan JVM fylde mindre end 20,
hvis f.eks. du kører en mere simpelt konsol-applikation.
Hvis du vil se hvor mange af de 42 MB din egen kode bruger kan du bruge
følgende kode fra din applikation:

Runtime r = Runtime.getRuntime();
long total = r.totalMemory()/1024;
long free = r.freeMemory()/1024;
System.out.println("Total: "+total+" kB");
System.out.println("Free: "+free+" kB");
System.out.println("Used: "+(total-free)+" kB");



Morten Nørgaard (15-08-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 15-08-03 13:44

> JVM fylder langt mere en du tror: 20-30 MB ca. - det afhænger f.eks. meget
> af hvor meget Swing du aktiverer; selvfølgelig kan JVM fylde mindre end
20,
> hvis f.eks. du kører en mere simpelt konsol-applikation.
> Hvis du vil se hvor mange af de 42 MB din egen kode bruger kan du bruge
> følgende kode fra din applikation:
>
> Runtime r = Runtime.getRuntime();
> long total = r.totalMemory()/1024;
> long free = r.freeMemory()/1024;
> System.out.println("Total: "+total+" kB");
> System.out.println("Free: "+free+" kB");
> System.out.println("Used: "+(total-free)+" kB");

Jeg prøvede, og resultatet var en anelse skuffende. Prøv gerne nedenstående
klasse i din/jeres eget miljø, og bekræft venligst at det sluger ca. 20MB
systemhukommelse - det gør det i hvert fald hos mig.



import javax.swing.JFrame;

public class mainViewer2
{
public mainViewer2()
{
JFrame frame = new spssImageViewer2();
frame.show();
Runtime r = Runtime.getRuntime();
long total = r.totalMemory()/1024;
long free = r.freeMemory()/1024;
System.out.println("Total: "+total+" kB");
System.out.println("Free: "+free+" kB");
System.out.println("Used: "+(total-free)+" kB");
}

// where it all begins
public static void main(String[] args)
{
new mainViewer2();
}

public class spssImageViewer2 extends JFrame
{ public spssImageViewer2() {} }
}




Torben Brandt (18-08-2003)
Kommentar
Fra : Torben Brandt


Dato : 18-08-03 17:21

Morten Nørgaard wrote:
> Jeg prøvede, og resultatet var en anelse skuffende. Prøv gerne nedenstående
> klasse i din/jeres eget miljø, og bekræft venligst at det sluger ca. 20MB
> systemhukommelse - det gør det i hvert fald hos mig.

<snip : lidt kode>

På en Win98-maskine, kompileret i DOS med javac fra Sun Java, version
1.3. Kørt ligeledes fra DOS giver det:
Total: 1984 kB
Free: 1449 kB
Used: 535 kB

/Torben


Morten K. Hansen (18-08-2003)
Kommentar
Fra : Morten K. Hansen


Dato : 18-08-03 21:54

Den 15-08-2003 14:43, skrev Morten Nørgaard:

>>JVM fylder langt mere en du tror: 20-30 MB ca. - det afhænger f.eks. meget
>>af hvor meget Swing du aktiverer; selvfølgelig kan JVM fylde mindre end
>
> 20,
>
>>hvis f.eks. du kører en mere simpelt konsol-applikation.
>>Hvis du vil se hvor mange af de 42 MB din egen kode bruger kan du bruge
>>følgende kode fra din applikation:
>>
>>Runtime r = Runtime.getRuntime();
>>long total = r.totalMemory()/1024;
>>long free = r.freeMemory()/1024;
>>System.out.println("Total: "+total+" kB");
>>System.out.println("Free: "+free+" kB");
>>System.out.println("Used: "+(total-free)+" kB");
>
>
> Jeg prøvede, og resultatet var en anelse skuffende. Prøv gerne nedenstående
> klasse i din/jeres eget miljø, og bekræft venligst at det sluger ca. 20MB
> systemhukommelse - det gør det i hvert fald hos mig.
>
Win2K kompileret m. Java 1.4.0_etellerandet
Total: 1984 kB
Free: 1290 kB
Used: 694 kB

Så det kan desværre ikke konfirmeres
--
Mvh / Regards
Morten K. Hansen   http://hansen-winkel.dk/
Replying by mail? Change 'spam' to my first name.


Anders K. Olsen (14-08-2003)
Kommentar
Fra : Anders K. Olsen


Dato : 14-08-03 19:00

"Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> wrote in
message news:bhdg2n$5n6$1@news.net.uni-c.dk...
> Hej,
>
> min applikation starter op med at fylde 42 MB i hukommelsen - fra
> starten af. Det forekommer mig som unødigt meget, og jeg prøver at finde
et
> ståsted til at begynde på noget hukommelsesoptimering, i hvilken
forbindelse
> jeg ærbødigst spørger til råd.

Du kan styre hvor meget plads Java må bruge vha. -Xms og -Xmx options. Du
kan også styre hvilken garbage collector java skal bruge vha. -X options.
Prøv at skrive java -X så kan du se en forklaring på dem der er tilrådighed
i din version af den virtuelle maskine.

Fra dit program kan du selvfølgelig også prøve at kalde System.gc() for at
forslå for den virtuelle maskine at den skal køre sin garbage collector. Der
er dog ingen garantier for at der sker noget.

Hvorfor er det et problem at dit program bruger 42 MB? Får du en
OutOfMemoryError?

/Anders



Ukendt (14-08-2003)
Kommentar
Fra : Ukendt


Dato : 14-08-03 17:05

> Hvorfor er det et problem at dit program bruger 42 MB? Får du en
> OutOfMemoryError?

Jeg tror vist bare, at han synes det er meget.

--
"Sic gorgiamus allos subjectatos nunc"
Lars 'Trygleren' Winther
www.hesteskelet.dk



Morten Nørgaard (15-08-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 15-08-03 07:57

Hej Anders,

> Hvorfor er det et problem at dit program bruger 42 MB? Får du en
> OutOfMemoryError?

Ja, det gør jeg - når jeg forsøger at samle mange sider (10+) i et
printjob - det kan den ikke klare. Jeg stiller helst ikke parametre via
commandline, da det er en applikation der skal køre uden for huset.

/Morten




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