Java GC Tutorials - Herong's Tutorial Examples - v1.12, by Herong Yang
Adaptive Size Policy Changed Eden Space
This section provides a tutorial on how Adaptive Size Policy used by the Parallel collector changed the eden space in the Young generation to meet the throughput goal.
In GC log example presented in the last tutorial, the Adaptive Size Policy of the Parallel collector suggested to keep Young generation size as is.
In this tutorial, we will look at GC log example from the test that suggests to change the survivor space size:
herong> java -Xms1200m -Xmx1200m -XX:+UseParallelGC -XX:NewRatio=1 \ -XX:SurvivorRatio=1 -Xlog:gc=debug,gc+heap=debug,gc+ergo=trace \ GarbageCollection2 ... 1163 1048576000 802232232 246343768 [debug][gc,heap] GC(5) Heap before GC invocations=6 (full 0): PSYoungGen total 409600K, used 240522K [... [debug][gc,heap] GC(5) eden space 204800K, 99% used [... [debug][gc,heap] GC(5) from space 204800K, 17% used [... [debug][gc,heap] GC(5) to space 36352K, 0% used [... [debug][gc,heap] GC(5) ParOldGen total 614400K, used 48K [... [debug][gc,heap] GC(5) object space 614400K, 0% used [... [trace][gc,ergo] GC(5) AdaptiveSizePolicy::minor_collection_end: minor gc cost: 0.303590 average: 0.221932 [trace][gc,ergo] GC(5) minor pause: 9.540876 minor period 21.885927 [trace][gc,ergo] GC(5) AdaptiveSizePolicy::update_averages: survived: 36586064 promoted: 8192 overflow: false [debug][gc,ergo] GC(5) AdaptiveSizeStart: collection: 6 [trace][gc,ergo] GC(5) old_gen_capacity: 629145600 young_gen_capacity: 246939648 [trace][gc,ergo] GC(5) avg_survived: 36091504.000000 avg_deviation: 377959.750000 [debug][gc,ergo] GC(5) avg_survived_padded_avg: 37225384.000000 [trace][gc,ergo] GC(5) avg_promoted_avg: 9575.137695 avg_promoted_dev: 1991.718140 [debug][gc,ergo] GC(5) avg_promoted_padded_avg: 15550.291992 avg_pretenured_padded_avg: 0.000000 tenuring_thresh: 5 target_size: 37748736 [trace][gc,ergo] GC(5) PSAdaptiveSizePolicy::adjust_eden_for_throughput (is_full: 0, cur_eden: 209715200): mutator_cost 0.778068 major_gc_cost 0.000000 minor_gc_cost 0.221932 [trace][gc,ergo] GC(5) Scaled eden increment: 209715200 by 1.000000 down to 209715200 [trace][gc,ergo] GC(5) Adjusting eden for throughput (avg 0.778068 goal 0.990000). desired_eden_size 419430400 eden delta 209715200 -- Suggested to increase "eden" space to improve throughput [debug][gc,ergo] GC(5) PSAdaptiveSizePolicy::compute_eden_space_size limits: desired_eden_size: 419430400 old_eden_size: 209715200 eden_limit: 382205952 cur_eden: 209715200 max_eden_size: 382205952 avg_young_live: 36091504 [debug][gc,ergo] GC(5) PSAdaptiveSizePolicy::compute_eden_space_size: costs minor_time: 0.221932 major_cost: 0.000000 mutator_cost: 0.778068 throughput_goal: 0.990000 [trace][gc,ergo] GC(5) Minor_pause: 0.010203 major_pause: 0.000000 minor_interval: 0.124147 major_interval: 0.000000 pause_goal: 18446744073709552.000000 [debug][gc,ergo] GC(5) Live_space: 304526976 free_space: 419430400 [trace][gc,ergo] GC(5) Base_footprint: 268435456 avg_young_live: 36091504 avg_old_live: 0 [debug][gc,ergo] GC(5) Old eden_size: 209715200 desired_eden_size: 382205952 [trace][gc,ergo] GC(5) PSAdaptiveSizePolicy::check_gc_overhead_limit: promo_limit: 629145600 max_eden_size: 382205952 total_free_limit: 1011351552 max_old_gen_size: 629145600 max_eden_size: 382205952 mem_free_limit: 20227031
[trace][gc,ergo] GC(5) PSYoungGen::resize_spaces (requested_eden_size: 382205952, requested_survivor_size: 37748736) [trace][gc,ergo] GC(5) eden: [0xda800000..0x0e7000000) 209715200 [trace][gc,ergo] GC(5) from: [0xfdc80000..0x100000000) 37224448 [trace][gc,ergo] GC(5) to: [0xe7000000..0x0f3800000) 209715200 [trace][gc,ergo] GC(5) Eden, to, from: [trace][gc,ergo] GC(5) [eden_start .. eden_end): [0xda800000 .. 0x0fb800000) 553648128 [trace][gc,ergo] GC(5) [ to_start .. to_end): [0xfb800000 .. 0x0fdc00000) 37748736 [trace][gc,ergo] GC(5) [from_start .. from_end): [0xfdc80000 .. 0x100000000) 37224448 -- Increased "eden" space from 209715200 to 553648128 [trace][gc,ergo] GC(5) AdaptiveSizePolicy::survivor space sizes: collection: 6 (37224448, 209715200) -> (37224448, 37748736) [trace][gc,ergo] GC(5) Young generation size: desired eden: 382205952 survivor: 37748736 used: 36586064 capacity: 590872576 gen limits: 629145600 / 629145600 [debug][gc,ergo] GC(5) AdaptiveSizeStop: collection: 6 [info ][gc,heap] GC(5) PSYoungGen: 240522K->35728K(577024K) [info ][gc,heap] GC(5) ParOldGen: 48K->56K(614400K) [info ][gc ] GC(5) Pause Young (Allocation Failure) 234M->34M(1163M) 9.932ms [debug][gc,heap] GC(5) Heap after GC invocations=6 (full 0): PSYoungGen total 577024K, used 35728K [... [debug][gc,heap] GC(5) eden space 540672K, 0% used [... [debug][gc,heap] GC(5) from space 36352K, 98% used [... [debug][gc,heap] GC(5) to space 36864K, 0% used [... [debug][gc,heap] GC(5) ParOldGen total 614400K, used 56K [... [debug][gc,heap] GC(5) object space 614400K, 0% used [...
In this example, the "eden" space was increased based on the Adaptive Size Policy suggestion. It is trying to increase the application execution time to meet the throughput goal of 99%.
Table of Contents
Heap Memory Area and Size Control
JVM Garbage Collection Logging
Introduction of Garbage Collectors
Serial Collector - "+XX:+UseSerialGC"
►Parallel Collector - "+XX:+UseParallelGC"
Parallel Collector GC Log Message Format
Log Message Types from Parallel Collector
"--Xlog:gc+task+time=debug" - Print GC Threads
"-XX:ParallelGCThreads" - # of Threads
Parallel Collector Stops Application for Minor/Major GC
PSYoungGen Collector Using Tenuring Age
Parallel Collector Changing NewRatio and SurvivorRatio
Parallel Collector Adaptive Size Policy
Adaptive Size Policy Log Messages
"-Xlog:gc+ergo=trace" - Minor GC Report
Adaptive Size Policy Changed Survivor Space
►Adaptive Size Policy Changed Eden Space
Adaptive Size Policy for Best Latency
Parallel Collector Stopped using Young Generation
Adaptive Size Policy for Best Throughput
Concurrent Mark-Sweep (CMS) Collector - "+XX:+UseConcMarkSweepGC"
Garbage First (G1) Collector - "+XX:+UseG1GC"
The Z Garbage Collector (ZGC) - "+XX:+UseZGC"
Object References and Garbage Collection
Garbage Collection Performance Test Program
Performance Tests on Serial Collector
Performance Tests on Parallel collector
Performance Tests on Concurrent collector
Performance Tests on G1 collector