První verze Java Virtual Machine (JVM) byly postaveny na stejné organizaci paměti jako v C++. Byl to velmi neefektivní přístup. Tvrdím, že „správa paměti v Javě je rychlejší než v C++.“ A na základě čeho?
V C++ pro alokování nového objektu (operátor new) bylo třeba najít nové místo na binárním stromu nebo haldě (heap). Halda je binární strom, kde minimum je úplně nahoře. V haldě lze minimum nalézt konstantní rychlostí – okamžitě. Informace o volných blocích v paměti byly v případě C++ uspořádány právě na haldě. Když bylo třeba alokovat nový objekt (přes operátor new) paměti, našla se nejmenší možná paměť (vrchl haldy), na které se to dalo alokovat a použila se. Vrchol haldy se vyhodil. Bylo to docela efektivní, neboť manipulace haldy má docela dobrou rychlostní složitost. Bylo to dobré i proto, že se nejprve zabíraly malé bloky paměti.
V Javě to takhle nefunguje, je to mazanější J V Javě si udělali statistiku životního cyklu objektu. Sledovali, jak objekty vznikají a jak zanikají. Zjistili, že objekty, které jsou mladé mají velkou šanci, že brzy zaniknou. Jen málo z nových objektů přežije delší dobu. Jako vojáci ve druhé světové válce. Zkušení zůstávali, ale nováčci umírali. Zavedli Generační Garbage Collector (GCC). CGC si paměť rozdělí na několik generací. čtyři. Když se alokují objekty, tak se sypou za sebou – bezhlavě jeden za druhým. V C++ alokování nového objektu znamená reorganizovat haldu proto, aby se zabral nejmenší blok. Na rozdíl od C++, v Javě se alokuje objekt konstantní složitostí. Částka sumářům, vytvoření nového objektu přes operátor new nestojí mnoho úsilí.
Viac informacií preberáme na kurze:
Kurz JAVASE1 - Základy programování v jazyce Java
Marián Knězek