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?
- 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
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
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.