Outofmemoryerror limita gc aeriene depășită atunci când parametrii -xmx8192m -XX-usegcoverheadlimit - stivă

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

  1. 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 linii. în cazul în care fiecare linie este înregistrată ca obiect al câmpurilor 250 care iau valoarea de 1600 caractere. Un astfel de obiect se cântărește puțin mai mult decât 6GB.

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.

Outofmemoryerror limita gc aeriene depășită atunci când parametrii -xmx8192m -XX-usegcoverheadlimit - stivă

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