Mercurial > hg > graal-jvmci-8
annotate src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp @ 3919:4f41766176cf
7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
Summary: Fixed inconsistencies and mistakes in the young list target length calculations so that a) the calculated target length is optimal (before, it was not), b) other parameters like max survivor size and max gc locker eden expansion are always consistent with the calculated target length (before, they were not always), and c) the resulting target length was always bound by desired min and max values (before, it was not).
Reviewed-by: brutisso, johnc
author | tonyp |
---|---|
date | Thu, 08 Sep 2011 05:16:49 -0400 |
parents | edd9b016deb6 |
children | d2a62e0f25eb |
rev | line source |
---|---|
342 | 1 /* |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. |
342 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1282
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1282
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:
1282
diff
changeset
|
21 * questions. |
342 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP | |
27 | |
28 #include "memory/allocation.hpp" | |
29 #include "memory/cardTableModRefBS.hpp" | |
30 #include "runtime/thread.hpp" | |
31 #include "utilities/globalDefinitions.hpp" | |
32 | |
342 | 33 // Forward decl |
34 class ConcurrentG1RefineThread; | |
35 class G1RemSet; | |
36 | |
549
fe3d7c11b4b7
6700941: G1: allocation spec missing for some G1 classes
apetrusenko
parents:
342
diff
changeset
|
37 class ConcurrentG1Refine: public CHeapObj { |
794 | 38 ConcurrentG1RefineThread** _threads; |
39 int _n_threads; | |
1111 | 40 int _n_worker_threads; |
41 /* | |
42 * The value of the update buffer queue length falls into one of 3 zones: | |
43 * green, yellow, red. If the value is in [0, green) nothing is | |
44 * done, the buffers are left unprocessed to enable the caching effect of the | |
45 * dirtied cards. In the yellow zone [green, yellow) the concurrent refinement | |
46 * threads are gradually activated. In [yellow, red) all threads are | |
47 * running. If the length becomes red (max queue length) the mutators start | |
48 * processing the buffers. | |
49 * | |
1282 | 50 * There are some interesting cases (when G1UseAdaptiveConcRefinement |
51 * is turned off): | |
1111 | 52 * 1) green = yellow = red = 0. In this case the mutator will process all |
53 * buffers. Except for those that are created by the deferred updates | |
54 * machinery during a collection. | |
55 * 2) green = 0. Means no caching. Can be a good way to minimize the | |
56 * amount of time spent updating rsets during a collection. | |
57 */ | |
58 int _green_zone; | |
59 int _yellow_zone; | |
60 int _red_zone; | |
61 | |
62 int _thread_threshold_step; | |
63 | |
64 // Reset the threshold step value based of the current zone boundaries. | |
65 void reset_threshold_step(); | |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
66 |
342 | 67 // The cache for card refinement. |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
68 bool _use_cache; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
69 bool _def_use_cache; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
70 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
71 size_t _n_periods; // Used as clearing epoch |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
72 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
73 // An evicting cache of the number of times each card |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
74 // is accessed. Reduces, but does not eliminate, the amount |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
75 // of duplicated processing of dirty cards. |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
76 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
77 enum SomePrivateConstants { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
78 epoch_bits = 32, |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
79 card_num_shift = epoch_bits, |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
80 epoch_mask = AllBits, |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
81 card_num_mask = AllBits, |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
82 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
83 // The initial cache size is approximately this fraction |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
84 // of a maximal cache (i.e. the size needed for all cards |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
85 // in the heap) |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
86 InitialCacheFraction = 512 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
87 }; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
88 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
89 const static julong card_num_mask_in_place = |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
90 (julong) card_num_mask << card_num_shift; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
91 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
92 typedef struct { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
93 julong _value; // | card_num | epoch | |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
94 } CardEpochCacheEntry; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
95 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
96 julong make_epoch_entry(unsigned int card_num, unsigned int epoch) { |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
97 assert(0 <= card_num && card_num < _max_cards, "Bounds"); |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
98 assert(0 <= epoch && epoch <= _n_periods, "must be"); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
99 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
100 return ((julong) card_num << card_num_shift) | epoch; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
101 } |
342 | 102 |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
103 unsigned int extract_epoch(julong v) { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
104 return (v & epoch_mask); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
105 } |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
106 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
107 unsigned int extract_card_num(julong v) { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
108 return (v & card_num_mask_in_place) >> card_num_shift; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
109 } |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
110 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
111 typedef struct { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
112 unsigned char _count; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
113 unsigned char _evict_count; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
114 } CardCountCacheEntry; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
115 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
116 CardCountCacheEntry* _card_counts; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
117 CardEpochCacheEntry* _card_epochs; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
118 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
119 // The current number of buckets in the card count cache |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
120 size_t _n_card_counts; |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
121 |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
122 // The number of cards for the entire reserved heap |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
123 size_t _max_cards; |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
124 |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
125 // The max number of buckets for the card counts and epochs caches. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
126 // This is the maximum that the counts and epochs will grow to. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
127 // It is specified as a fraction or percentage of _max_cards using |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
128 // G1MaxHotCardCountSizePercent. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
129 size_t _max_n_card_counts; |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
130 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
131 // Possible sizes of the cache: odd primes that roughly double in size. |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
132 // (See jvmtiTagMap.cpp). |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
133 enum { |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
134 MAX_CC_CACHE_INDEX = 15 // maximum index into the cache size array. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
135 }; |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
136 |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
137 static size_t _cc_cache_sizes[MAX_CC_CACHE_INDEX]; |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
138 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
139 // The index in _cc_cache_sizes corresponding to the size of |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
140 // _card_counts. |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
141 int _cache_size_index; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
142 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
143 bool _expand_card_counts; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
144 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
145 const jbyte* _ct_bot; |
889 | 146 |
147 jbyte** _hot_cache; | |
148 int _hot_cache_size; | |
149 int _n_hot; | |
150 int _hot_cache_idx; | |
151 | |
152 int _hot_cache_par_chunk_size; | |
153 volatile int _hot_cache_par_claimed_idx; | |
342 | 154 |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
155 // Needed to workaround 6817995 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
156 CardTableModRefBS* _ct_bs; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
157 G1CollectedHeap* _g1h; |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
158 |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
159 // Helper routine for expand_card_count_cache(). |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
160 // The arrays used to hold the card counts and the epochs must have |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
161 // a 1:1 correspondence. Hence they are allocated and freed together. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
162 // Returns true if the allocations of both the counts and epochs |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
163 // were successful; false otherwise. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
164 bool allocate_card_count_cache(size_t n, |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
165 CardCountCacheEntry** counts, |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
166 CardEpochCacheEntry** epochs); |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
167 |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
168 // Expands the arrays that hold the card counts and epochs |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
169 // to the cache size at index. Returns true if the expansion/ |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
170 // allocation was successful; false otherwise. |
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
171 bool expand_card_count_cache(int index); |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
172 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
173 // hash a given key (index of card_ptr) with the specified size |
2431
02f49b66361a
7026932: G1: No need to abort VM when card count cache expansion fails
johnc
parents:
1972
diff
changeset
|
174 static unsigned int hash(size_t key, size_t size) { |
3258
edd9b016deb6
7036021: G1: build failure on win64 and linux with hs21 in jdk6 build environment
johnc
parents:
2431
diff
changeset
|
175 return (unsigned int) (key % size); |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
176 } |
342 | 177 |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
178 // hash a given key (index of card_ptr) |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
179 unsigned int hash(size_t key) { |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
180 return hash(key, _n_card_counts); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
181 } |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
182 |
3258
edd9b016deb6
7036021: G1: build failure on win64 and linux with hs21 in jdk6 build environment
johnc
parents:
2431
diff
changeset
|
183 unsigned int ptr_2_card_num(jbyte* card_ptr) { |
edd9b016deb6
7036021: G1: build failure on win64 and linux with hs21 in jdk6 build environment
johnc
parents:
2431
diff
changeset
|
184 return (unsigned int) (card_ptr - _ct_bot); |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
185 } |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
186 |
3258
edd9b016deb6
7036021: G1: build failure on win64 and linux with hs21 in jdk6 build environment
johnc
parents:
2431
diff
changeset
|
187 jbyte* card_num_2_ptr(unsigned int card_num) { |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
188 return (jbyte*) (_ct_bot + card_num); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
189 } |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
190 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
191 // Returns the count of this card after incrementing it. |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
192 jbyte* add_card_count(jbyte* card_ptr, int* count, bool* defer); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
193 |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
194 // Returns true if this card is in a young region |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
195 bool is_young_card(jbyte* card_ptr); |
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
196 |
342 | 197 public: |
198 ConcurrentG1Refine(); | |
199 ~ConcurrentG1Refine(); | |
200 | |
201 void init(); // Accomplish some initialization that has to wait. | |
794 | 202 void stop(); |
342 | 203 |
1111 | 204 void reinitialize_threads(); |
205 | |
794 | 206 // Iterate over the conc refine threads |
207 void threads_do(ThreadClosure *tc); | |
342 | 208 |
209 // If this is the first entry for the slot, writes into the cache and | |
210 // returns NULL. If it causes an eviction, returns the evicted pointer. | |
211 // Otherwise, its a cache hit, and returns NULL. | |
890
6cb8e9df7174
6819077: G1: first GC thread coming late into the GC.
johnc
parents:
889
diff
changeset
|
212 jbyte* cache_insert(jbyte* card_ptr, bool* defer); |
342 | 213 |
214 // Process the cached entries. | |
1705 | 215 void clean_up_cache(int worker_i, G1RemSet* g1rs, DirtyCardQueue* into_cset_dcq); |
342 | 216 |
889 | 217 // Set up for parallel processing of the cards in the hot cache |
218 void clear_hot_cache_claimed_index() { | |
219 _hot_cache_par_claimed_idx = 0; | |
220 } | |
221 | |
342 | 222 // Discard entries in the hot cache. |
223 void clear_hot_cache() { | |
224 _hot_cache_idx = 0; _n_hot = 0; | |
225 } | |
226 | |
227 bool hot_cache_is_empty() { return _n_hot == 0; } | |
228 | |
229 bool use_cache() { return _use_cache; } | |
230 void set_use_cache(bool b) { | |
231 if (b) _use_cache = _def_use_cache; | |
232 else _use_cache = false; | |
233 } | |
234 | |
235 void clear_and_record_card_counts(); | |
795
215f81b4d9b3
6841831: G1: assert(contains_reference(from),"We just added it!") fires
iveresov
parents:
794
diff
changeset
|
236 |
1111 | 237 static int thread_num(); |
1019 | 238 |
239 void print_worker_threads_on(outputStream* st) const; | |
1111 | 240 |
241 void set_green_zone(int x) { _green_zone = x; } | |
242 void set_yellow_zone(int x) { _yellow_zone = x; } | |
243 void set_red_zone(int x) { _red_zone = x; } | |
244 | |
245 int green_zone() const { return _green_zone; } | |
246 int yellow_zone() const { return _yellow_zone; } | |
247 int red_zone() const { return _red_zone; } | |
248 | |
249 int total_thread_num() const { return _n_threads; } | |
250 int worker_thread_num() const { return _n_worker_threads; } | |
251 | |
252 int thread_threshold_step() const { return _thread_threshold_step; } | |
342 | 253 }; |
1972 | 254 |
255 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP |