Nedávno jsem narazil na článek Memory fragmentation, zabývající se jedním z důvodů vysoké náročnosti firefoxu na paměť – tímto důvodem je fragmentace paměti.
Vždycky se tvrdívalo, že Java je pomalá a paměťově nenažraná. Aplikace napsané v Javě ovšem fragmentací paměti netrpí právě díky použití kopírovacího garbage collectoru, který vždy používaná data „sesype“ na začátek přidělené paměti.
Navíc si k tomuto problému přidejte fakt, že části paměti firefoxu spravují pomocí reference countingu. Reference counting je obvykle pomalejší (díky zamykání a zvyšování reference, i když i s tím se dá poprat), paměťově náročnější a navíc trpí problémy s cyklickými závislostmi.
Člověka tak napadne, že možná nastál čas pro použití garbage collectoru podobnému tomu v Javě …
A bude hůř. Stránky jsou čím dál tím víc složitější, obsahu je víc a paměť je levnější a levnější…
Pochybuju, že někdo ty mraku C++ kódu bude předělávat na něco jiného než je to teď. Navíc by to chtělo nějaký benchmark, který GC je asi lepší, podle mě je nějpší GC v C++ zásobník, ale s tím si asi FF nevystačí
Bude a zhruba jiz pul roku se na tom usilovne pracuje v Mozilla 2 (Gecko 2) strome 😉
http://wiki.mozilla.org/XPCOMGC
Dalsi zajimavosti je ze spousta veci ma byt prepsana (do JS) a bezet tak ve virtualni masine Tamarin
http://wiki.mozilla.org/Tamarin
I fragmentace se řeší:
http://blog.pavlov.net/2007/11/21/malloc-replacements/