Mai mult
Eroare java.lang.OutOfMemoryError: GC aeriene depășit limita
I a lua acest mesaj de eroare ca nu-mi execute teste JUnit:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Știu ce o OutOfMemoryError
, dar ceea ce are GC aeriene limita să spun? Cum pot rezolva acest lucru?
761
18
Acest mesaj înseamnă că, pentru un motiv oarecare colectorul de gunoaie este de a lua o cantitate excesivă de timp (implicit 98% din toate CPU moment al procesului) și recuperează foarte puțin de memorie în fiecare rulare (implicit 2% din heap).
Acest lucru înseamnă că programul nu mai face nici un progres și este ocupat doar de colectare a gunoiului în orice moment.
Pentru a preveni aplicarea de înmuiere timp de PROCESOR fara a face nimic, JVM aruncă această "Eroare", astfel încât să aveți o șansă de a diagnostica problema.
În cazuri rare, în cazul în care nu'am văzut acest lucru se întâmplă este în cazul în care codul a fost crearea de tone de obiecte temporale și de tone de slab-obiecte referite într-o deja de memorie foarte limitate mediu.
Check out acest articol pentru detalii (în special această parte).
GC aruncă această excepție atunci când prea mult timp este petrecut în colectarea gunoiului pentru prea puțini se întorc, de exemplu. 98% din CPU timp este petrecut pe GC și mai puțin de 2% din heap este recuperat.
Această caracteristică este conceput pentru a preveni aplicații de funcționare pentru o perioadă lungă de timp în timp ce face puțin sau nici un progres, deoarece heap este prea mic.
Puteți dezactiva acest off cu opțiunea de linie de comandă
-XX:-UseGCOverheadLimit
Mai multe informatii aici
EDIT: se pare ca cineva posibilitatea să tastați mai repede decât mine :)
Dacă sunteți sigur că nu există pierderi de memorie în programul dumneavoastră, încercați să:
-Xmx1g
.-XX:+UseConcMarkSweepGC
.Dacă este necesar, limita verifica poate fi dezactivat prin adăugarea opțiunea
-XX:-UseGCOverheadLimit
la linia de comandă.L's, de obicei, codul. Aici's un exemplu simplu:
Folosind java 1.6.0_24-b07 Pe un Windows7 pe 32 de biți.
java -Xloggc:gc.jurnal de Gunoier
Apoi uita-te la gc.jurnal
Acum, desigur, acest lucru nu este cel mai bun test sau cel mai bun design, dar atunci când se confruntă cu o situație în care nu ai nici o alegere, ci de punere în aplicare astfel o buclă sau atunci când se ocupă cu cod existent care se comportă rău, alegerea de a refolosi obiectele în loc de a crea altele noi, poate reduce numărul de ori colectorul de gunoi stă în cale...
Cauza pentru eroare
După o colectare a gunoiului, dacă Java proces este de a cheltui mai mult decât aproximativ 98% din timp face colectarea gunoiului și dacă se recuperează mai puțin de 2% din heap și a făcut atât de mult în ultimii 5 (compilare constantă) consecutive gunoi colecții, apoi o java.lang.OutOfMemoryError este aruncat
Xms1g -Xmx2g
, încercați-XX:+UseG1GC -XX:G1HeapRegionSize=n -XX:MaxGCPauseMillis=m -XX:ParallelGCThreads=n -XX:ConcGCThreads=n
Să aruncăm o privire la mai multe întrebări legate de ceea G1GC
https://stackoverflow.com/questions/8111310/java-7-jdk-7-garbage-collection-and-documentation/34254605#34254605
https://stackoverflow.com/questions/2254041/java-g1-garbage-collection-in-production/34254401#34254401
Oracle technetwork articol pentru GC reglaj fin
Doar crește dimensiunea heap un pic de setare această opțiune în
Run → Run Configurații → Argumente → VM argumente
Xms - pentru limită minimă
Xmx - pentru limită maximă
Pentru mine, următorii pași lucrat:
eclipse.ini
-Xms40m -Xmx512m
pentru a
-Xms512m -Xmx1024m
Vezi aici
Următoarele lucrat pentru mine. Trebuie doar să adăugați următorul fragment:
încercați acest lucru
deschide
construi.gradle
fișiercreșterea javaMaxHeapsize în a construi.gradle(Modulul:app) fișier
a (Adăugați această linie în gradle)
Java dimensiunea heap-descriptions (xms, xmx, xmn)
Stabilește dimensiunea inițială a heap Java. Dimensiunea implicită este 2097152 (2MB). Valorile trebuie să fie un multiplu de, și mai mult, 1024 bytes (1KB). (Pe -server pavilion crește dimensiunea implicită de 32M.)
Seturi inițiale de Java dimensiunea heap pentru Eden generație. Valoarea implicită este 640K. (Pe -server pavilion crește dimensiunea implicită la 2M.)
Setează dimensiunea maximă la care heap Java poate să crească. Dimensiunea implicită este de 64M. (Pe -server pavilion crește dimensiunea implicită a 128M.) Maxim heap limita este de aproximativ 2 GB (2048MB).
Java memorie argumente (xms, xmx, xmn) formatare
Când setarea dimensiunea heap Java, trebuie să specificați memoria argument folosind una dintre literele "m" sau "M" pentru MB, sau "g" sau "G" pentru GB. Setarea dvs. nu va funcționa dacă specificați "MB" sau "GB." Argumente valabile arata astfel:
-Xms64m sau -Xms64M -Xmx1g sau -Xmx1G Puteți folosi, de asemenea, 2048MB pentru a specifica 2GB De asemenea, asigurați-vă că utilizați doar numere întregi atunci când se specifică argumentele. Folosind -Xmx512m este o opțiune valabilă, dar -Xmx0.5g va cauza o eroare.
Această referință poate fi de ajutor pentru cineva.
Repornirea meu MacBook fix această problemă pentru mine.
Puteți crește, de asemenea, alocarea de memorie și dimensiunea heap prin adăugarea asta
gradle.proprietăți
fișier:org.gradle.jvmargs=-Xmx2048M -XX\:MaxHeapSize\=32g
Nu't trebuie să fie 2048M și 32g, face la fel de mare, după cum doriți.
Pentru a crește dimensiunea heap în IntelliJ IDEA urmați instrucțiunile de mai jos. Ea a lucrat pentru mine.
Pentru Utilizatorii De Windows,
Du-te la locația unde IDE este instalat și de căutare pentru următoarele.
Editați fișierul și adăugați următoarele.
Asta este !!
Am'm de lucru în Android Studio și a întâlnit această eroare atunci când încearcă pentru a genera o semnat APK for de presă. Am fost capabil de a construi și testa un debug APK cu nici o problema, dar de îndată ce am vrut să construiesc un comunicat APK, procesul de construire va rula timp de minute în șir și apoi în cele din urmă termina cu "Eroare java.lang.OutOfMemoryError: GC aeriene depășit limita". Am crescut heap dimensiuni atât pentru VM și Android DEX compilator, dar problema a persistat. În cele din urmă, după multe ore si cani de cafea s-a dovedit că problema a fost în aplicația mea-nivel 'de a construi.gradle' fișier - am avut 'minifyEnabled' parametru pentru eliberarea construi tip setat la 'fals', prin urmare funcționare Proguard umpluturi pe cod care nu't fost prin codul-scădere' proces (a se vedea https://developer.android.com/studio/build/shrink-code.html). Am schimbat 'minifyEnabled' parametru pentru a 'adevărat' si eliberarea construi executat ca un vis :)
Pe scurt, am avut de a schimba la nivel de aplicație 'de a construi.gradle' fișier de: //...
pentru a
Aveți nevoie pentru a crește dimensiunea memoriei în Jdeveloper du-te la setDomainEnv.cmd.
și
Rezolvat: Trebuie doar să adăugați
org.gradle.jvmargs=-Xmx1024m
îngradle.proprietăți
și dacă nu există, creați-l.În Netbeans, ar putea fi util pentru a proiecta un max-heap de dimensiune. Du-te la Run => Set de Configurare a Proiectului => Personaliza. În Run a sa a apărut fereastra, du-te la VM Opțiune, completați
-Xms2048m -Xmx2048m
. S-ar putea rezolva dimensiunea heap problema.