Java teljesítmény-elemzések
A Java platformot nem ismerők számára a legelső érv a Java ellen a lassúsága. A következő oldalakon és linkeken ezt a lassúsággal kapcsolatos tévhitet illetve hiányos ismeretet szeretnénk eloszlatni.
Miért nem lassú a Java?
Röviden összefoglalva elsősorban azért, mert a modern Java Virtuális Gépek gyors natív fordítási, valamint futásidejű profiling technológiával rendelkeznek, amelyek lehetőséget bizosítanak a gyors elindulásra és a hosszú távú futás-optimalizálásra egyaránt. A technológia a HotSpot nevű vituális géphez köthető, amely abban különbözik a fordítóprogramoktól, hogy a program használatának sajátosságai alapján jobban tudja optimalizálni a végrehajható natív kódot.
De a Garbage Collection nagyon sok időt elvesz, nem?
A Garbage Collection, azaz a nem használt objektumok kisöprése a memóriából, több stratégiával is megközelíthető. A naiv implementációnak tartott referencia-számlálás a körkörös referenciák miatt nem elég jól használható. A virtuális gép azokat az objektumokat takarítja ki, amelyek már nem érhetőek el valamilyen futó szálból amelyhez több egyszerűsítő technológiát is alkalmaz. A két legfontosabb:
- A fiatalabb objektumok hamarabb megszűnnek, így ezeket külön tárolja, és gyorsan tudja takarítani.
- A program futásával párhuzamosan több szálon is futhat garbage collection, amely nem akasztja meg a virtuális gép működését addig, amíg végig nem nézi a szálakat.
Milyen mérések támasztják ezt alá?
Java vs C++ összehasonlítás
- Java és C++ implementáció-azonos algoritmusok vizsgálata a BME-n
Olyan algoritmusokat vizsgáltunk, amely ugyanolyan módon implementálható Javaban és C++-ban, így a mérés a fordítás és optimalizálás minőségét hasonlítja össze. Az eredmények alapján a Java teljesítménye -15% és +5% között van a C++-os alkalmazáshoz képest.