Testele JUnit lucra cu volume mari de date, în special, această eroare se produce atunci când datele sunt citite din baza de date într-un obiect.
RAM - 16 GB, CPU virtuale 4
când a apărut eroarea
Am adăugat opțiunea -XX: -UseGCOverheadLimit dar a primit următoarea eroare:
toți parametrii JVM -Xmx8192M -XX: -UseGCOverheadLimit
în momentul în care eroarea a fost următorii parametri de sistem: RAM stabil cu 46% (7400Mb), CPU 77% -82% (82% în momentul producerii defectului)
spune-mi cum să rezolve această problemă?
- java.lang.OutOfMemoryError: Limita deasupra capului GC a depășit
Această eroare poate apărea ca o revărsare de prima și a doua regiuni. Acesta este legat de faptul că memoria este scăzută, iar GC încearcă în mod constant pentru a elibera spațiu. Această eroare poate fi dezactivată folosind parametrul -XX: -UseGCOverheadLimit, dar, desigur, nu trebuie să fie oprit și nici pentru a rezolva problema scurgeri de memorie, sau pentru a da mai mult volum, sau pentru a schimba configurația GC.
răspuns
String obiect prea mult în greutate. și există o mulțime de siruri de caractere. De exemplu, imaginea a considerat că are o greutate de 250 MB, are 1600 de caractere în 000 de linii de linie și 220. Am umple un ArrayList
Soluție: crește memoria până la 14RO. acum problema este că 6Gbaytny obiect nu este plasat într-o grămadă, trebuie să se gândească la altceva, și să sacrifice testul timpului.
Nachto o fundație pentru o mai bună înțelegere a erorii.
JVM are două zone de memorie: Heap Memorie și non-Heap de memorie.
- Heap memorie - magazine de obiecte;
- Non-Heap Memory - parametrii stochează metodelor, tipuri primitive, etc.
În cazul dumneavoastră, există o depășire Heap de memorie. deoarece Ea a creat o mulțime de obiecte care nu se potrivesc în Heap de memorie. Pentru a rezolva o problemă, puteți crește memoria Heap (tasta -Xmx), care nu ajută întotdeauna, deoarece cantitatea de date poate fi mai mare decât memoria disponibilă, astfel încât cel mai bine este de a pune în aplicare prelucrarea datelor din baza de date, adică porțiunile încărcarea obiectelor de date pentru a se potrivi în memorie, și apoi ucide-le (alocați nul. descarcă la GC), observăm următoarea parte, etc.
P.S. Se înțelege că Heap nu este egal cu RAM. Heap - este rezervat doar pentru memoria JVM, o mai mare utilizare a acestei prevederi JVM nu poate, chiar dacă RAM în exces.