[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