100% voller Eden-Raum, 0% belegter Survivor-Raum - Müllabfuhr nicht abgeschlossen

Ich bin auf einen ziemlich verwirrenden GC-Fall gestoßen: Während der Eden-Raum zu 100% voll ist, werden 0% des Überlebensraums verwendet. Wenn das Eden voll ist, sollte die Speicherbereinigung ausgelöst werden, oder?

Kann es einen Fall geben, in dem die Ausführung des GC-Dämons verhindert wird? Wie eine 100% CPU?

Wir benutzenjdk-1.7.

Was kann die Ursache sein? Unten ist die Ausgabe von jmap.

Wir haben auch versucht, eine detailliertere Speichernutzung mit zu erfassenjmap -histo -F, aber dann sank die CPU-Auslastung auf 0% und der Java-Prozess wurde nicht mehr erreichbar.

using thread-local object allocation.
Parallel GC with 18 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 12884901888 (12288.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 4265738240 (4068.125MB)
   used     = 4265738240 (4068.125MB)
   free     = 0 (0.0MB)
   100.0% used
From Space:
   capacity = 14352384 (13.6875MB)
   used     = 0 (0.0MB)
   free     = 14352384 (13.6875MB)
   0.0% used
To Space:
   capacity = 14680064 (14.0MB)
   used     = 0 (0.0MB)
   free     = 14680064 (14.0MB)
   0.0% used
PS Old Generation
   capacity = 8589934592 (8192.0MB)
   used     = 8589931920 (8191.997451782227MB)
   free     = 2672 (0.0025482177734375MB)
   99.99996889382601% used
PS Perm Generation
   capacity = 41353216 (39.4375MB)
   used     = 41079056 (39.17604064941406MB)
   free     = 274160 (0.2614593505859375MB)
   99.33702858805468% used

Antworten auf die Frage(4)

Ihre Antwort auf die Frage