Mercurial > hg > graal-jvmci-8
annotate src/share/vm/memory/oopFactory.cpp @ 2368:dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
6627787: CMS: JVM refuses to start up with -Xms16m -Xmx16m
7000125: CMS: Anti-monotone young gen sizing with respect to maximum whole heap size specification
7027529: CMS: retire CMSUseOldDefaults flag
Summary: Simplify CMS heap sizing code, relying on ergonomic initial sizing consistent with other collectors for the most part, controlling only young gen sizing to rein in pause times. Make CMS young gen sizing default statically cpu-dependant. Remove inconsistencies wrt generation sizing and policy code, allowing for the fixing for 6627787 and 7000125. For 7027529, retire the flag CMSUseOldDefaults which had been introduced as a bridge from JDK 5 to JDK 6 a number of years ago.
Reviewed-by: brutisso, poonam
author | ysr |
---|---|
date | Wed, 16 Mar 2011 10:37:08 -0700 |
parents | 02f78cfa4656 |
children | c7f3d0b4570f |
rev | line source |
---|---|
0 | 1 /* |
1972 | 2 * Copyright (c) 1997, 2010, 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:
939
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
939
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:
939
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #include "precompiled.hpp" |
26 #include "classfile/javaClasses.hpp" | |
27 #include "classfile/symbolTable.hpp" | |
28 #include "classfile/systemDictionary.hpp" | |
29 #include "classfile/vmSymbols.hpp" | |
30 #include "gc_interface/collectedHeap.inline.hpp" | |
31 #include "memory/oopFactory.hpp" | |
32 #include "memory/resourceArea.hpp" | |
33 #include "memory/universe.inline.hpp" | |
34 #include "oops/compiledICHolderKlass.hpp" | |
35 #include "oops/constMethodKlass.hpp" | |
36 #include "oops/constantPoolKlass.hpp" | |
37 #include "oops/cpCacheKlass.hpp" | |
38 #include "oops/instanceKlass.hpp" | |
39 #include "oops/instanceKlassKlass.hpp" | |
40 #include "oops/instanceOop.hpp" | |
41 #include "oops/klassKlass.hpp" | |
42 #include "oops/klassOop.hpp" | |
43 #include "oops/methodDataKlass.hpp" | |
44 #include "oops/methodKlass.hpp" | |
45 #include "oops/objArrayOop.hpp" | |
46 #include "oops/oop.inline.hpp" | |
0 | 47 |
48 | |
49 typeArrayOop oopFactory::new_charArray(const char* utf8_str, TRAPS) { | |
50 int length = utf8_str == NULL ? 0 : UTF8::unicode_length(utf8_str); | |
51 typeArrayOop result = new_charArray(length, CHECK_NULL); | |
52 if (length > 0) { | |
53 UTF8::convert_to_unicode(utf8_str, result->char_at_addr(0), length); | |
54 } | |
55 return result; | |
56 } | |
57 | |
58 typeArrayOop oopFactory::new_permanent_charArray(int length, TRAPS) { | |
59 return typeArrayKlass::cast(Universe::charArrayKlassObj())->allocate_permanent(length, THREAD); | |
60 } | |
61 | |
62 typeArrayOop oopFactory::new_permanent_byteArray(int length, TRAPS) { | |
63 return typeArrayKlass::cast(Universe::byteArrayKlassObj())->allocate_permanent(length, THREAD); | |
64 } | |
65 | |
66 | |
67 typeArrayOop oopFactory::new_permanent_shortArray(int length, TRAPS) { | |
68 return typeArrayKlass::cast(Universe::shortArrayKlassObj())->allocate_permanent(length, THREAD); | |
69 } | |
70 | |
71 | |
72 typeArrayOop oopFactory::new_permanent_intArray(int length, TRAPS) { | |
73 return typeArrayKlass::cast(Universe::intArrayKlassObj())->allocate_permanent(length, THREAD); | |
74 } | |
75 | |
76 | |
77 typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) { | |
78 klassOop type_asKlassOop = Universe::typeArrayKlassObj(type); | |
79 typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop); | |
80 typeArrayOop result = type_asArrayKlass->allocate(length, THREAD); | |
81 return result; | |
82 } | |
83 | |
84 | |
85 objArrayOop oopFactory::new_objArray(klassOop klass, int length, TRAPS) { | |
86 assert(klass->is_klass(), "must be instance class"); | |
87 if (klass->klass_part()->oop_is_array()) { | |
88 return ((arrayKlass*)klass->klass_part())->allocate_arrayArray(1, length, THREAD); | |
89 } else { | |
90 assert (klass->klass_part()->oop_is_instance(), "new object array with klass not an instanceKlass"); | |
91 return ((instanceKlass*)klass->klass_part())->allocate_objArray(1, length, THREAD); | |
92 } | |
93 } | |
94 | |
2267
02f78cfa4656
7020992: jmm_DumpThreads should not allocate system object arrays outside the perm gen
stefank
parents:
2230
diff
changeset
|
95 objArrayOop oopFactory::new_system_objArray(int length, TRAPS) { |
0 | 96 int size = objArrayOopDesc::object_size(length); |
97 KlassHandle klass (THREAD, Universe::systemObjArrayKlassObj()); | |
2267
02f78cfa4656
7020992: jmm_DumpThreads should not allocate system object arrays outside the perm gen
stefank
parents:
2230
diff
changeset
|
98 objArrayOop o = (objArrayOop) |
02f78cfa4656
7020992: jmm_DumpThreads should not allocate system object arrays outside the perm gen
stefank
parents:
2230
diff
changeset
|
99 Universe::heap()->permanent_array_allocate(klass, size, length, CHECK_NULL); |
0 | 100 // initialization not needed, allocated cleared |
101 return o; | |
102 } | |
103 | |
104 | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
105 constantPoolOop oopFactory::new_constantPool(int length, |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
106 bool is_conc_safe, |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
107 TRAPS) { |
0 | 108 constantPoolKlass* ck = constantPoolKlass::cast(Universe::constantPoolKlassObj()); |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
109 return ck->allocate(length, is_conc_safe, CHECK_NULL); |
0 | 110 } |
111 | |
112 | |
542
9a25e0c45327
6792421: assert(_bitMap->isMarked(addr+size-1),inconsistent Printezis mark)
jmasa
parents:
518
diff
changeset
|
113 constantPoolCacheOop oopFactory::new_constantPoolCache(int length, |
9a25e0c45327
6792421: assert(_bitMap->isMarked(addr+size-1),inconsistent Printezis mark)
jmasa
parents:
518
diff
changeset
|
114 TRAPS) { |
0 | 115 constantPoolCacheKlass* ck = constantPoolCacheKlass::cast(Universe::constantPoolCacheKlassObj()); |
2226
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
1972
diff
changeset
|
116 return ck->allocate(length, CHECK_NULL); |
0 | 117 } |
118 | |
119 | |
939
9eebd3ac74cf
6845368: large objects cause a crash or unexpected exception
jcoomes
parents:
938
diff
changeset
|
120 klassOop oopFactory::new_instanceKlass(int vtable_len, int itable_len, |
9eebd3ac74cf
6845368: large objects cause a crash or unexpected exception
jcoomes
parents:
938
diff
changeset
|
121 int static_field_size, |
9eebd3ac74cf
6845368: large objects cause a crash or unexpected exception
jcoomes
parents:
938
diff
changeset
|
122 unsigned int nonstatic_oop_map_count, |
9eebd3ac74cf
6845368: large objects cause a crash or unexpected exception
jcoomes
parents:
938
diff
changeset
|
123 ReferenceType rt, TRAPS) { |
0 | 124 instanceKlassKlass* ikk = instanceKlassKlass::cast(Universe::instanceKlassKlassObj()); |
938 | 125 return ikk->allocate_instance_klass(vtable_len, itable_len, static_field_size, nonstatic_oop_map_count, rt, CHECK_NULL); |
0 | 126 } |
127 | |
128 | |
129 constMethodOop oopFactory::new_constMethod(int byte_code_size, | |
130 int compressed_line_number_size, | |
131 int localvariable_table_length, | |
132 int checked_exceptions_length, | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
133 bool is_conc_safe, |
0 | 134 TRAPS) { |
135 klassOop cmkObj = Universe::constMethodKlassObj(); | |
136 constMethodKlass* cmk = constMethodKlass::cast(cmkObj); | |
137 return cmk->allocate(byte_code_size, compressed_line_number_size, | |
138 localvariable_table_length, checked_exceptions_length, | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
139 is_conc_safe, |
0 | 140 CHECK_NULL); |
141 } | |
142 | |
143 | |
144 methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, | |
145 int compressed_line_number_size, | |
146 int localvariable_table_length, | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
147 int checked_exceptions_length, |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
148 bool is_conc_safe, |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
149 TRAPS) { |
0 | 150 methodKlass* mk = methodKlass::cast(Universe::methodKlassObj()); |
151 assert(!access_flags.is_native() || byte_code_size == 0, | |
152 "native methods should not contain byte codes"); | |
153 constMethodOop cm = new_constMethod(byte_code_size, | |
154 compressed_line_number_size, | |
155 localvariable_table_length, | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
156 checked_exceptions_length, |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
0
diff
changeset
|
157 is_conc_safe, CHECK_NULL); |
0 | 158 constMethodHandle rw(THREAD, cm); |
159 return mk->allocate(rw, access_flags, CHECK_NULL); | |
160 } | |
161 | |
162 | |
163 methodDataOop oopFactory::new_methodData(methodHandle method, TRAPS) { | |
164 methodDataKlass* mdk = methodDataKlass::cast(Universe::methodDataKlassObj()); | |
165 return mdk->allocate(method, CHECK_NULL); | |
166 } | |
167 | |
168 | |
169 compiledICHolderOop oopFactory::new_compiledICHolder(methodHandle method, KlassHandle klass, TRAPS) { | |
170 compiledICHolderKlass* ck = (compiledICHolderKlass*) Universe::compiledICHolderKlassObj()->klass_part(); | |
171 compiledICHolderOop c = ck->allocate(CHECK_NULL); | |
172 c->set_holder_method(method()); | |
173 c->set_holder_klass(klass()); | |
174 return c; | |
175 } |