Outofmemoryerror gc felső határérték túllépése esetén paraméterek -xmx8192m -xx-usegcoverheadlimit - stack

JUnit tesztek dolgozni nagy mennyiségű adat, különösen ez a hiba akkor jelentkezik, ha az adatokat olvas az adatbázist egy tárgyat.

RAM - 16 GB, a virtuális CPU 4

amikor a hiba történt

Én hozzá a lehetőség -XX: -UseGCOverheadLimit de megkapta a következő hibaüzenet jelenik meg:

Az összes paraméter JVM -Xmx8192M -XX: -UseGCOverheadLimit

abban az időben a hiba a következő volt rendszer paraméterei: RAM stabilan 46% -kal (7400Mb), a CPU 77% -82% (82%, amikor a hiba történt)

mondja meg, hogyan oldja meg a problémát?

  1. java.lang.OutOfMemoryError: GC overhead limit túllépése

Ez a hiba akkor fordulhat elő, mint a túlfolyó az első és második területek. Ez összefügg azzal a ténnyel, hogy a memória alacsony, és a GC folyamatosan próbál szabadítson fel helyet. Ezt a hibát ki lehet kapcsolni paraméterrel -XX: -UseGCOverheadLimit, de persze, ez nem lehet kikapcsolni, és vagy megoldja a memóriavesztés problémája van, vagy, hogy több kötet, vagy változtassa meg a GC konfigurációt.

válasz
String objektum túl nagy súlyt. és van egy csomó szálakat. Például, a kép úgy vélte, hogy a súlya 250 MB, 1600 karakter a sorban 000 sor és 220. Azt írja egy ArrayList vonalak. ahol minden egyes sor kerül rögzítésre, mint egy tárgy mezők 250, hogy az értéke az 1600 karaktert. Egy ilyen objektum lemérjük egy kicsit több, mint 6 GB.

Megoldás: növelni a memória akár 14GB. most a probléma az, hogy 6Gbaytny tárgy ne kerüljön egy halom, akkor valami másra gondolni, és feláldozni az idő próbáját.

Nachto alapját a jobb megértéséhez a hibát.

JVM két memória területek: kupacmemóriája és Non-halom memória.

  • Heap Memory - üzletek tárgyak;
  • Nem kupacmemóriája - üzletek paraméterei a módszerek, primitív típusok, stb

Outofmemoryerror gc felső határérték túllépése esetén paraméterek -xmx8192m -xx-usegcoverheadlimit - stack

Az Ön esetében van egy túlfolyó kupacmemóriája. mert Ez létrehozott egy csomó tárgyat, amely nem illeszkedik a halom memória. Megoldani a problémát akkor növeli a halom memória (-Xmx kulcsot), nem mindig segít, mert adatmennyiség nagyobb lehet, mint a rendelkezésre álló memória, így a legjobb, hogy végre az adatfeldolgozást az adatbázis részei, azaz a Feltöltés az adatok tárgyakat, hogy illeszkedjen a memóriában, majd megöli őket (rendelni null. pakolni, hogy GC), tudomásul vesszük a következő rész, stb

Ui Magától értetődő, hogy Heap nem egyenlő a RAM. Heap - ez csak fenn a JVM memória, nagyobb mértékben az e rendelkezés JVM akkor sem, ha a RAM meghaladja.