Bevezetés a JVM Code Cache-be

1. Bemutatkozás

Ebben az oktatóanyagban gyorsan megnézzük és megismerhetjük a JVM kód gyorsítótárát.

2. Mi a kód gyorsítótár?

Egyszerűen fogalmazva, A JVM Code Cache egy olyan terület, ahol a JVM natív kódba fordítva tárolja a byte-kódját. A futtatható natív kód minden blokkját a-nak hívjuk nmethod. A nmethod teljes vagy beágyazott Java módszer lehet.

A just-in-time (JIT) fordító a kódgyorsítótár-terület legnagyobb fogyasztója. Ezért hívják egyes fejlesztők ezt a memóriát JIT kód gyorsítótárnak.

3. Code Cache Tuning

A kód gyorsítótárának mérete fix. Ha megtelt, a JVM nem fordít további kódokat, mivel a JIT fordító most ki van kapcsolva. Továbbá megkapjuk a „A CodeCache megtelt ... A fordító le van tiltva" figyelmeztető üzenet. Ennek eredményeként az alkalmazásunk teljesítménye romlott lesz. Ennek elkerülése érdekében a kód gyorsítótárát a következő méretbeállításokkal hangolhatjuk:

  • InitialCodeCacheSize - a kezdeti kód gyorsítótár mérete, alapértelmezés szerint 160 KB
  • ReservedCodeCacheSize - az alapértelmezett maximális méret 48 MB
  • CodeCacheExpansionSize - a kód gyorsítótárának bővítési mérete, 32 KB vagy 64 KB

A ReservedCodeCacheSize lehet megoldás, de ez általában csak ideiglenes megoldás.

Szerencsére a JVM felajánlja a UseCodeCacheFlushing opció a kód gyorsítótárának öblítésének vezérléséhez. Alapértelmezett értéke hamis. Amikor engedélyezzük, akkor felszabadítja a megszállt területet, ha a következő feltételek teljesülnek:

  • a kód gyorsítótár tele van; ez a terület ki van öblítve, ha mérete meghaladja egy bizonyos küszöböt
  • a legutóbbi tisztítás óta eltelt a bizonyos időköz
  • az előre lefordított kód nem elég forró. Minden egyes összeállított módszerhez a JVM nyomon követi a speciális forróságmérőt. Ha ennek a számlálónak az értéke kisebb, mint egy kiszámított küszöb, a JVM felszabadítja ezt az előre lefordított kódrészletet

4. Kód gyorsítótár használata

A kód gyorsítótár használatának figyelemmel kíséréséhez nyomon kell követnünk a jelenleg használt memória méretét.

A kód gyorsítótár használatával kapcsolatos információk megadásához megadhatjuk a –XX: + PrintCodeCache JVM opció. Az alkalmazás futtatása után hasonló kimenetet fogunk látni:

CodeCache: méret = 32768Kb használt = 542Kb max_használt = 542Kb szabad = 32226Kb 

Lássuk, mit jelentenek ezek az értékek:

  • méret a kimenetben a memória maximális méretét mutatja, amely megegyezik a memóriával ReservedCodeCacheSize
  • használt a jelenleg használt memória tényleges mérete
  • max_ felhasznált a maximálisan használt méret
  • ingyenes a fennmaradó memória, amelyet még nem foglaltunk el

A PrintCodeCache opció nagyon hasznos, mivel tudjuk:

  • lásd, mikor történik az öblítés
  • meghatározzuk, hogy elértünk-e kritikus memóriahasználati pontot

5. Szegmentált kód gyorsítótár

A Java 9-től kezdve a JVM három külön szegmensre osztja a kód gyorsítótárát, amelyek mindegyike egy adott típusú lefordított kódot tartalmaz. Pontosabban három szegmens létezik:

  • A nem módszeres szegmens JVM belső kapcsolódó kódot tartalmaz, például a bytecode tolmácsot. Alapértelmezés szerint ez a szegmens körülbelül 5 MB. A szegmens méretét a -XX: NonNMethodCodeHeapSize tuning zászló
  • A profilkód szegmens könnyedén optimalizált kódot tartalmaz, rövid élettartammal. Annak ellenére, hogy a szegmens mérete alapértelmezés szerint 122 MB körül van, a -XX: ProfiledCodeHeapSize tuning zászló
  • A nem profilozott szegmens teljesen optimalizált, potenciálisan hosszú élettartamú kódot tartalmaz. Hasonlóképpen, alapértelmezés szerint 122 MB körül van. Ez az érték természetesen a. Segítségével konfigurálható -XX: NonProfiledCodeHeapSize tuning zászló

Ez az új struktúra eltérően kezeli a különböző típusú betartott kódokat, ami jobb általános teljesítményhez vezet.

Például a rövid élettartamú fordított kód és a hosszú élettartamú kód elkülönítése javítja a módszer söpörő teljesítményét - főleg azért, mert kisebb memóriaterületet kell beolvasnia.

6. Következtetés

Ez a rövid cikk bemutatja a JVM kód gyorsítótárának rövid bemutatását.

Ezenkívül bemutattunk néhány használati és beállítási lehetőséget a memóriaterület megfigyelésére és diagnosztizálására.


$config[zx-auto] not found$config[zx-overlay] not found