Obsah

Javovský virtuální stroj

Viz též heslo Java Virtual Machine na Wikipedii.

V této kapitole si řekneme něco o tom, jak funguje javovský virtuální stroj (angl. Java Virtual Machine, JVM). JVM umožňuje spouštět javovské programy. Úkolem JVM je poskytovat programům vždy stejné prostředí. Stejné prostředí zajistí, že javovský program běží na počítači s procesorem SPARC a operačním systémem Solaris stejně jako na počítači s procesorem Intel a operačním systémem MS Windows.

Spuštění javovského programu probíhá ve dvou krocích: v prvním kroku spustíme JVM a ve druhém kroku JVM nahraje do paměti bajtkód a spustí jej (zavolá metodu main). Paměť běžícího programu Podívejme se na to, jak vypadá program běžící v JVM. Paměť programu je rozdělena na tři oblasti: zásobník (angl. stack), halda (angl. heap) a oblast metod (angl. method area). Oblast metod obsahuje program (bajtkód). Program je tvořen posloupností instrukcí JVM. Každá instrukce se skládá z jednobajtového operačního znaku a případně operandů. Např. instrukce goto má operační znak 167 a provede nepodmíněný skok na adresu určenou operandem.

Zásobník slouží pro alokaci lokálních proměnných, pro ukládání parametrů a výsledků instrukcí JVM a pro předávání parametrů a výsledků při volání metod. Paměť zásobníku se přiděluje po tzv. rámcích (angl. stack frames). Každé volání metody alokuje nový rámec. Rámec obsahuje paměť pro lokální proměnné a tzv. zásobník operandů (angl. operand stack). JVM udržuje ukazatel na tzv. vrchol zásobníku, což je naposledy vložená hodnota. Zásobník operandů se používá pro parametry a výsledky instrukcí JVM. Paměť běžícího programu Např. instrukce iadd vyzvedne dvě hodnoty z vrcholu zásobníku, tyto hodnoty sečte a výsledek umístí na vrchol zásobníku.

Každá položka operandového zásobníku má délku nejméně 4 bajty. Všechny aritmetické instrukce JVM tedy pracují s operandy délky nejméně 32 bitů. V oblasti proměnných se paměť přiděluje také po 4 bajtech. To znamená, že každá proměnná zabírá v JVM nejméně 32 bitů.

Viz též heslo Garbage collector na Wikipedii.

Halda je oblast paměti, v níž můžeme za běhu programu vytvářet objekty. Vytváření objektů na haldě se provádí pomocí klíčového slova new. Na rozdíl např. od jazyka C++ není potřeba objekty odstraňovat (tzv. dealokovat). O odstraňování objektů se v Javě stará tzv. garbage collector. Garbage collector sám rozpozná nepoužívané objekty a tyto objekty dealokuje. Po dealokaci objektu je paměť, kterou objekt zabíral, připravena k dalšímu použití.

Úloha 1

Doplňte věty.