-
Bug
-
Resolution: Fixed
-
P4
-
None
-
None
We track the amount of old-gen memory that is live at the end of each old marking pass as this is one of the mechanisms that feeds into the trigger for a new old-gen collection.
Currently, the old-live value following Full GC is set based on the amount of live found by Full GC's stop-and-wait marking effort. However, this does not include young objects that are promoted into old as a result of this Full GC.
In one recently examined GC log, old-live-at-end-of-last-mark was reported as 5_932M. However, following the compaction phase, which promotes aged young objects, the amount of live old-gen memory was 13_152M. At the end of the subsequent concurrent GC cycle, we found that old-gen held 13_390M, representing 125.7% growth since last old mark. With this "bad" information, we immediately triggered another old concurrent mark, because of the huge amount of growth.
Currently, the old-live value following Full GC is set based on the amount of live found by Full GC's stop-and-wait marking effort. However, this does not include young objects that are promoted into old as a result of this Full GC.
In one recently examined GC log, old-live-at-end-of-last-mark was reported as 5_932M. However, following the compaction phase, which promotes aged young objects, the amount of live old-gen memory was 13_152M. At the end of the subsequent concurrent GC cycle, we found that old-gen held 13_390M, representing 125.7% growth since last old mark. With this "bad" information, we immediately triggered another old concurrent mark, because of the huge amount of growth.