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