[Java lista] java program folyamatok
bognár attila
attila at netalfa.hu
2007. Jún. 16., Szo, 10:37:45 CEST
>> Írtam egy ilyen programot:
>> while(true) {
>> String s = new String("Helló");
>> System.out.println("->" + s);
>> }
>> Elindítottam, és ez is 16 folyamatot hoz létre alapból, mint a Chat. Néztem
>> a heapet netbeans profilerben, és 14 perc után out of memory-val leállt.
>> Átírtam ilyenre:
>> String s;
>> while(true) {
>> s = new String("Helló");
>> System.out.println("->" + s);
>> }
>> Így is ugyanaz. Ez miért van?
>>
>
> Alapvetően ugyanaz (1. uaz a string objektum, sőt ez is uaz:
> System.out.println("->" + "Helló"), 2. ha nem string lenne a gc akkor
> is kidobálná, 3. tudtommal ezt kioptimalizálja a fordító/jit - a
> listán vannak, akik ebben jobban otthon vannak).
bocs, még korán van :-)
1) objektum szinten a + "Helló" nem ugyanaz
2) mindig új objektum keletkezik, így mindkét esetben uaz történik: új
objektumokatt allokálsz, melyek mind felszabadulnak a while ciklus
végén, amiket gc kihajíthat - 14 perc alatt legalábbis illene.
3) ami az optimalizálást illeti: nem vagyok annyira otthon a témában,
többfélét olvasni (van aki szerint a 2. gazdaságosabb, mások szerint ez
a fordító/JVM dolga - hogy ezt megteszi-e nem tudom), sokan (én is) az
első változatot preferálom, mert tisztább a kód.
attila
További információk a(z) Javalist levelezőlistáról