annotate src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @ 17833:bfdf528be8e8

8038498: Fix includes and C inlining after 8035330 Summary: Change 8035330: Remove G1ParScanPartialArrayClosure and G1ParScanHeapEvacClosure broke the debug build on AIX. The method do_oop_partial_array() is added in a header, but requires the inline function par_write_ref() through several inlined calls. In some cpp files, like arguments.cpp, par_write_ref() is not defined as the corresponding inline header and is not included. The AIX debug VM does not start because of the missing symbol. This change solves this by cleaning up include dependencies. Reviewed-by: tschatzl, stefank
author tschatzl
date Fri, 04 Apr 2014 10:43:56 +0200
parents cfd4aac53239
children 52b4284cb496 c02ec279b062
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
1 /*
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
4 *
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
7 * published by the Free Software Foundation.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
8 *
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
13 * accompanied this code).
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
14 *
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1394
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1394
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1394
diff changeset
21 * questions.
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
22 *
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
23 */
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
28 #include "gc_implementation/g1/collectionSetChooser.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
29 #include "gc_implementation/g1/g1MMUTracker.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
30 #include "memory/collectorPolicy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
31
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
32 // A G1CollectorPolicy makes policy decisions that determine the
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
33 // characteristics of the collector. Examples include:
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
34 // * choice of collection set.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
35 // * when to collect.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
36
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
37 class HeapRegion;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
38 class CollectionSetChooser;
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
39 class G1GCPhaseTimes;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
40
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
41 // TraceGen0Time collects data on _both_ young and mixed evacuation pauses
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
42 // (the latter may contain non-young regions - i.e. regions that are
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
43 // technically in Gen1) while TraceGen1Time collects data about full GCs.
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6109
diff changeset
44 class TraceGen0TimeData : public CHeapObj<mtGC> {
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
45 private:
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
46 unsigned _young_pause_num;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
47 unsigned _mixed_pause_num;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
48
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
49 NumberSeq _all_stop_world_times_ms;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
50 NumberSeq _all_yield_times_ms;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
51
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
52 NumberSeq _total;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
53 NumberSeq _other;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
54 NumberSeq _root_region_scan_wait;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
55 NumberSeq _parallel;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
56 NumberSeq _ext_root_scan;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
57 NumberSeq _satb_filtering;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
58 NumberSeq _update_rs;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
59 NumberSeq _scan_rs;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
60 NumberSeq _obj_copy;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
61 NumberSeq _termination;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
62 NumberSeq _parallel_other;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
63 NumberSeq _clear_ct;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
64
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
65 void print_summary(const char* str, const NumberSeq* seq) const;
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
66 void print_summary_sd(const char* str, const NumberSeq* seq) const;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
67
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
68 public:
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
69 TraceGen0TimeData() : _young_pause_num(0), _mixed_pause_num(0) {};
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
70 void record_start_collection(double time_to_stop_the_world_ms);
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
71 void record_yield_time(double yield_time_ms);
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
72 void record_end_collection(double pause_time_ms, G1GCPhaseTimes* phase_times);
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
73 void increment_young_collection_count();
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
74 void increment_mixed_collection_count();
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
75 void print() const;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
76 };
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
77
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6109
diff changeset
78 class TraceGen1TimeData : public CHeapObj<mtGC> {
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
79 private:
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
80 NumberSeq _all_full_gc_times;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
81
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
82 public:
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
83 void record_full_collection(double full_gc_time_ms);
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
84 void print() const;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
85 };
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
86
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
87 // There are three command line options related to the young gen size:
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
88 // NewSize, MaxNewSize and NewRatio (There is also -Xmn, but that is
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
89 // just a short form for NewSize==MaxNewSize). G1 will use its internal
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
90 // heuristics to calculate the actual young gen size, so these options
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
91 // basically only limit the range within which G1 can pick a young gen
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
92 // size. Also, these are general options taking byte sizes. G1 will
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
93 // internally work with a number of regions instead. So, some rounding
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
94 // will occur.
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
95 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
96 // If nothing related to the the young gen size is set on the command
7449
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
97 // line we should allow the young gen to be between G1NewSizePercent
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
98 // and G1MaxNewSizePercent of the heap size. This means that every time
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
99 // the heap size changes, the limits for the young gen size will be
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
100 // recalculated.
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
101 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
102 // If only -XX:NewSize is set we should use the specified value as the
7449
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
103 // minimum size for young gen. Still using G1MaxNewSizePercent of the
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
104 // heap as maximum.
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
105 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
106 // If only -XX:MaxNewSize is set we should use the specified value as the
7449
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
107 // maximum size for young gen. Still using G1NewSizePercent of the heap
37f7535e5f18 8001424: G1: Rename certain G1-specific flags
johnc
parents: 6818
diff changeset
108 // as minimum.
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
109 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
110 // If -XX:NewSize and -XX:MaxNewSize are both specified we use these values.
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
111 // No updates when the heap size changes. There is a special case when
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
112 // NewSize==MaxNewSize. This is interpreted as "fixed" and will use a
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
113 // different heuristic for calculating the collection set when we do mixed
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
114 // collection.
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
115 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
116 // If only -XX:NewRatio is set we should use the specified ratio of the heap
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
117 // as both min and max. This will be interpreted as "fixed" just like the
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
118 // NewSize==MaxNewSize case above. But we will update the min and max
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
119 // everytime the heap size changes.
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
120 //
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
121 // NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if it is
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
122 // combined with either NewSize or MaxNewSize. (A warning message is printed.)
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 6109
diff changeset
123 class G1YoungGenSizer : public CHeapObj<mtGC> {
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
124 private:
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
125 enum SizerKind {
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
126 SizerDefaults,
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
127 SizerNewSizeOnly,
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
128 SizerMaxNewSizeOnly,
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
129 SizerMaxAndNewSize,
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
130 SizerNewRatio
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
131 };
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
132 SizerKind _sizer_kind;
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
133 uint _min_desired_young_length;
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
134 uint _max_desired_young_length;
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
135 bool _adaptive_size;
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
136 uint calculate_default_min_length(uint new_number_of_heap_regions);
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
137 uint calculate_default_max_length(uint new_number_of_heap_regions);
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
138
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
139 // Update the given values for minimum and maximum young gen length in regions
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
140 // given the number of heap regions depending on the kind of sizing algorithm.
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
141 void recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length);
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
142
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
143 public:
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
144 G1YoungGenSizer();
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
145 // Calculate the maximum length of the young gen given the number of regions
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
146 // depending on the sizing algorithm.
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
147 uint max_young_length(uint number_of_heap_regions);
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
148
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
149 void heap_size_changed(uint new_number_of_heap_regions);
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
150 uint min_desired_young_length() {
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
151 return _min_desired_young_length;
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
152 }
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
153 uint max_desired_young_length() {
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
154 return _max_desired_young_length;
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
155 }
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
156 bool adaptive_young_list_length() {
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
157 return _adaptive_size;
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
158 }
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
159 };
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
160
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
161 class G1CollectorPolicy: public CollectorPolicy {
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
162 private:
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
163 // either equal to the number of parallel threads, if ParallelGCThreads
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
164 // has been set, or 1 otherwise
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
165 int _parallel_gc_threads;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
166
4095
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
167 // The number of GC threads currently active.
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
168 uintx _no_of_gc_threads;
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
169
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
170 enum SomePrivateConstants {
942
2c79770d1f6e 6819085: G1: use larger and/or user settable region size
tonyp
parents: 936
diff changeset
171 NumPrevPausesForHeuristics = 10
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
172 };
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
173
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
174 G1MMUTracker* _mmu_tracker;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
175
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
176 void initialize_alignments();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
177 void initialize_flags();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
178
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
179 CollectionSetChooser* _collectionSetChooser;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
180
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
181 double _full_collection_start_sec;
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
182 uint _cur_collection_pause_used_regions_at_start;
890
6cb8e9df7174 6819077: G1: first GC thread coming late into the GC.
johnc
parents: 838
diff changeset
183
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
184 // These exclude marking times.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
185 TruncatedSeq* _recent_gc_times_ms;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
186
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
187 TruncatedSeq* _concurrent_mark_remark_times_ms;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
188 TruncatedSeq* _concurrent_mark_cleanup_times_ms;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
189
6109
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
190 TraceGen0TimeData _trace_gen0_time_data;
bbc900c2482a 7172279: G1: Clean up TraceGen0Time and TraceGen1Time data gathering
brutisso
parents: 6059
diff changeset
191 TraceGen1TimeData _trace_gen1_time_data;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
192
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
193 double _stop_world_start;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
194
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
195 // indicates whether we are in young or mixed GC mode
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
196 bool _gcs_are_young;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
197
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
198 uint _young_list_target_length;
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
199 uint _young_list_fixed_length;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
200
1991
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
201 // The max number of regions we can extend the eden by while the GC
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
202 // locker is active. This should be >= _young_list_target_length;
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
203 uint _young_list_max_length;
1991
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
204
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
205 bool _last_gc_was_young;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
206
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
207 bool _during_marking;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
208 bool _in_marking_window;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
209 bool _in_marking_window_im;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
210
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
211 SurvRateGroup* _short_lived_surv_rate_group;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
212 SurvRateGroup* _survivor_surv_rate_group;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
213 // add here any more surv rate groups
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
214
1356
56507bcd639e 6937160: G1: should observe GCTimeRatio
tonyp
parents: 1111
diff changeset
215 double _gc_overhead_perc;
56507bcd639e 6937160: G1: should observe GCTimeRatio
tonyp
parents: 1111
diff changeset
216
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
217 double _reserve_factor;
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
218 uint _reserve_regions;
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
219
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
220 bool during_marking() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
221 return _during_marking;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
222 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
223
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
224 enum PredictionConstants {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
225 TruncatedSeqLength = 10
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
226 };
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
227
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
228 TruncatedSeq* _alloc_rate_ms_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
229 double _prev_collection_pause_end_ms;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
230
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
231 TruncatedSeq* _rs_length_diff_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
232 TruncatedSeq* _cost_per_card_ms_seq;
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
233 TruncatedSeq* _young_cards_per_entry_ratio_seq;
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
234 TruncatedSeq* _mixed_cards_per_entry_ratio_seq;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
235 TruncatedSeq* _cost_per_entry_ms_seq;
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
236 TruncatedSeq* _mixed_cost_per_entry_ms_seq;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
237 TruncatedSeq* _cost_per_byte_ms_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
238 TruncatedSeq* _constant_other_time_ms_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
239 TruncatedSeq* _young_other_cost_per_region_ms_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
240 TruncatedSeq* _non_young_other_cost_per_region_ms_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
241
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
242 TruncatedSeq* _pending_cards_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
243 TruncatedSeq* _rs_lengths_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
244
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
245 TruncatedSeq* _cost_per_byte_ms_during_cm_seq;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
246
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
247 G1YoungGenSizer* _young_gen_sizer;
3920
af2ab04e0038 6929868: G1: introduce min / max young gen size bounds
brutisso
parents: 3919
diff changeset
248
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
249 uint _eden_cset_region_length;
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
250 uint _survivor_cset_region_length;
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
251 uint _old_cset_region_length;
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
252
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
253 void init_cset_region_lengths(uint eden_cset_region_length,
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
254 uint survivor_cset_region_length);
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
255
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
256 uint eden_cset_region_length() { return _eden_cset_region_length; }
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
257 uint survivor_cset_region_length() { return _survivor_cset_region_length; }
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
258 uint old_cset_region_length() { return _old_cset_region_length; }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
259
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
260 uint _free_regions_at_end_of_collection;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
261
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
262 size_t _recorded_rs_lengths;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
263 size_t _max_rs_lengths;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
264 double _sigma;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
265
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
266 size_t _rs_lengths_prediction;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
267
4912
a9647476d1a4 7132029: G1: mixed GC phase lasts for longer than it should
tonyp
parents: 4837
diff changeset
268 double sigma() { return _sigma; }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
269
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
270 // A function that prevents us putting too much stock in small sample
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
271 // sets. Returns a number between 2.0 and 1.0, depending on the number
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
272 // of samples. 5 or more samples yields one; fewer scales linearly from
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
273 // 2.0 at 1 sample to 1.0 at 5.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
274 double confidence_factor(int samples) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
275 if (samples > 4) return 1.0;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
276 else return 1.0 + sigma() * ((double)(5 - samples))/2.0;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
277 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
278
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
279 double get_new_neg_prediction(TruncatedSeq* seq) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
280 return seq->davg() - sigma() * seq->dsd();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
281 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
282
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
283 #ifndef PRODUCT
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
284 bool verify_young_ages(HeapRegion* head, SurvRateGroup *surv_rate_group);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
285 #endif // PRODUCT
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
286
1111
44f61c24ddab 6862387: tune concurrent refinement further
iveresov
parents: 942
diff changeset
287 void adjust_concurrent_refinement(double update_rs_time,
44f61c24ddab 6862387: tune concurrent refinement further
iveresov
parents: 942
diff changeset
288 double update_rs_processed_buffers,
44f61c24ddab 6862387: tune concurrent refinement further
iveresov
parents: 942
diff changeset
289 double goal_ms);
44f61c24ddab 6862387: tune concurrent refinement further
iveresov
parents: 942
diff changeset
290
4095
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
291 uintx no_of_gc_threads() { return _no_of_gc_threads; }
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
292 void set_no_of_gc_threads(uintx v) { _no_of_gc_threads = v; }
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
293
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
294 double _pause_time_target_ms;
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
295
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
296 size_t _pending_cards;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
297
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
298 public:
4095
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
299 // Accessors
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
300
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
301 void set_region_eden(HeapRegion* hr, int young_index_in_cset) {
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
302 hr->set_young();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
303 hr->install_surv_rate_group(_short_lived_surv_rate_group);
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
304 hr->set_young_index_in_cset(young_index_in_cset);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
305 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
306
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
307 void set_region_survivor(HeapRegion* hr, int young_index_in_cset) {
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
308 assert(hr->is_young() && hr->is_survivor(), "pre-condition");
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
309 hr->install_surv_rate_group(_survivor_surv_rate_group);
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
310 hr->set_young_index_in_cset(young_index_in_cset);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
311 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
312
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
313 #ifndef PRODUCT
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
314 bool verify_young_ages();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
315 #endif // PRODUCT
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
316
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
317 double get_new_prediction(TruncatedSeq* seq) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
318 return MAX2(seq->davg() + sigma() * seq->dsd(),
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
319 seq->davg() * confidence_factor(seq->num()));
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
320 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
321
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
322 void record_max_rs_lengths(size_t rs_lengths) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
323 _max_rs_lengths = rs_lengths;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
324 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
325
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
326 size_t predict_rs_length_diff() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
327 return (size_t) get_new_prediction(_rs_length_diff_seq);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
328 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
329
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
330 double predict_alloc_rate_ms() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
331 return get_new_prediction(_alloc_rate_ms_seq);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
332 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
333
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
334 double predict_cost_per_card_ms() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
335 return get_new_prediction(_cost_per_card_ms_seq);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
336 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
337
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
338 double predict_rs_update_time_ms(size_t pending_cards) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
339 return (double) pending_cards * predict_cost_per_card_ms();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
340 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
341
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
342 double predict_young_cards_per_entry_ratio() {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
343 return get_new_prediction(_young_cards_per_entry_ratio_seq);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
344 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
345
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
346 double predict_mixed_cards_per_entry_ratio() {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
347 if (_mixed_cards_per_entry_ratio_seq->num() < 2) {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
348 return predict_young_cards_per_entry_ratio();
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
349 } else {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
350 return get_new_prediction(_mixed_cards_per_entry_ratio_seq);
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
351 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
352 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
353
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
354 size_t predict_young_card_num(size_t rs_length) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
355 return (size_t) ((double) rs_length *
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
356 predict_young_cards_per_entry_ratio());
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
357 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
358
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
359 size_t predict_non_young_card_num(size_t rs_length) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
360 return (size_t) ((double) rs_length *
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
361 predict_mixed_cards_per_entry_ratio());
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
362 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
363
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
364 double predict_rs_scan_time_ms(size_t card_num) {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
365 if (gcs_are_young()) {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
366 return (double) card_num * get_new_prediction(_cost_per_entry_ms_seq);
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
367 } else {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
368 return predict_mixed_rs_scan_time_ms(card_num);
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
369 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
370 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
371
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
372 double predict_mixed_rs_scan_time_ms(size_t card_num) {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
373 if (_mixed_cost_per_entry_ms_seq->num() < 3) {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
374 return (double) card_num * get_new_prediction(_cost_per_entry_ms_seq);
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
375 } else {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
376 return (double) (card_num *
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
377 get_new_prediction(_mixed_cost_per_entry_ms_seq));
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
378 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
379 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
380
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
381 double predict_object_copy_time_ms_during_cm(size_t bytes_to_copy) {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
382 if (_cost_per_byte_ms_during_cm_seq->num() < 3) {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
383 return (1.1 * (double) bytes_to_copy) *
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
384 get_new_prediction(_cost_per_byte_ms_seq);
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
385 } else {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
386 return (double) bytes_to_copy *
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
387 get_new_prediction(_cost_per_byte_ms_during_cm_seq);
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
388 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
389 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
390
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
391 double predict_object_copy_time_ms(size_t bytes_to_copy) {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
392 if (_in_marking_window && !_in_marking_window_im) {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
393 return predict_object_copy_time_ms_during_cm(bytes_to_copy);
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
394 } else {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
395 return (double) bytes_to_copy *
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
396 get_new_prediction(_cost_per_byte_ms_seq);
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
397 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
398 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
399
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
400 double predict_constant_other_time_ms() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
401 return get_new_prediction(_constant_other_time_ms_seq);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
402 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
403
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
404 double predict_young_other_time_ms(size_t young_num) {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
405 return (double) young_num *
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
406 get_new_prediction(_young_other_cost_per_region_ms_seq);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
407 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
408
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
409 double predict_non_young_other_time_ms(size_t non_young_num) {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
410 return (double) non_young_num *
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
411 get_new_prediction(_non_young_other_cost_per_region_ms_seq);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
412 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
413
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
414 double predict_base_elapsed_time_ms(size_t pending_cards);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
415 double predict_base_elapsed_time_ms(size_t pending_cards,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
416 size_t scanned_cards);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
417 size_t predict_bytes_to_copy(HeapRegion* hr);
6611
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
418 double predict_region_elapsed_time_ms(HeapRegion* hr, bool for_young_gc);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
419
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
420 void set_recorded_rs_lengths(size_t rs_lengths);
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
421
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
422 uint cset_region_length() { return young_cset_region_length() +
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
423 old_cset_region_length(); }
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
424 uint young_cset_region_length() { return eden_cset_region_length() +
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
425 survivor_cset_region_length(); }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
426
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
427 double predict_survivor_regions_evac_time();
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
428
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
429 void cset_regions_freed() {
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
430 bool propagate = _last_gc_was_young && !_in_marking_window;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
431 _short_lived_surv_rate_group->all_surviving_words_recorded(propagate);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
432 _survivor_surv_rate_group->all_surviving_words_recorded(propagate);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
433 // also call it on any more surv rate groups
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
434 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
435
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
436 G1MMUTracker* mmu_tracker() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
437 return _mmu_tracker;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
438 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
439
1656
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
440 double max_pause_time_ms() {
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
441 return _mmu_tracker->max_gc_time() * 1000.0;
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
442 }
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
443
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
444 double predict_remark_time_ms() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
445 return get_new_prediction(_concurrent_mark_remark_times_ms);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
446 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
447
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
448 double predict_cleanup_time_ms() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
449 return get_new_prediction(_concurrent_mark_cleanup_times_ms);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
450 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
451
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
452 // Returns an estimate of the survival rate of the region at yg-age
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
453 // "yg_age".
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
454 double predict_yg_surv_rate(int age, SurvRateGroup* surv_rate_group) {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
455 TruncatedSeq* seq = surv_rate_group->get_seq(age);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
456 if (seq->num() == 0)
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
457 gclog_or_tty->print("BARF! age is %d", age);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
458 guarantee( seq->num() > 0, "invariant" );
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
459 double pred = get_new_prediction(seq);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
460 if (pred > 1.0)
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
461 pred = 1.0;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
462 return pred;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
463 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
464
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
465 double predict_yg_surv_rate(int age) {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
466 return predict_yg_surv_rate(age, _short_lived_surv_rate_group);
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
467 }
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
468
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
469 double accum_yg_surv_rate_pred(int age) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
470 return _short_lived_surv_rate_group->accum_surv_rate_pred(age);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
471 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
472
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
473 private:
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
474 // Statistics kept per GC stoppage, pause or full.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
475 TruncatedSeq* _recent_prev_end_times_for_all_gcs_sec;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
476
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
477 // Add a new GC of the given duration and end time to the record.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
478 void update_recent_gc_times(double end_time_sec, double elapsed_ms);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
479
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
480 // The head of the list (via "next_in_collection_set()") representing the
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
481 // current collection set. Set from the incrementally built collection
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
482 // set at the start of the pause.
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
483 HeapRegion* _collection_set;
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
484
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
485 // The number of bytes in the collection set before the pause. Set from
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
486 // the incrementally built collection set at the start of an evacuation
6611
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
487 // pause, and incremented in finalize_cset() when adding old regions
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
488 // (if any) to the collection set.
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
489 size_t _collection_set_bytes_used_before;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
490
6611
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
491 // The number of bytes copied during the GC.
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
492 size_t _bytes_copied_during_gc;
7383557659bd 7185699: G1: Prediction model discrepancies
johnc
parents: 6220
diff changeset
493
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
494 // The associated information that is maintained while the incremental
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
495 // collection set is being built with young regions. Used to populate
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
496 // the recorded info for the evacuation pause.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
497
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
498 enum CSetBuildType {
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
499 Active, // We are actively building the collection set
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
500 Inactive // We are not actively building the collection set
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
501 };
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
502
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
503 CSetBuildType _inc_cset_build_state;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
504
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
505 // The head of the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
506 HeapRegion* _inc_cset_head;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
507
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
508 // The tail of the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
509 HeapRegion* _inc_cset_tail;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
510
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
511 // The number of bytes in the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
512 // Used to set _collection_set_bytes_used_before at the start of
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
513 // an evacuation pause.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
514 size_t _inc_cset_bytes_used_before;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
515
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
516 // Used to record the highest end of heap region in collection set
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
517 HeapWord* _inc_cset_max_finger;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
518
4727
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
519 // The RSet lengths recorded for regions in the CSet. It is updated
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
520 // by the thread that adds a new region to the CSet. We assume that
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
521 // only one thread can be allocating a new CSet region (currently,
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
522 // it does so after taking the Heap_lock) hence no need to
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
523 // synchronize updates to this field.
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
524 size_t _inc_cset_recorded_rs_lengths;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
525
4727
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
526 // A concurrent refinement thread periodcially samples the young
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
527 // region RSets and needs to update _inc_cset_recorded_rs_lengths as
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
528 // the RSets grow. Instead of having to syncronize updates to that
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
529 // field we accumulate them in this field and add it to
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
530 // _inc_cset_recorded_rs_lengths_diffs at the start of a GC.
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
531 ssize_t _inc_cset_recorded_rs_lengths_diffs;
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
532
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
533 // The predicted elapsed time it will take to collect the regions in
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
534 // the CSet. This is updated by the thread that adds a new region to
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
535 // the CSet. See the comment for _inc_cset_recorded_rs_lengths about
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
536 // MT-safety assumptions.
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
537 double _inc_cset_predicted_elapsed_time_ms;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
538
4727
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
539 // See the comment for _inc_cset_recorded_rs_lengths_diffs.
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
540 double _inc_cset_predicted_elapsed_time_ms_diffs;
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
541
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
542 // Stash a pointer to the g1 heap.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
543 G1CollectedHeap* _g1;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
544
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
545 G1GCPhaseTimes* _phase_times;
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
546
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
547 // The ratio of gc time to elapsed time, computed over recent pauses.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
548 double _recent_avg_pause_time_ratio;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
549
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
550 double recent_avg_pause_time_ratio() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
551 return _recent_avg_pause_time_ratio;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
552 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
553
1359
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
554 // At the end of a pause we check the heap occupancy and we decide
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
555 // whether we will start a marking cycle during the next pause. If
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
556 // we decide that we want to do that, we will set this parameter to
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
557 // true. So, this parameter will stay true between the end of a
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
558 // pause and the beginning of a subsequent pause (not necessarily
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
559 // the next one, see the comments on the next field) when we decide
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
560 // that we will indeed start a marking cycle and do the initial-mark
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
561 // work.
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
562 volatile bool _initiate_conc_mark_if_possible;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
563
1359
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
564 // If initiate_conc_mark_if_possible() is set at the beginning of a
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
565 // pause, it is a suggestion that the pause should start a marking
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
566 // cycle by doing the initial-mark work. However, it is possible
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
567 // that the concurrent marking thread is still finishing up the
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
568 // previous marking cycle (e.g., clearing the next marking
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
569 // bitmap). If that is the case we cannot start a new cycle and
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
570 // we'll have to wait for the concurrent marking thread to finish
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
571 // what it is doing. In this case we will postpone the marking cycle
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
572 // initiation decision for the next pause. When we eventually decide
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
573 // to start a cycle, we will set _during_initial_mark_pause which
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
574 // will stay true until the end of the initial-mark pause and it's
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
575 // the condition that indicates that a pause is doing the
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
576 // initial-mark work.
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
577 volatile bool _during_initial_mark_pause;
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
578
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
579 bool _last_young_gc;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
580
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
581 // This set of variables tracks the collector efficiency, in order to
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
582 // determine whether we should initiate a new marking.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
583 double _cur_mark_stop_world_time_ms;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
584 double _mark_remark_start_sec;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
585 double _mark_cleanup_start_sec;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
586
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
587 // Update the young list target length either by setting it to the
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
588 // desired fixed value or by calculating it using G1's pause
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
589 // prediction model. If no rs_lengths parameter is passed, predict
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
590 // the RS lengths using the prediction model, otherwise use the
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
591 // given rs_lengths as the prediction.
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
592 void update_young_list_target_length(size_t rs_lengths = (size_t) -1);
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
593
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
594 // Calculate and return the minimum desired young list target
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
595 // length. This is the minimum desired young list length according
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
596 // to the user's inputs.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
597 uint calculate_young_list_desired_min_length(uint base_min_length);
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
598
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
599 // Calculate and return the maximum desired young list target
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
600 // length. This is the maximum desired young list length according
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
601 // to the user's inputs.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
602 uint calculate_young_list_desired_max_length();
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
603
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
604 // Calculate and return the maximum young list target length that
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
605 // can fit into the pause time goal. The parameters are: rs_lengths
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
606 // represent the prediction of how large the young RSet lengths will
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
607 // be, base_min_length is the alreay existing number of regions in
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
608 // the young list, min_length and max_length are the desired min and
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
609 // max young list length according to the user's inputs.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
610 uint calculate_young_list_target_length(size_t rs_lengths,
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
611 uint base_min_length,
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
612 uint desired_min_length,
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
613 uint desired_max_length);
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
614
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
615 // Check whether a given young length (young_length) fits into the
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
616 // given target pause time and whether the prediction for the amount
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
617 // of objects to be copied for the given length will fit into the
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
618 // given free space (expressed by base_free_regions). It is used by
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
619 // calculate_young_list_target_length().
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
620 bool predict_will_fit(uint young_length, double base_time_ms,
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
621 uint base_free_regions, double target_pause_time_ms);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
622
8681
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
623 // Calculate the minimum number of old regions we'll add to the CSet
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
624 // during a mixed GC.
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
625 uint calc_min_old_cset_length();
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
626
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
627 // Calculate the maximum number of old regions we'll add to the CSet
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
628 // during a mixed GC.
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
629 uint calc_max_old_cset_length();
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
630
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
631 // Returns the given amount of uncollected reclaimable space
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
632 // as a percentage of the current heap capacity.
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
633 double reclaimable_bytes_perc(size_t reclaimable_bytes);
27714220e50e 8007036: G1: Too many old regions added to last mixed GC
johnc
parents: 7449
diff changeset
634
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
635 public:
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
636
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
637 G1CollectorPolicy();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
638
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
639 virtual G1CollectorPolicy* as_g1_policy() { return this; }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
640
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
641 virtual CollectorPolicy::Name kind() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
642 return CollectorPolicy::G1CollectorPolicyKind;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
643 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
644
6219
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
645 G1GCPhaseTimes* phase_times() const { return _phase_times; }
922993931b3d 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
brutisso
parents: 6109
diff changeset
646
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
647 // Check the current value of the young list RSet lengths and
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
648 // compare it against the last prediction. If the current value is
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
649 // higher, recalculate the young list target length prediction.
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
650 void revise_young_list_target_length_if_necessary();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
651
3920
af2ab04e0038 6929868: G1: introduce min / max young gen size bounds
brutisso
parents: 3919
diff changeset
652 // This should be called after the heap is resized.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
653 void record_new_heap_size(uint new_number_of_regions);
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
654
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
655 void init();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
656
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
657 // Create jstat counters for the policy.
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
658 virtual void initialize_gc_policy_counters();
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
659
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
660 virtual HeapWord* mem_allocate_work(size_t size,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
661 bool is_tlab,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
662 bool* gc_overhead_limit_was_exceeded);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
663
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
664 // This method controls how a collector handles one or more
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
665 // of its generations being fully allocated.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
666 virtual HeapWord* satisfy_failed_allocation(size_t size,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
667 bool is_tlab);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
668
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
669 BarrierSet::Name barrier_set_name() { return BarrierSet::G1SATBCTLogging; }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
670
4834
6a78aa6ac1ff 7132311: G1: assert((s == klass->oop_size(this)) || (Universe::heap()->is_gc_active() && ((is_typeArray()...
brutisso
parents: 4829
diff changeset
671 bool need_to_start_conc_mark(const char* source, size_t alloc_word_size = 0);
4829
9509c20bba28 6976060: G1: humongous object allocations should initiate marking cycles when necessary
brutisso
parents: 4787
diff changeset
672
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
673 // Record the start and end of an evacuation pause.
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
674 void record_collection_pause_start(double start_time_sec);
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10291
diff changeset
675 void record_collection_pause_end(double pause_time_ms, EvacuationInfo& evacuation_info);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
676
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
677 // Record the start and end of a full collection.
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
678 void record_full_collection_start();
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
679 void record_full_collection_end();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
680
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
681 // Must currently be called while the world is stopped.
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
682 void record_concurrent_mark_init_end(double mark_init_elapsed_time_ms);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
683
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
684 // Record start and end of remark.
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
685 void record_concurrent_mark_remark_start();
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
686 void record_concurrent_mark_remark_end();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
687
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
688 // Record start, end, and completion of cleanup.
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
689 void record_concurrent_mark_cleanup_start();
4095
bca17e38de00 6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents: 4090
diff changeset
690 void record_concurrent_mark_cleanup_end(int no_of_gc_threads);
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
691 void record_concurrent_mark_cleanup_completed();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
692
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
693 // Records the information about the heap size for reporting in
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
694 // print_detailed_heap_transition
10291
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
695 void record_heap_size_info_at_start(bool full);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
696
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
697 // Print heap sizing transition (with less and more detail).
3764
053d84a76d3d 7032531: G1: enhance GC logging to include more accurate eden / survivor size transitions
tonyp
parents: 2430
diff changeset
698 void print_heap_transition();
10291
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
699 void print_detailed_heap_transition(bool full = false);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
700
10098
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
701 void record_stop_world_start();
71013d764f6e 8010780: G1: Eden occupancy/capacity output wrong after a full GC
johnc
parents: 8681
diff changeset
702 void record_concurrent_pause();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
703
3830
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
704 // Record how much space we copied during a GC. This is typically
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
705 // called when a GC alloc region is being retired.
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
706 void record_bytes_copied_during_gc(size_t bytes) {
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
707 _bytes_copied_during_gc += bytes;
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
708 }
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
709
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
710 // The amount of space we copied during a GC.
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
711 size_t bytes_copied_during_gc() {
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
712 return _bytes_copied_during_gc;
f44782f04dd4 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 3823
diff changeset
713 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
714
5972
9a9bb0010c91 7156764: Remove unused size parameter from some CollectedHeap methods
brutisso
parents: 4912
diff changeset
715 // Determine whether there are candidate regions so that the
9a9bb0010c91 7156764: Remove unused size parameter from some CollectedHeap methods
brutisso
parents: 4912
diff changeset
716 // next GC should be mixed. The two action strings are used
9a9bb0010c91 7156764: Remove unused size parameter from some CollectedHeap methods
brutisso
parents: 4912
diff changeset
717 // in the ergo output when the method returns true or false.
4912
a9647476d1a4 7132029: G1: mixed GC phase lasts for longer than it should
tonyp
parents: 4837
diff changeset
718 bool next_gc_should_be_mixed(const char* true_action_str,
a9647476d1a4 7132029: G1: mixed GC phase lasts for longer than it should
tonyp
parents: 4837
diff changeset
719 const char* false_action_str);
a9647476d1a4 7132029: G1: mixed GC phase lasts for longer than it should
tonyp
parents: 4837
diff changeset
720
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
721 // Choose a new collection set. Marks the chosen regions as being
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
722 // "in_collection_set", and links them together. The head and number of
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
723 // the collection set are available via access methods.
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10291
diff changeset
724 void finalize_cset(double target_pause_time_ms, EvacuationInfo& evacuation_info);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
725
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
726 // The head of the list (via "next_in_collection_set()") representing the
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
727 // current collection set.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
728 HeapRegion* collection_set() { return _collection_set; }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
729
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
730 void clear_collection_set() { _collection_set = NULL; }
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
731
4090
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
732 // Add old region "hr" to the CSet.
a88de71c4e3a 7097002: G1: remove a lot of unused / redundant code from the G1CollectorPolicy class
tonyp
parents: 4023
diff changeset
733 void add_old_region_to_cset(HeapRegion* hr);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
734
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
735 // Incremental CSet Support
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
736
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
737 // The head of the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
738 HeapRegion* inc_cset_head() { return _inc_cset_head; }
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
739
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
740 // The tail of the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
741 HeapRegion* inc_set_tail() { return _inc_cset_tail; }
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
742
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
743 // Initialize incremental collection set info.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
744 void start_incremental_cset_building();
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
745
4727
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
746 // Perform any final calculations on the incremental CSet fields
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
747 // before we can use them.
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
748 void finalize_incremental_cset_building();
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
749
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
750 void clear_incremental_cset() {
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
751 _inc_cset_head = NULL;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
752 _inc_cset_tail = NULL;
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
753 }
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
754
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
755 // Stop adding regions to the incremental collection set
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
756 void stop_incremental_cset_building() { _inc_cset_build_state = Inactive; }
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
757
4727
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
758 // Add information about hr to the aggregated information for the
67fdcb391461 7119027: G1: use atomics to update RS length / predict time of inc CSet
tonyp
parents: 4710
diff changeset
759 // incrementally built collection set.
1394
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
760 void add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
761
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
762 // Update information about hr in the aggregated information for
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
763 // the incrementally built collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
764 void update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
765
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
766 private:
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
767 // Update the incremental cset information when adding a region
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
768 // (should not be called directly).
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
769 void add_region_to_incremental_cset_common(HeapRegion* hr);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
770
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
771 public:
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
772 // Add hr to the LHS of the incremental collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
773 void add_region_to_incremental_cset_lhs(HeapRegion* hr);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
774
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
775 // Add hr to the RHS of the incremental collection set.
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
776 void add_region_to_incremental_cset_rhs(HeapRegion* hr);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
777
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
778 #ifndef PRODUCT
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
779 void print_collection_set(HeapRegion* list_head, outputStream* st);
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
780 #endif // !PRODUCT
1316cec51b4d 6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents: 1359
diff changeset
781
1359
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
782 bool initiate_conc_mark_if_possible() { return _initiate_conc_mark_if_possible; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
783 void set_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = true; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
784 void clear_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = false; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
785
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
786 bool during_initial_mark_pause() { return _during_initial_mark_pause; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
787 void set_during_initial_mark_pause() { _during_initial_mark_pause = true; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
788 void clear_during_initial_mark_pause(){ _during_initial_mark_pause = false; }
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
789
1656
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
790 // This sets the initiate_conc_mark_if_possible() flag to start a
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
791 // new cycle, as long as we are not already in one. It's best if it
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
792 // is called during a safepoint when the test whether a cycle is in
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
793 // progress or not is stable.
3914
20213c8a3c40 7050392: G1: Introduce flag to generate a log of the G1 ergonomic decisions
tonyp
parents: 3868
diff changeset
794 bool force_initial_mark_if_outside_cycle(GCCause::Cause gc_cause);
1656
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1611
diff changeset
795
1359
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
796 // This is called at the very beginning of an evacuation pause (it
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
797 // has to be the first thing that the pause does). If
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
798 // initiate_conc_mark_if_possible() is true, and the concurrent
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
799 // marking thread has completed its work during the previous cycle,
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
800 // it will set during_initial_mark_pause() to so that the pause does
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
801 // the initial-mark work and start a marking cycle.
23b1b27ac76c 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
tonyp
parents: 1356
diff changeset
802 void decide_on_conc_mark_initiation();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
803
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
804 // If an expansion would be appropriate, because recent GC overhead had
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
805 // exceeded the desired limit, return an amount to expand by.
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
806 size_t expansion_amount();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
807
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
808 // Print tracing information.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
809 void print_tracing_info() const;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
810
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
811 // Print stats on young survival ratio
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
812 void print_yg_surv_rate_info() const;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
813
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
814 void finished_recalculating_age_indexes(bool is_survivors) {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
815 if (is_survivors) {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
816 _survivor_surv_rate_group->finished_recalculating_age_indexes();
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
817 } else {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
818 _short_lived_surv_rate_group->finished_recalculating_age_indexes();
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
819 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
820 // do that for any other surv rate groups
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
821 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
822
17727
cfd4aac53239 8030177: G1: Enable TLAB resizing
brutisso
parents: 13060
diff changeset
823 size_t young_list_target_length() const { return _young_list_target_length; }
cfd4aac53239 8030177: G1: Enable TLAB resizing
brutisso
parents: 13060
diff changeset
824
1973
631f79e71e90 6974966: G1: unnecessary direct-to-old allocations
tonyp
parents: 1972
diff changeset
825 bool is_young_list_full() {
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
826 uint young_list_length = _g1->young_list()->length();
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
827 uint young_list_target_length = _young_list_target_length;
1991
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
828 return young_list_length >= young_list_target_length;
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
829 }
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
830
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
831 bool can_expand_young_list() {
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
832 uint young_list_length = _g1->young_list()->length();
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
833 uint young_list_max_length = _young_list_max_length;
1991
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
834 return young_list_length < young_list_max_length;
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
835 }
1973
631f79e71e90 6974966: G1: unnecessary direct-to-old allocations
tonyp
parents: 1972
diff changeset
836
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
837 uint young_list_max_length() {
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3979
diff changeset
838 return _young_list_max_length;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3979
diff changeset
839 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3979
diff changeset
840
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
841 bool gcs_are_young() {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
842 return _gcs_are_young;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
843 }
4710
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
844 void set_gcs_are_young(bool gcs_are_young) {
41406797186b 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 4097
diff changeset
845 _gcs_are_young = gcs_are_young;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
846 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
847
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
848 bool adaptive_young_list_length() {
4729
1cbe7978b021 7113021: G1: automatically enable young gen size auto-tuning when -Xms==-Xmx
brutisso
parents: 4727
diff changeset
849 return _young_gen_sizer->adaptive_young_list_length();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
850 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
851
4013
074f0252cc13 7088680: G1: Cleanup in the G1CollectorPolicy class
tonyp
parents: 3980
diff changeset
852 private:
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
853 //
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
854 // Survivor regions policy.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
855 //
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
856
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
857 // Current tenuring threshold, set to 0 if the collector reaches the
6818
22b8d3d181d9 8000351: Tenuring threshold should be unsigned
jwilhelm
parents: 6725
diff changeset
858 // maximum amount of survivors regions.
22b8d3d181d9 8000351: Tenuring threshold should be unsigned
jwilhelm
parents: 6725
diff changeset
859 uint _tenuring_threshold;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
860
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
861 // The limit on the number of regions allocated for survivors.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
862 uint _max_survivor_regions;
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
863
3764
053d84a76d3d 7032531: G1: enhance GC logging to include more accurate eden / survivor size transitions
tonyp
parents: 2430
diff changeset
864 // For reporting purposes.
10291
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
865 // The value of _heap_bytes_before_gc is also used to calculate
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
866 // the cost of copying.
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
867
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
868 size_t _eden_used_bytes_before_gc; // Eden occupancy before GC
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
869 size_t _survivor_used_bytes_before_gc; // Survivor occupancy before GC
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
870 size_t _heap_used_bytes_before_gc; // Heap occupancy before GC
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
871 size_t _metaspace_used_bytes_before_gc; // Metaspace occupancy before GC
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
872
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
873 size_t _eden_capacity_bytes_before_gc; // Eden capacity before GC
48391ab0687e 8010738: G1: Output for full GCs with +PrintGCDetails should contain perm gen size/meta data change info
johnc
parents: 10098
diff changeset
874 size_t _heap_capacity_bytes_before_gc; // Heap capacity before GC
3764
053d84a76d3d 7032531: G1: enhance GC logging to include more accurate eden / survivor size transitions
tonyp
parents: 2430
diff changeset
875
6818
22b8d3d181d9 8000351: Tenuring threshold should be unsigned
jwilhelm
parents: 6725
diff changeset
876 // The amount of survivor regions after a collection.
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
877 uint _recorded_survivor_regions;
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
878 // List of survivor regions.
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
879 HeapRegion* _recorded_survivor_head;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
880 HeapRegion* _recorded_survivor_tail;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
881
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
882 ageTable _survivors_age_table;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
883
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
884 public:
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10291
diff changeset
885 uint tenuring_threshold() const { return _tenuring_threshold; }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
886
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
887 inline GCAllocPurpose
6818
22b8d3d181d9 8000351: Tenuring threshold should be unsigned
jwilhelm
parents: 6725
diff changeset
888 evacuation_destination(HeapRegion* src_region, uint age, size_t word_sz) {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
889 if (age < _tenuring_threshold && src_region->is_young()) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
890 return GCAllocForSurvived;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
891 } else {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
892 return GCAllocForTenured;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
893 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
894 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
895
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
896 inline bool track_object_age(GCAllocPurpose purpose) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
897 return purpose == GCAllocForSurvived;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
898 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
899
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
900 static const uint REGIONS_UNLIMITED = (uint) -1;
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
901
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
902 uint max_regions(int purpose);
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
903
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
904 // The limit on regions for a particular purpose is reached.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
905 void note_alloc_region_limit_reached(int purpose) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
906 if (purpose == GCAllocForSurvived) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
907 _tenuring_threshold = 0;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
908 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
909 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
910
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
911 void note_start_adding_survivor_regions() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
912 _survivor_surv_rate_group->start_adding_regions();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
913 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
914
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
915 void note_stop_adding_survivor_regions() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
916 _survivor_surv_rate_group->stop_adding_regions();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
917 }
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
918
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
919 void record_survivor_regions(uint regions,
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
920 HeapRegion* head,
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
921 HeapRegion* tail) {
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
922 _recorded_survivor_regions = regions;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
923 _recorded_survivor_head = head;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
924 _recorded_survivor_tail = tail;
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
925 }
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
926
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
927 uint recorded_survivor_regions() {
838
0316eac49d5a 6855834: G1: minimize the output when -XX:+PrintHeapAtGC is set
tonyp
parents: 794
diff changeset
928 return _recorded_survivor_regions;
0316eac49d5a 6855834: G1: minimize the output when -XX:+PrintHeapAtGC is set
tonyp
parents: 794
diff changeset
929 }
0316eac49d5a 6855834: G1: minimize the output when -XX:+PrintHeapAtGC is set
tonyp
parents: 794
diff changeset
930
6010
720b6a76dd9d 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 5988
diff changeset
931 void record_thread_age_table(ageTable* age_table) {
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
932 _survivors_age_table.merge_par(age_table);
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
933 }
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
934
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
935 void update_max_gc_locker_expansion();
1991
016a3628c885 6994056: G1: when GC locker is active, extend the Eden instead of allocating into the old gen
tonyp
parents: 1973
diff changeset
936
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
937 // Calculates survivor space parameters.
3919
4f41766176cf 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 3914
diff changeset
938 void update_survivors_policy();
545
58054a18d735 6484959: G1: introduce survivor spaces
apetrusenko
parents: 342
diff changeset
939
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 13059
diff changeset
940 virtual void post_heap_initialize();
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
941 };
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
942
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
943 // This should move to some place more general...
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
944
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
945 // If we have "n" measurements, and we've kept track of their "sum" and the
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
946 // "sum_of_squares" of the measurements, this returns the variance of the
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
947 // sequence.
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
948 inline double variance(int n, double sum_of_squares, double sum) {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
949 double n_d = (double)n;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
950 double avg = sum/n_d;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
951 return (sum_of_squares - 2.0 * avg * sum + n_d * avg * avg) / n_d;
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
952 }
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
953
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1707
diff changeset
954 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP