annotate src/share/vm/gc_implementation/g1/g1CardCounts.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 1f1d373cd044
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12241
diff changeset
2 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
4 *
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
7 * published by the Free Software Foundation.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
8 *
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
13 * accompanied this code).
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
14 *
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
18 *
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
21 * questions.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
22 *
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
23 */
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
24
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
27
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
28 #include "gc_implementation/g1/g1RegionToSpaceMapper.hpp"
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
29 #include "memory/allocation.hpp"
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
30 #include "runtime/virtualspace.hpp"
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
31 #include "utilities/globalDefinitions.hpp"
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
32
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
33 class CardTableModRefBS;
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
34 class G1CardCounts;
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
35 class G1CollectedHeap;
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
36 class G1RegionToSpaceMapper;
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
37 class HeapRegion;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
38
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
39 class G1CardCountsMappingChangedListener : public G1MappingChangedListener {
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
40 private:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
41 G1CardCounts* _counts;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
42 public:
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
43 void set_cardcounts(G1CardCounts* counts) { _counts = counts; }
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
44
20543
e7d0505c8a30 8059758: Footprint regressions with JDK-8038423
tschatzl
parents: 20337
diff changeset
45 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled);
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
46 };
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
47
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
48 // Table to track the number of times a card has been refined. Once
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
49 // a card has been refined a certain number of times, it is
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
50 // considered 'hot' and its refinement is delayed by inserting the
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
51 // card into the hot card cache. The card will then be refined when
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
52 // it is evicted from the hot card cache, or when the hot card cache
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
53 // is 'drained' during the next evacuation pause.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
54
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
55 class G1CardCounts: public CHeapObj<mtGC> {
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
56 G1CardCountsMappingChangedListener _listener;
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
57
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
58 G1CollectedHeap* _g1h;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
59
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
60 // The table of counts
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
61 jubyte* _card_counts;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
62
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
63 // Max capacity of the reserved space for the counts table
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
64 size_t _reserved_max_card_num;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
65
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
66 // CardTable bottom.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
67 const jbyte* _ct_bot;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
68
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
69 // Barrier set
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
70 CardTableModRefBS* _ct_bs;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
71
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
72 // Returns true if the card counts table has been reserved.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
73 bool has_reserved_count_table() { return _card_counts != NULL; }
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
74
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
75 // Returns true if the card counts table has been reserved and committed.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
76 bool has_count_table() {
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
77 return has_reserved_count_table();
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
78 }
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
79
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
80 size_t ptr_2_card_num(const jbyte* card_ptr) {
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
81 assert(card_ptr >= _ct_bot,
12241
9cb63cd234a0 8024671: G1 generates assert error messages in product builds
shade
parents: 10289
diff changeset
82 err_msg("Invalid card pointer: "
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
83 "card_ptr: " PTR_FORMAT ", "
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
84 "_ct_bot: " PTR_FORMAT,
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12241
diff changeset
85 p2i(card_ptr), p2i(_ct_bot)));
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
86 size_t card_num = pointer_delta(card_ptr, _ct_bot, sizeof(jbyte));
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
87 assert(card_num >= 0 && card_num < _reserved_max_card_num,
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12241
diff changeset
88 err_msg("card pointer out of range: " PTR_FORMAT, p2i(card_ptr)));
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
89 return card_num;
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
90 }
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
91
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
92 jbyte* card_num_2_ptr(size_t card_num) {
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
93 assert(card_num >= 0 && card_num < _reserved_max_card_num,
12241
9cb63cd234a0 8024671: G1 generates assert error messages in product builds
shade
parents: 10289
diff changeset
94 err_msg("card num out of range: "SIZE_FORMAT, card_num));
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
95 return (jbyte*) (_ct_bot + card_num);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
96 }
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
97
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
98 // Clear the counts table for the given (exclusive) index range.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
99 void clear_range(size_t from_card_num, size_t to_card_num);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
100
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
101 public:
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
102 G1CardCounts(G1CollectedHeap* g1h);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
103
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
104 void initialize(G1RegionToSpaceMapper* mapper);
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
105
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
106 // Increments the refinement count for the given card.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
107 // Returns the pre-increment count value.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
108 uint add_card_count(jbyte* card_ptr);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
109
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
110 // Returns true if the given count is high enough to be considered
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
111 // 'hot'; false otherwise.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
112 bool is_hot(uint count);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
113
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
114 // Clears the card counts for the cards spanned by the region
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
115 void clear_region(HeapRegion* hr);
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
116
20337
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
117 // Clears the card counts for the cards spanned by the MemRegion
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
118 void clear_range(MemRegion mr);
1f1d373cd044 8038423: G1: Decommit memory within heap
tschatzl
parents: 17937
diff changeset
119
10246
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
120 // Clear the entire card counts table during GC.
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
121 void clear_all();
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
122 };
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
123
194f52aa2f23 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
johnc
parents:
diff changeset
124 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP