Mercurial > hg > graal-jvmci-8
annotate src/share/vm/gc_implementation/shared/markSweep.hpp @ 10374:87c64c0438fb
6976350: G1: deal with fragmentation while copying objects during GC
Summary: Create G1ParGCAllocBufferContainer to contain two buffers instead of previously using one buffer, in order to hold the first priority buffer longer. Thus, when some large objects hits the value of free space left in the first priority buffer it has an alternative to fit in the second priority buffer while the first priority buffer is given more chances to try allocating smaller objects. Overall, it will improve heap space efficiency.
Reviewed-by: johnc, jmasa, brutisso
Contributed-by: tamao <tao.mao@oracle.com>
author | tamao |
---|---|
date | Mon, 03 Jun 2013 14:37:13 -0700 |
parents | 001ec9515f84 |
children | f2110083203d |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
0 | 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:
1311
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1311
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:
1311
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP | |
27 | |
28 #include "gc_interface/collectedHeap.hpp" | |
29 #include "memory/universe.hpp" | |
30 #include "oops/markOop.hpp" | |
31 #include "oops/oop.hpp" | |
32 #include "runtime/timer.hpp" | |
33 #include "utilities/growableArray.hpp" | |
34 #include "utilities/stack.hpp" | |
35 #include "utilities/taskqueue.hpp" | |
36 | |
0 | 37 class ReferenceProcessor; |
941 | 38 class DataLayout; |
0 | 39 |
40 // MarkSweep takes care of global mark-compact garbage collection for a | |
41 // GenCollectedHeap using a four-phase pointer forwarding algorithm. All | |
42 // generations are assumed to support marking; those that can also support | |
43 // compaction. | |
44 // | |
45 // Class unloading will only occur when a full gc is invoked. | |
46 | |
47 // declared at end | |
48 class PreservedMark; | |
49 | |
50 class MarkSweep : AllStatic { | |
51 // | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
52 // Inline closure decls |
0 | 53 // |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
54 class FollowRootClosure: public OopsInGenClosure { |
0 | 55 public: |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
56 virtual void do_oop(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
57 virtual void do_oop(narrowOop* p); |
0 | 58 }; |
59 | |
60 class MarkAndPushClosure: public OopClosure { | |
61 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
62 virtual void do_oop(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
63 virtual void do_oop(narrowOop* p); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
64 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
65 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
66 // The one and only place to start following the classes. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
67 // Should only be applied to the ClassLoaderData klasses list. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
68 class FollowKlassClosure : public KlassClosure { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
69 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
70 void do_klass(Klass* klass); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
71 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
72 class AdjustKlassClosure : public KlassClosure { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
73 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
74 void do_klass(Klass* klass); |
0 | 75 }; |
76 | |
77 class FollowStackClosure: public VoidClosure { | |
78 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
79 virtual void do_void(); |
0 | 80 }; |
81 | |
82 class AdjustPointerClosure: public OopsInGenClosure { | |
83 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
84 virtual void do_oop(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
85 virtual void do_oop(narrowOop* p); |
0 | 86 }; |
87 | |
88 // Used for java/lang/ref handling | |
89 class IsAliveClosure: public BoolObjectClosure { | |
90 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
91 virtual bool do_object_b(oop p); |
0 | 92 }; |
93 | |
94 class KeepAliveClosure: public OopClosure { | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
95 protected: |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
96 template <class T> void do_oop_work(T* p); |
0 | 97 public: |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
98 virtual void do_oop(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
99 virtual void do_oop(narrowOop* p); |
0 | 100 }; |
101 | |
102 // | |
103 // Friend decls | |
104 // | |
105 friend class AdjustPointerClosure; | |
106 friend class KeepAliveClosure; | |
107 friend class VM_MarkSweep; | |
108 friend void marksweep_init(); | |
109 | |
110 // | |
111 // Vars | |
112 // | |
113 protected: | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
114 // Total invocations of a MarkSweep collection |
10287
12f651e29f6b
6843347: Boundary values in some public GC options cause crashes
tschatzl
parents:
10179
diff
changeset
|
115 static uint _total_invocations; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
116 |
1311
2a1472c30599
4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents:
1000
diff
changeset
|
117 // Traversal stacks used during phase1 |
6197 | 118 static Stack<oop, mtGC> _marking_stack; |
119 static Stack<ObjArrayTask, mtGC> _objarray_stack; | |
0 | 120 |
121 // Space for storing/restoring mark word | |
6197 | 122 static Stack<markOop, mtGC> _preserved_mark_stack; |
123 static Stack<oop, mtGC> _preserved_oop_stack; | |
0 | 124 static size_t _preserved_count; |
125 static size_t _preserved_count_max; | |
126 static PreservedMark* _preserved_marks; | |
127 | |
128 // Reference processing (used in ...follow_contents) | |
129 static ReferenceProcessor* _ref_processor; | |
130 | |
131 // Non public closures | |
132 static KeepAliveClosure keep_alive; | |
133 | |
134 // Debugging | |
135 static void trace(const char* msg) PRODUCT_RETURN; | |
136 | |
137 public: | |
138 // Public closures | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
139 static IsAliveClosure is_alive; |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
140 static FollowRootClosure follow_root_closure; |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
196
diff
changeset
|
141 static CodeBlobToOopClosure follow_code_root_closure; // => follow_root_closure |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
142 static MarkAndPushClosure mark_and_push_closure; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
143 static FollowKlassClosure follow_klass_closure; |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
144 static FollowStackClosure follow_stack_closure; |
0 | 145 static AdjustPointerClosure adjust_pointer_closure; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
146 static AdjustKlassClosure adjust_klass_closure; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
147 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
148 // Accessors |
10287
12f651e29f6b
6843347: Boundary values in some public GC options cause crashes
tschatzl
parents:
10179
diff
changeset
|
149 static uint total_invocations() { return _total_invocations; } |
0 | 150 |
151 // Reference Processing | |
152 static ReferenceProcessor* const ref_processor() { return _ref_processor; } | |
153 | |
154 // Call backs for marking | |
155 static void mark_object(oop obj); | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
156 // Mark pointer and follow contents. Empty marking stack afterwards. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
157 template <class T> static inline void follow_root(T* p); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
158 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
159 // Check mark and maybe push on marking stack |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
160 template <class T> static void mark_and_push(T* p); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
161 |
1311
2a1472c30599
4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents:
1000
diff
changeset
|
162 static inline void push_objarray(oop obj, size_t index); |
0 | 163 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
164 static void follow_stack(); // Empty marking stack. |
0 | 165 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
166 static void follow_klass(Klass* klass); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
167 static void adjust_klass(Klass* klass); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
168 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
169 static void follow_class_loader(ClassLoaderData* cld); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
170 static void adjust_class_loader(ClassLoaderData* cld); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6197
diff
changeset
|
171 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
172 static void preserve_mark(oop p, markOop mark); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
173 // Save the mark word so it can be restored later |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
174 static void adjust_marks(); // Adjust the pointers in the preserved marks table |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
175 static void restore_marks(); // Restore the marks that we saved in preserve_mark |
0 | 176 |
10179
a08c80e9e1e5
8012687: Remove unused is_root checks and closures
stefank
parents:
7448
diff
changeset
|
177 template <class T> static inline void adjust_pointer(T* p); |
0 | 178 }; |
179 | |
180 class PreservedMark VALUE_OBJ_CLASS_SPEC { | |
181 private: | |
182 oop _obj; | |
183 markOop _mark; | |
184 | |
185 public: | |
186 void init(oop obj, markOop mark) { | |
187 _obj = obj; | |
188 _mark = mark; | |
189 } | |
190 | |
191 void adjust_pointer() { | |
192 MarkSweep::adjust_pointer(&_obj); | |
193 } | |
194 | |
195 void restore() { | |
196 _obj->set_mark(_mark); | |
197 } | |
198 }; | |
1972 | 199 |
200 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP |