Mercurial > hg > graal-jvmci-8
annotate src/share/vm/memory/universe.hpp @ 12233:40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation.
Reviewed-by: stefank, dholmes
author | tschatzl |
---|---|
date | Wed, 11 Sep 2013 16:25:02 +0200 |
parents | 7944aba7ba41 |
children | da051ce490eb |
rev | line source |
---|---|
0 | 1 /* |
7982
10d5f25a7c67
8000968: NPG: UseCompressedKlassPointers asserts with ObjectAlignmentInBytes for > 32G CompressedOops
hseigel
parents:
6866
diff
changeset
|
2 * Copyright (c) 1997, 2013, 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:
1080
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1080
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:
1080
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_MEMORY_UNIVERSE_HPP |
26 #define SHARE_VM_MEMORY_UNIVERSE_HPP | |
27 | |
28 #include "runtime/handles.hpp" | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
29 #include "utilities/array.hpp" |
1972 | 30 #include "utilities/growableArray.hpp" |
31 | |
0 | 32 // Universe is a name space holding known system classes and objects in the VM. |
33 // | |
34 // Loaded classes are accessible through the SystemDictionary. | |
35 // | |
36 // The object heap is allocated and accessed through Universe, and various allocation | |
37 // support is provided. Allocation by the interpreter and compiled code is done inline | |
38 // and bails out to Scavenge::invoke_and_allocate. | |
39 | |
40 class CollectedHeap; | |
41 class DeferredObjAllocEvent; | |
42 | |
43 | |
12022
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
44 // A helper class for caching a Method* when the user of the cache |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
45 // only cares about the latest version of the Method*. This cache safely |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
46 // interacts with the RedefineClasses API. |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
47 |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
48 class LatestMethodCache : public CHeapObj<mtClass> { |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
49 // We save the Klass* and the idnum of Method* in order to get |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
50 // the current cached Method*. |
0 | 51 private: |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
52 Klass* _klass; |
0 | 53 int _method_idnum; |
54 | |
55 public: | |
12022
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
56 LatestMethodCache() { _klass = NULL; _method_idnum = -1; } |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
57 ~LatestMethodCache() { _klass = NULL; _method_idnum = -1; } |
0 | 58 |
12022
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
59 void init(Klass* k, Method* m); |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
60 Klass* klass() const { return _klass; } |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
61 int method_idnum() const { return _method_idnum; } |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
62 |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
63 Method* get_method(); |
0 | 64 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
65 // Enhanced Class Redefinition support |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
66 void classes_do(void f(Klass*)) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
67 f(_klass); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
68 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
69 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
70 // CDS support. Replace the klass in this with the archive version |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
71 // could use this for Enhanced Class Redefinition also. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
72 void serialize(SerializeClosure* f) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
73 f->do_ptr((void**)&_klass); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
74 } |
0 | 75 }; |
76 | |
77 | |
12056
740e263c80c6
8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents:
12022
diff
changeset
|
78 // For UseCompressedOops. |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
79 struct NarrowPtrStruct { |
12056
740e263c80c6
8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents:
12022
diff
changeset
|
80 // Base address for oop-within-java-object materialization. |
740e263c80c6
8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents:
12022
diff
changeset
|
81 // NULL if using wide oops or zero based narrow oops. |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
82 address _base; |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
83 // Number of shift bits for encoding/decoding narrow ptrs. |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
84 // 0 if using wide ptrs or zero based unscaled narrow ptrs, |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
85 // LogMinObjAlignmentInBytes/LogKlassAlignmentInBytes otherwise. |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
86 int _shift; |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
87 // Generate code with implicit null checks for narrow ptrs. |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
88 bool _use_implicit_null_checks; |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
89 }; |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
90 |
3772
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
91 enum VerifyOption { |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
92 VerifyOption_Default = 0, |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
93 |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
94 // G1 |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
95 VerifyOption_G1UsePrevMarking = VerifyOption_Default, |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
96 VerifyOption_G1UseNextMarking = VerifyOption_G1UsePrevMarking + 1, |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
97 VerifyOption_G1UseMarkWord = VerifyOption_G1UseNextMarking + 1 |
6747fd0512e0
7004681: G1: Extend marking verification to Full GCs
johnc
parents:
2426
diff
changeset
|
98 }; |
0 | 99 |
100 class Universe: AllStatic { | |
481
7d7a7c599c17
6578152: fill_region_with_object has usability and safety issues
jcoomes
parents:
196
diff
changeset
|
101 // Ugh. Universe is much too friendly. |
0 | 102 friend class MarkSweep; |
103 friend class oopDesc; | |
104 friend class ClassLoader; | |
105 friend class Arguments; | |
106 friend class SystemDictionary; | |
107 friend class VMStructs; | |
108 friend class VM_PopulateDumpSharedSpace; | |
12056
740e263c80c6
8003424: Enable Class Data Sharing for CompressedOops
hseigel
parents:
12022
diff
changeset
|
109 friend class Metaspace; |
0 | 110 |
111 friend jint universe_init(); | |
112 friend void universe2_init(); | |
113 friend bool universe_post_init(); | |
114 | |
115 private: | |
116 // Known classes in the VM | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
117 static Klass* _boolArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
118 static Klass* _byteArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
119 static Klass* _charArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
120 static Klass* _intArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
121 static Klass* _shortArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
122 static Klass* _longArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
123 static Klass* _singleArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
124 static Klass* _doubleArrayKlassObj; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
125 static Klass* _typeArrayKlassObjs[T_VOID+1]; |
0 | 126 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
127 static Klass* _objectArrayKlassObj; |
0 | 128 |
129 // Known objects in the VM | |
130 | |
131 // Primitive objects | |
132 static oop _int_mirror; | |
133 static oop _float_mirror; | |
134 static oop _double_mirror; | |
135 static oop _byte_mirror; | |
136 static oop _bool_mirror; | |
137 static oop _char_mirror; | |
138 static oop _long_mirror; | |
139 static oop _short_mirror; | |
140 static oop _void_mirror; | |
141 | |
142 static oop _main_thread_group; // Reference to the main thread group object | |
143 static oop _system_thread_group; // Reference to the system thread group object | |
144 | |
145 static objArrayOop _the_empty_class_klass_array; // Canonicalized obj array of type java.lang.Class | |
1080
7c57aead6d3e
6892658: C2 should optimize some stringbuilder patterns
never
parents:
860
diff
changeset
|
146 static oop _the_null_string; // A cache of "null" as a Java string |
7c57aead6d3e
6892658: C2 should optimize some stringbuilder patterns
never
parents:
860
diff
changeset
|
147 static oop _the_min_jint_string; // A cache of "-2147483648" as a Java string |
12022
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
148 static LatestMethodCache* _finalizer_register_cache; // static method for registering finalizable objects |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
149 static LatestMethodCache* _loader_addClass_cache; // method for registering loaded classes in class loader vector |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
150 static LatestMethodCache* _pd_implies_cache; // method for checking protection domain attributes |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
151 |
11064
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
152 // preallocated error objects (no backtrace) |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
153 static oop _out_of_memory_error_java_heap; |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
154 static oop _out_of_memory_error_metaspace; |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
155 static oop _out_of_memory_error_class_metaspace; |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
156 static oop _out_of_memory_error_array_size; |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
157 static oop _out_of_memory_error_gc_overhead_limit; |
0 | 158 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
159 static Array<int>* _the_empty_int_array; // Canonicalized int array |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
160 static Array<u2>* _the_empty_short_array; // Canonicalized short array |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
161 static Array<Klass*>* _the_empty_klass_array; // Canonicalized klass obj array |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
162 static Array<Method*>* _the_empty_method_array; // Canonicalized method obj array |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
163 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
164 static Array<Klass*>* _the_array_interfaces_array; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
165 |
0 | 166 // array of preallocated error objects with backtrace |
167 static objArrayOop _preallocated_out_of_memory_error_array; | |
168 | |
169 // number of preallocated error objects available for use | |
170 static volatile jint _preallocated_out_of_memory_error_avail_count; | |
171 | |
172 static oop _null_ptr_exception_instance; // preallocated exception object | |
173 static oop _arithmetic_exception_instance; // preallocated exception object | |
174 static oop _virtual_machine_error_instance; // preallocated exception object | |
175 // The object used as an exception dummy when exceptions are thrown for | |
176 // the vm thread. | |
177 static oop _vm_exception; | |
178 | |
179 // The particular choice of collected heap. | |
180 static CollectedHeap* _collectedHeap; | |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
181 |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
494
diff
changeset
|
182 // For UseCompressedOops. |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
183 static struct NarrowPtrStruct _narrow_oop; |
12226
7944aba7ba41
8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents:
12110
diff
changeset
|
184 // For UseCompressedClassPointers. |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
185 static struct NarrowPtrStruct _narrow_klass; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
186 static address _narrow_ptrs_base; |
0 | 187 |
188 // array of dummy objects used with +FullGCAlot | |
189 debug_only(static objArrayOop _fullgc_alot_dummy_array;) | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
190 // index of next entry to clear |
0 | 191 debug_only(static int _fullgc_alot_dummy_next;) |
192 | |
193 // Compiler/dispatch support | |
194 static int _base_vtable_size; // Java vtbl size of klass Object (in words) | |
195 | |
196 // Initialization | |
197 static bool _bootstrapping; // true during genesis | |
198 static bool _fully_initialized; // true after universe_init and initialize_vtables called | |
199 | |
200 // the array of preallocated errors with backtraces | |
201 static objArrayOop preallocated_out_of_memory_errors() { return _preallocated_out_of_memory_error_array; } | |
202 | |
203 // generate an out of memory error; if possible using an error with preallocated backtrace; | |
204 // otherwise return the given default error. | |
205 static oop gen_out_of_memory_error(oop default_err); | |
206 | |
207 // Historic gc information | |
208 static size_t _heap_capacity_at_last_gc; | |
209 static size_t _heap_used_at_last_gc; | |
210 | |
211 static jint initialize_heap(); | |
212 static void initialize_basic_type_mirrors(TRAPS); | |
213 static void fixup_mirrors(TRAPS); | |
214 | |
215 static void reinitialize_vtable_of(KlassHandle h_k, TRAPS); | |
216 static void reinitialize_itables(TRAPS); | |
217 static void compute_base_vtable_size(); // compute vtable size of class Object | |
218 | |
219 static void genesis(TRAPS); // Create the initial world | |
220 | |
221 // Mirrors for primitive classes (created eagerly) | |
222 static oop check_mirror(oop m) { | |
223 assert(m != NULL, "mirror not initialized"); | |
224 return m; | |
225 } | |
226 | |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
227 static void set_narrow_oop_base(address base) { |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
228 assert(UseCompressedOops, "no compressed oops?"); |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
229 _narrow_oop._base = base; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
230 } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
231 static void set_narrow_klass_base(address base) { |
12226
7944aba7ba41
8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents:
12110
diff
changeset
|
232 assert(UseCompressedClassPointers, "no compressed klass ptrs?"); |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
233 _narrow_klass._base = base; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
234 } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
235 static void set_narrow_oop_use_implicit_null_checks(bool use) { |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
236 assert(UseCompressedOops, "no compressed ptrs?"); |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
237 _narrow_oop._use_implicit_null_checks = use; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
238 } |
7982
10d5f25a7c67
8000968: NPG: UseCompressedKlassPointers asserts with ObjectAlignmentInBytes for > 32G CompressedOops
hseigel
parents:
6866
diff
changeset
|
239 |
0 | 240 // Debugging |
241 static int _verify_count; // number of verifies done | |
242 // True during call to verify(). Should only be set/cleared in verify(). | |
243 static bool _verify_in_progress; | |
244 | |
245 static void compute_verify_oop_data(); | |
246 | |
247 public: | |
248 // Known classes in the VM | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
249 static Klass* boolArrayKlassObj() { return _boolArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
250 static Klass* byteArrayKlassObj() { return _byteArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
251 static Klass* charArrayKlassObj() { return _charArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
252 static Klass* intArrayKlassObj() { return _intArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
253 static Klass* shortArrayKlassObj() { return _shortArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
254 static Klass* longArrayKlassObj() { return _longArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
255 static Klass* singleArrayKlassObj() { return _singleArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
256 static Klass* doubleArrayKlassObj() { return _doubleArrayKlassObj; } |
0 | 257 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
258 static Klass* objectArrayKlassObj() { |
0 | 259 return _objectArrayKlassObj; |
260 } | |
261 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
262 static Klass* typeArrayKlassObj(BasicType t) { |
6182
765ee2d1674b
7157365: jruby/bench.bench_timeout crashes with JVM internal error
twisti
parents:
6008
diff
changeset
|
263 assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t))); |
0 | 264 assert(_typeArrayKlassObjs[t] != NULL, "domain check"); |
265 return _typeArrayKlassObjs[t]; | |
266 } | |
267 | |
2177
3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents:
1972
diff
changeset
|
268 // Known objects in the VM |
3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents:
1972
diff
changeset
|
269 static oop int_mirror() { return check_mirror(_int_mirror); } |
0 | 270 static oop float_mirror() { return check_mirror(_float_mirror); } |
271 static oop double_mirror() { return check_mirror(_double_mirror); } | |
272 static oop byte_mirror() { return check_mirror(_byte_mirror); } | |
273 static oop bool_mirror() { return check_mirror(_bool_mirror); } | |
274 static oop char_mirror() { return check_mirror(_char_mirror); } | |
275 static oop long_mirror() { return check_mirror(_long_mirror); } | |
276 static oop short_mirror() { return check_mirror(_short_mirror); } | |
277 static oop void_mirror() { return check_mirror(_void_mirror); } | |
278 | |
279 // table of same | |
280 static oop _mirrors[T_VOID+1]; | |
281 | |
282 static oop java_mirror(BasicType t) { | |
283 assert((uint)t < T_VOID+1, "range check"); | |
284 return check_mirror(_mirrors[t]); | |
285 } | |
286 static oop main_thread_group() { return _main_thread_group; } | |
287 static void set_main_thread_group(oop group) { _main_thread_group = group;} | |
288 | |
289 static oop system_thread_group() { return _system_thread_group; } | |
290 static void set_system_thread_group(oop group) { _system_thread_group = group;} | |
291 | |
292 static objArrayOop the_empty_class_klass_array () { return _the_empty_class_klass_array; } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
293 static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; } |
1080
7c57aead6d3e
6892658: C2 should optimize some stringbuilder patterns
never
parents:
860
diff
changeset
|
294 static oop the_null_string() { return _the_null_string; } |
7c57aead6d3e
6892658: C2 should optimize some stringbuilder patterns
never
parents:
860
diff
changeset
|
295 static oop the_min_jint_string() { return _the_min_jint_string; } |
11010 | 296 |
12022
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
297 static Method* finalizer_register_method() { return _finalizer_register_cache->get_method(); } |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
298 static Method* loader_addClass_method() { return _loader_addClass_cache->get_method(); } |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
299 |
85147f28faba
8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32
coleenp
parents:
11065
diff
changeset
|
300 static Method* protection_domain_implies_method() { return _pd_implies_cache->get_method(); } |
11010 | 301 |
0 | 302 static oop null_ptr_exception_instance() { return _null_ptr_exception_instance; } |
303 static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; } | |
304 static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; } | |
305 static oop vm_exception() { return _vm_exception; } | |
306 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
307 static Array<int>* the_empty_int_array() { return _the_empty_int_array; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
308 static Array<u2>* the_empty_short_array() { return _the_empty_short_array; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
309 static Array<Method*>* the_empty_method_array() { return _the_empty_method_array; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
310 static Array<Klass*>* the_empty_klass_array() { return _the_empty_klass_array; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
311 |
0 | 312 // OutOfMemoryError support. Returns an error with the required message. The returned error |
313 // may or may not have a backtrace. If error has a backtrace then the stack trace is already | |
314 // filled in. | |
315 static oop out_of_memory_error_java_heap() { return gen_out_of_memory_error(_out_of_memory_error_java_heap); } | |
11064
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
316 static oop out_of_memory_error_metaspace() { return gen_out_of_memory_error(_out_of_memory_error_metaspace); } |
de2d15ce3d4a
8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadata space could occur when metaspace is almost empty
coleenp
parents:
10405
diff
changeset
|
317 static oop out_of_memory_error_class_metaspace() { return gen_out_of_memory_error(_out_of_memory_error_class_metaspace); } |
0 | 318 static oop out_of_memory_error_array_size() { return gen_out_of_memory_error(_out_of_memory_error_array_size); } |
319 static oop out_of_memory_error_gc_overhead_limit() { return gen_out_of_memory_error(_out_of_memory_error_gc_overhead_limit); } | |
320 | |
321 // Accessors needed for fast allocation | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
322 static Klass** boolArrayKlassObj_addr() { return &_boolArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
323 static Klass** byteArrayKlassObj_addr() { return &_byteArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
324 static Klass** charArrayKlassObj_addr() { return &_charArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
325 static Klass** intArrayKlassObj_addr() { return &_intArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
326 static Klass** shortArrayKlassObj_addr() { return &_shortArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
327 static Klass** longArrayKlassObj_addr() { return &_longArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
328 static Klass** singleArrayKlassObj_addr() { return &_singleArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
329 static Klass** doubleArrayKlassObj_addr() { return &_doubleArrayKlassObj; } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
330 static Klass** objectArrayKlassObj_addr() { return &_objectArrayKlassObj; } |
0 | 331 |
332 // The particular choice of collected heap. | |
333 static CollectedHeap* heap() { return _collectedHeap; } | |
334 | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
335 // For UseCompressedOops |
10405 | 336 // Narrow Oop encoding mode: |
337 // 0 - Use 32-bits oops without encoding when | |
338 // NarrowOopHeapBaseMin + heap_size < 4Gb | |
339 // 1 - Use zero based compressed oops with encoding when | |
340 // NarrowOopHeapBaseMin + heap_size < 32Gb | |
341 // 2 - Use compressed oops with heap base + encoding. | |
342 enum NARROW_OOP_MODE { | |
343 UnscaledNarrowOop = 0, | |
344 ZeroBasedNarrowOop = 1, | |
345 HeapBasedNarrowOop = 2 | |
346 }; | |
347 static NARROW_OOP_MODE narrow_oop_mode(); | |
348 static const char* narrow_oop_mode_to_string(NARROW_OOP_MODE mode); | |
12110
4c84d351cca9
8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents:
12056
diff
changeset
|
349 static char* preferred_heap_base(size_t heap_size, size_t alignment, NARROW_OOP_MODE mode); |
10405 | 350 static char* preferred_metaspace_base(size_t heap_size, NARROW_OOP_MODE mode); |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
351 static address narrow_oop_base() { return _narrow_oop._base; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
352 static bool is_narrow_oop_base(void* addr) { return (narrow_oop_base() == (address)addr); } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
353 static int narrow_oop_shift() { return _narrow_oop._shift; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
354 static bool narrow_oop_use_implicit_null_checks() { return _narrow_oop._use_implicit_null_checks; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
355 |
12226
7944aba7ba41
8015107: NPG: Use consistent naming for metaspace concepts
ehelin
parents:
12110
diff
changeset
|
356 // For UseCompressedClassPointers |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
357 static address narrow_klass_base() { return _narrow_klass._base; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
358 static bool is_narrow_klass_base(void* addr) { return (narrow_klass_base() == (address)addr); } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
359 static int narrow_klass_shift() { return _narrow_klass._shift; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
360 static bool narrow_klass_use_implicit_null_checks() { return _narrow_klass._use_implicit_null_checks; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
361 |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
362 static address* narrow_ptrs_base_addr() { return &_narrow_ptrs_base; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
363 static void set_narrow_ptrs_base(address a) { _narrow_ptrs_base = a; } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
364 static address narrow_ptrs_base() { return _narrow_ptrs_base; } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
365 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
366 // this is set in vm_version on sparc (and then reset in universe afaict) |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
367 static void set_narrow_oop_shift(int shift) { |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
368 _narrow_oop._shift = shift; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
369 } |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
370 |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
371 static void set_narrow_klass_shift(int shift) { |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
372 assert(shift == 0 || shift == LogKlassAlignmentInBytes, "invalid shift for klass ptrs"); |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
373 _narrow_klass._shift = shift; |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6751
diff
changeset
|
374 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
375 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
376 // Reserve Java heap and determine CompressedOops mode |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
377 static ReservedSpace reserve_heap(size_t heap_size, size_t alignment); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
378 |
0 | 379 // Historic gc information |
380 static size_t get_heap_capacity_at_last_gc() { return _heap_capacity_at_last_gc; } | |
381 static size_t get_heap_free_at_last_gc() { return _heap_capacity_at_last_gc - _heap_used_at_last_gc; } | |
382 static size_t get_heap_used_at_last_gc() { return _heap_used_at_last_gc; } | |
383 static void update_heap_info_at_gc(); | |
384 | |
385 // Testers | |
386 static bool is_bootstrapping() { return _bootstrapping; } | |
387 static bool is_fully_initialized() { return _fully_initialized; } | |
388 | |
389 static inline bool element_type_should_be_aligned(BasicType type); | |
390 static inline bool field_type_should_be_aligned(BasicType type); | |
391 static bool on_page_boundary(void* addr); | |
392 static bool should_fill_in_stack_trace(Handle throwable); | |
393 static void check_alignment(uintx size, uintx alignment, const char* name); | |
394 | |
395 // Finalizer support. | |
396 static void run_finalizers_on_exit(); | |
397 | |
398 // Iteration | |
399 | |
400 // Apply "f" to the addresses of all the direct heap pointers maintained | |
401 // as static fields of "Universe". | |
402 static void oops_do(OopClosure* f, bool do_all = false); | |
403 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
404 // CDS support |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
405 static void serialize(SerializeClosure* f, bool do_all = false); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
406 |
0 | 407 // Apply "f" to all klasses for basic types (classes not present in |
408 // SystemDictionary). | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6198
diff
changeset
|
409 static void basic_type_classes_do(void f(Klass*)); |
0 | 410 |
411 // For sharing -- fill in a list of known vtable pointers. | |
412 static void init_self_patching_vtbl_list(void** list, int count); | |
413 | |
414 // Debugging | |
415 static bool verify_in_progress() { return _verify_in_progress; } | |
10186
b06ac540229e
8013132: Add a flag to turn off the output of the verbose verification code
stefank
parents:
7982
diff
changeset
|
416 static void verify(VerifyOption option, const char* prefix, bool silent = VerifySilently); |
b06ac540229e
8013132: Add a flag to turn off the output of the verbose verification code
stefank
parents:
7982
diff
changeset
|
417 static void verify(const char* prefix, bool silent = VerifySilently) { |
b06ac540229e
8013132: Add a flag to turn off the output of the verbose verification code
stefank
parents:
7982
diff
changeset
|
418 verify(VerifyOption_Default, prefix, silent); |
6865
4202510ee0fe
8000831: Heap verification output incorrect/incomplete
johnc
parents:
6751
diff
changeset
|
419 } |
10186
b06ac540229e
8013132: Add a flag to turn off the output of the verbose verification code
stefank
parents:
7982
diff
changeset
|
420 static void verify(bool silent = VerifySilently) { |
b06ac540229e
8013132: Add a flag to turn off the output of the verbose verification code
stefank
parents:
7982
diff
changeset
|
421 verify("", silent); |
6865
4202510ee0fe
8000831: Heap verification output incorrect/incomplete
johnc
parents:
6751
diff
changeset
|
422 } |
4202510ee0fe
8000831: Heap verification output incorrect/incomplete
johnc
parents:
6751
diff
changeset
|
423 |
4073
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
424 static int verify_count() { return _verify_count; } |
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
425 // The default behavior is to call print_on() on gclog_or_tty. |
0 | 426 static void print(); |
4073
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
427 // The extended parameter determines which method on the heap will |
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
428 // be called: print_on() (extended == false) or print_extended_on() |
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
429 // (extended == true). |
53074c2c4600
7099849: G1: include heap region information in hs_err files
tonyp
parents:
3852
diff
changeset
|
430 static void print_on(outputStream* st, bool extended = false); |
0 | 431 static void print_heap_at_SIGBREAK(); |
432 static void print_heap_before_gc() { print_heap_before_gc(gclog_or_tty); } | |
433 static void print_heap_after_gc() { print_heap_after_gc(gclog_or_tty); } | |
4944 | 434 static void print_heap_before_gc(outputStream* st, bool ignore_extended = false); |
435 static void print_heap_after_gc(outputStream* st, bool ignore_extended = false); | |
0 | 436 |
437 // Change the number of dummy objects kept reachable by the full gc dummy | |
438 // array; this should trigger relocation in a sliding compaction collector. | |
439 debug_only(static bool release_fullgc_alot_dummy();) | |
440 // The non-oop pattern (see compiledIC.hpp, etc) | |
441 static void* non_oop_word(); | |
442 | |
443 // Oop verification (see MacroAssembler::verify_oop) | |
444 static uintptr_t verify_oop_mask() PRODUCT_RETURN0; | |
445 static uintptr_t verify_oop_bits() PRODUCT_RETURN0; | |
446 static uintptr_t verify_mark_bits() PRODUCT_RETURN0; | |
447 static uintptr_t verify_mark_mask() PRODUCT_RETURN0; | |
448 | |
449 // Flushing and deoptimization | |
450 static void flush_dependents_on(instanceKlassHandle dependee); | |
3852
fdb992d83a87
7071653: JSR 292: call site change notification should be pushed not pulled
twisti
parents:
3772
diff
changeset
|
451 static void flush_dependents_on(Handle call_site, Handle method_handle); |
0 | 452 #ifdef HOTSWAP |
453 // Flushing and deoptimization in case of evolution | |
454 static void flush_evol_dependents_on(instanceKlassHandle dependee); | |
455 #endif // HOTSWAP | |
456 // Support for fullspeed debugging | |
457 static void flush_dependents_on_method(methodHandle dependee); | |
458 | |
459 // Compiler support | |
460 static int base_vtable_size() { return _base_vtable_size; } | |
461 }; | |
462 | |
6197 | 463 class DeferredObjAllocEvent : public CHeapObj<mtInternal> { |
0 | 464 private: |
465 oop _oop; | |
466 size_t _bytesize; | |
467 jint _arena_id; | |
468 | |
469 public: | |
470 DeferredObjAllocEvent(const oop o, const size_t s, const jint id) { | |
471 _oop = o; | |
472 _bytesize = s; | |
473 _arena_id = id; | |
474 } | |
475 | |
476 ~DeferredObjAllocEvent() { | |
477 } | |
478 | |
479 jint arena_id() { return _arena_id; } | |
480 size_t bytesize() { return _bytesize; } | |
481 oop get_oop() { return _oop; } | |
482 }; | |
1972 | 483 |
484 #endif // SHARE_VM_MEMORY_UNIVERSE_HPP |