OFF (de tényleg off) Re: [BSD] Java sok memóriát zabál?

Laszlo Nagy gandalf at designaproduct.biz
2007. Jan. 18., Cs, 20:25:27 CET


>   Az 1.5.0 óta van rá megoldás, de a fejlesztők nemigen használják (egyfajta 
> memóriamentés). 
>
>   
>> Sajnos ez a kezdeti overhead miatt lassú.
>>     
>
>   Kb. egy másodperc ez az overhead.
>   
Van ahol ez lassúnak számít. Ez az ami miatt pl. soha nem írnék unix-os 
parancsként használható programot Java-ban. Mondjuk képzeld el hogy 
valaki így hívja meg:

find . -name \*\.xml | xargs -I '{}'  ./utility -f '{}'

'utility'-t megírni Java-ban nem lenne jó. Erre a Java egész egyszerűen 
alkalmatlan. Ez már szőrszálhasogatás volt a részemről, az eredeti 
problémámhoz semmi köze.

>> Ugyanezt csinálja akkor is, ha egy kis teszt programocskát akarok pár percig
>> futtatni és akkor is, ha egy bitang, sok at tudó alkalmazást inditok el.
>>     
>
>   Igen, az oprendszert elindítani is pont annyi idő, ha rögtön kikapcsolom, 
> vagy ha több napig futtatom.
>   
Vannak programok amiket nem arra terveztek hogy sokszor el legyenek 
indítva. Vannak olyanok amiket igen. Ez nem feltétlenül egy "hiba"; de 
mindenképp korlátnak számít.
>> Mindegy, a lényeg, hogy az elején sokat dolgozik. Ne feledd: "SIZE is
>> the total size of the process (text, data, and stack)," és ez ott van,
>> akárhogy is nézzük.
>>     
>
>   Nem történik tényleges betöltés, csak sok állományát betöltöttnek 
> regisztrálja, olyan, mintha betöltené, és kitenné a swap-re. Csak be se 
> tölti... nem tudom, hogy ez miért okoz problémát, sok program csinálja 
> ezt... :)
>   
Érdekelne, hogy ez melyik rendszerhívás? Biztos nem mmap(2), mert az 
csak adatnak foglal le címterületet; itt meg kódnak kell címet foglalni. 
Illetve Java esetén lehet hogy ez adatnak számít mert a JVM futtatja és 
nem az oprendszer, de kíváncsi lennék hogy egy C-ben írt natív ELF 
bináris mit hív meg hogy ez lehetséges legyen. DLL-t vagy .so filet 
tudom hogy kell betölteni, de ott szerintem először tényleg betölti a 
memóriába, és később swappeli ha kell. Szóval melyik az a sok program 
ami ezt csinálja? Van-e közöttük natív? Ha igen akkor hogyan csinálja?

   Laci




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