[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