[Java lista] swt image gondok

Gábriel Ákos akos.gabriel at i-logic.hu
2009. Nov. 19., Cs, 14:01:39 CET


On Thu, 2009-11-19 at 13:46 +0100, Laja wrote:
> Hi!
> 
> SWT-ben hogyan tudok egy ImageData-t megszüntetni? Nincs dispose
> metódusa, és nem tudom elég-e ha null-t kap értékül?
> Igen tudom hogy a GC majd kidobálja ha nem használom, de ha az
> ImageData nem pure java dolog, akkor hiába takarít a GC...
> 
> Példa:
>      ImageData imgdta=new ImageData(filename);
>      ImageData imgdta2=imgdta.scaledTo(width,height);
>      kep=new Image(display,imgdta2);
>      imgdta=null; //Ez biztos hogy felszabadul????
> 

Ez sztem így oké, a GC előbb-utóbb fel fogja szabadítani, ha akarja.

> Másik gondom, hogy ha egy label-ben lév ő képet felülírok, akkor az
> előző által foglalt terület felszabadul? Ha nem, akkor hogyan lehet
> felszabadítani?
> Példa:
> 
> Label lbl_img=new Label(shell,SWT.HORIZONTAL|SWT.CENTER);
> lbl_img.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,1,1));
> ...
> Image kep=new Image(display,imgdta2);
> lbl_img[i].setImage(kep); //<--itt felszabadul az előző kép?

Akkor szabadul fel, ha null-ra állítod. Ha elveszíted a referenciát,
azzal csinálsz leaket, egész addig, amíg a tartalmazó objektumod is meg
nem szűnik.

> Azért kérdezgetem ezeket, mert valahol eszi a memóriát az SWT-s
> progim. A JVM memóriája nem fogy, de a rendszermemória igen. Az a
> gyanúm, hogy az SWT eszi meg...

Ezt nem nagyon vágom. Honnan tudod, hogy a rendszermemória mire
használódik el? Lehet hogy cache-nek?
Végül is nem zárható ki teljesen, hogy az SWT low-level kódja valahol
leakel, nem tudom...


-- 
Üdvözlettel,
Gábriel Ákos
-=E-Mail :akos.gabriel at i-logic.hu|Web:  http://www.i-logic.hu=-
-=Tel/fax:+3612391618            |Mobil:+36209278894         =-



További információk a(z) Javalist levelezőlistáról