Mercurial > hg > truffle
annotate src/share/vm/runtime/arguments.cpp @ 6995:edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 20 Nov 2012 22:35:20 +0100 |
parents | e522a00b91aa |
children | 49f0841607b7 |
rev | line source |
---|---|
0 | 1 /* |
4838 | 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:
1506
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1506
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:
1506
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #include "precompiled.hpp" |
26 #include "classfile/javaAssertions.hpp" | |
27 #include "compiler/compilerOracle.hpp" | |
28 #include "memory/allocation.inline.hpp" | |
29 #include "memory/cardTableRS.hpp" | |
30 #include "memory/referenceProcessor.hpp" | |
31 #include "memory/universe.inline.hpp" | |
32 #include "oops/oop.inline.hpp" | |
33 #include "prims/jvmtiExport.hpp" | |
34 #include "runtime/arguments.hpp" | |
35 #include "runtime/globals_extension.hpp" | |
36 #include "runtime/java.hpp" | |
37 #include "services/management.hpp" | |
6197 | 38 #include "services/memTracker.hpp" |
1972 | 39 #include "utilities/defaultStream.hpp" |
40 #include "utilities/taskqueue.hpp" | |
41 #ifdef TARGET_OS_FAMILY_linux | |
42 # include "os_linux.inline.hpp" | |
43 #endif | |
44 #ifdef TARGET_OS_FAMILY_solaris | |
45 # include "os_solaris.inline.hpp" | |
46 #endif | |
47 #ifdef TARGET_OS_FAMILY_windows | |
48 # include "os_windows.inline.hpp" | |
49 #endif | |
3960 | 50 #ifdef TARGET_OS_FAMILY_bsd |
51 # include "os_bsd.inline.hpp" | |
52 #endif | |
1972 | 53 #ifndef SERIALGC |
54 #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" | |
55 #endif | |
0 | 56 |
2474 | 57 // Note: This is a special bug reporting site for the JVM |
58 #define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp" | |
0 | 59 #define DEFAULT_JAVA_LAUNCHER "generic" |
60 | |
61 char** Arguments::_jvm_flags_array = NULL; | |
62 int Arguments::_num_jvm_flags = 0; | |
63 char** Arguments::_jvm_args_array = NULL; | |
64 int Arguments::_num_jvm_args = 0; | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
65 #ifdef GRAAL |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
66 char** Arguments::_graal_args_array = NULL; |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
67 int Arguments::_num_graal_args = 0; |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
68 #endif |
0 | 69 char* Arguments::_java_command = NULL; |
70 SystemProperty* Arguments::_system_properties = NULL; | |
71 const char* Arguments::_gc_log_filename = NULL; | |
72 bool Arguments::_has_profile = false; | |
73 bool Arguments::_has_alloc_profile = false; | |
74 uintx Arguments::_min_heap_size = 0; | |
75 Arguments::Mode Arguments::_mode = _mixed; | |
76 bool Arguments::_java_compiler = false; | |
77 bool Arguments::_xdebug_mode = false; | |
78 const char* Arguments::_java_vendor_url_bug = DEFAULT_VENDOR_URL_BUG; | |
79 const char* Arguments::_sun_java_launcher = DEFAULT_JAVA_LAUNCHER; | |
80 int Arguments::_sun_java_launcher_pid = -1; | |
2302
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
81 bool Arguments::_created_by_gamma_launcher = false; |
0 | 82 |
83 // These parameters are reset in method parse_vm_init_args(JavaVMInitArgs*) | |
84 bool Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods; | |
85 bool Arguments::_UseOnStackReplacement = UseOnStackReplacement; | |
86 bool Arguments::_BackgroundCompilation = BackgroundCompilation; | |
87 bool Arguments::_ClipInlining = ClipInlining; | |
88 | |
89 char* Arguments::SharedArchivePath = NULL; | |
90 | |
91 AgentLibraryList Arguments::_libraryList; | |
92 AgentLibraryList Arguments::_agentList; | |
93 | |
94 abort_hook_t Arguments::_abort_hook = NULL; | |
95 exit_hook_t Arguments::_exit_hook = NULL; | |
96 vfprintf_hook_t Arguments::_vfprintf_hook = NULL; | |
97 | |
98 | |
99 SystemProperty *Arguments::_java_ext_dirs = NULL; | |
100 SystemProperty *Arguments::_java_endorsed_dirs = NULL; | |
101 SystemProperty *Arguments::_sun_boot_library_path = NULL; | |
102 SystemProperty *Arguments::_java_library_path = NULL; | |
103 SystemProperty *Arguments::_java_home = NULL; | |
104 SystemProperty *Arguments::_java_class_path = NULL; | |
105 SystemProperty *Arguments::_sun_boot_class_path = NULL; | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
106 #ifdef GRAAL |
3546
4aa80ca3dbec
Separate compiler bootstrappath from application bootstrappath.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3544
diff
changeset
|
107 SystemProperty *Arguments::_compiler_class_path = NULL; |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
108 #endif |
0 | 109 |
110 char* Arguments::_meta_index_path = NULL; | |
111 char* Arguments::_meta_index_dir = NULL; | |
112 | |
113 // Check if head of 'option' matches 'name', and sets 'tail' remaining part of option string | |
114 | |
115 static bool match_option(const JavaVMOption *option, const char* name, | |
116 const char** tail) { | |
117 int len = (int)strlen(name); | |
118 if (strncmp(option->optionString, name, len) == 0) { | |
119 *tail = option->optionString + len; | |
120 return true; | |
121 } else { | |
122 return false; | |
123 } | |
124 } | |
125 | |
126 static void logOption(const char* opt) { | |
127 if (PrintVMOptions) { | |
128 jio_fprintf(defaultStream::output_stream(), "VM option '%s'\n", opt); | |
129 } | |
130 } | |
131 | |
132 // Process java launcher properties. | |
133 void Arguments::process_sun_java_launcher_properties(JavaVMInitArgs* args) { | |
134 // See if sun.java.launcher or sun.java.launcher.pid is defined. | |
135 // Must do this before setting up other system properties, | |
136 // as some of them may depend on launcher type. | |
137 for (int index = 0; index < args->nOptions; index++) { | |
138 const JavaVMOption* option = args->options + index; | |
139 const char* tail; | |
140 | |
141 if (match_option(option, "-Dsun.java.launcher=", &tail)) { | |
142 process_java_launcher_argument(tail, option->extraInfo); | |
143 continue; | |
144 } | |
145 if (match_option(option, "-Dsun.java.launcher.pid=", &tail)) { | |
146 _sun_java_launcher_pid = atoi(tail); | |
147 continue; | |
148 } | |
149 } | |
150 } | |
151 | |
152 // Initialize system properties key and value. | |
153 void Arguments::init_system_properties() { | |
154 | |
155 PropertyList_add(&_system_properties, new SystemProperty("java.vm.specification.name", | |
156 "Java Virtual Machine Specification", false)); | |
157 PropertyList_add(&_system_properties, new SystemProperty("java.vm.version", VM_Version::vm_release(), false)); | |
158 PropertyList_add(&_system_properties, new SystemProperty("java.vm.name", VM_Version::vm_name(), false)); | |
159 PropertyList_add(&_system_properties, new SystemProperty("java.vm.info", VM_Version::vm_info_string(), true)); | |
160 | |
161 // following are JVMTI agent writeable properties. | |
162 // Properties values are set to NULL and they are | |
163 // os specific they are initialized in os::init_system_properties_values(). | |
164 _java_ext_dirs = new SystemProperty("java.ext.dirs", NULL, true); | |
165 _java_endorsed_dirs = new SystemProperty("java.endorsed.dirs", NULL, true); | |
166 _sun_boot_library_path = new SystemProperty("sun.boot.library.path", NULL, true); | |
167 _java_library_path = new SystemProperty("java.library.path", NULL, true); | |
168 _java_home = new SystemProperty("java.home", NULL, true); | |
169 _sun_boot_class_path = new SystemProperty("sun.boot.class.path", NULL, true); | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
170 #ifdef GRAAL |
3546
4aa80ca3dbec
Separate compiler bootstrappath from application bootstrappath.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3544
diff
changeset
|
171 _compiler_class_path = new SystemProperty("compiler.class.path", NULL, true); |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
172 #endif |
0 | 173 |
174 _java_class_path = new SystemProperty("java.class.path", "", true); | |
175 | |
176 // Add to System Property list. | |
177 PropertyList_add(&_system_properties, _java_ext_dirs); | |
178 PropertyList_add(&_system_properties, _java_endorsed_dirs); | |
179 PropertyList_add(&_system_properties, _sun_boot_library_path); | |
180 PropertyList_add(&_system_properties, _java_library_path); | |
181 PropertyList_add(&_system_properties, _java_home); | |
182 PropertyList_add(&_system_properties, _java_class_path); | |
183 PropertyList_add(&_system_properties, _sun_boot_class_path); | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
184 #ifdef GRAAL |
3546
4aa80ca3dbec
Separate compiler bootstrappath from application bootstrappath.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3544
diff
changeset
|
185 PropertyList_add(&_system_properties, _compiler_class_path); |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
186 #endif |
0 | 187 |
188 // Set OS specific system properties values | |
189 os::init_system_properties_values(); | |
190 } | |
191 | |
1864
dfb38ea7da17
6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents:
1805
diff
changeset
|
192 |
dfb38ea7da17
6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents:
1805
diff
changeset
|
193 // Update/Initialize System properties after JDK version number is known |
dfb38ea7da17
6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents:
1805
diff
changeset
|
194 void Arguments::init_version_specific_system_properties() { |
1956
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
195 enum { bufsz = 16 }; |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
196 char buffer[bufsz]; |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
197 const char* spec_vendor = "Sun Microsystems Inc."; |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
198 uint32_t spec_version = 0; |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
199 |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
200 if (JDK_Version::is_gte_jdk17x_version()) { |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
201 spec_vendor = "Oracle Corporation"; |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
202 spec_version = JDK_Version::current().major_version(); |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
203 } |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
204 jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version); |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
205 |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
206 PropertyList_add(&_system_properties, |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
207 new SystemProperty("java.vm.specification.vendor", spec_vendor, false)); |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
208 PropertyList_add(&_system_properties, |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
209 new SystemProperty("java.vm.specification.version", buffer, false)); |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
210 PropertyList_add(&_system_properties, |
35f885165c69
6981737: The java.vm.specification.version property is 1.0, seems like it should be 2.0
kamg
parents:
1875
diff
changeset
|
211 new SystemProperty("java.vm.vendor", VM_Version::vm_vendor(), false)); |
1864
dfb38ea7da17
6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents:
1805
diff
changeset
|
212 } |
dfb38ea7da17
6988363: Rebrand vm vendor property settings (jdk7 only)
zgu
parents:
1805
diff
changeset
|
213 |
242 | 214 /** |
215 * Provide a slightly more user-friendly way of eliminating -XX flags. | |
216 * When a flag is eliminated, it can be added to this list in order to | |
217 * continue accepting this flag on the command-line, while issuing a warning | |
218 * and ignoring the value. Once the JDK version reaches the 'accept_until' | |
219 * limit, we flatly refuse to admit the existence of the flag. This allows | |
220 * a flag to die correctly over JDK releases using HSX. | |
221 */ | |
222 typedef struct { | |
223 const char* name; | |
224 JDK_Version obsoleted_in; // when the flag went away | |
225 JDK_Version accept_until; // which version to start denying the existence | |
226 } ObsoleteFlag; | |
0 | 227 |
242 | 228 static ObsoleteFlag obsolete_jvm_flags[] = { |
229 { "UseTrainGC", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
230 { "UseSpecialLargeObjectHandling", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
231 { "UseOversizedCarHandling", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
232 { "TraceCarAllocation", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
233 { "PrintTrainGCProcessingStats", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
234 { "LogOfCarSpaceSize", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
235 { "OversizedCarThreshold", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
236 { "MinTickInterval", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
237 { "DefaultTickInterval", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
238 { "MaxTickInterval", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
239 { "DelayTickAdjustment", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
240 { "ProcessingToTenuringRatio", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
241 { "MinTrainLength", JDK_Version::jdk(5), JDK_Version::jdk(7) }, | |
242 { "AppendRatio", JDK_Version::jdk_update(6,10), JDK_Version::jdk(7) }, | |
1064 | 243 { "DefaultMaxRAM", JDK_Version::jdk_update(6,18), JDK_Version::jdk(7) }, |
244 { "DefaultInitialRAMFraction", | |
245 JDK_Version::jdk_update(6,18), JDK_Version::jdk(7) }, | |
1706
9d7a8ab3736b
6962589: remove breadth first scanning code from parallel gc
tonyp
parents:
1628
diff
changeset
|
246 { "UseDepthFirstScavengeOrder", |
9d7a8ab3736b
6962589: remove breadth first scanning code from parallel gc
tonyp
parents:
1628
diff
changeset
|
247 JDK_Version::jdk_update(6,22), JDK_Version::jdk(7) }, |
1888
a7214d79fcf1
6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents:
1832
diff
changeset
|
248 { "HandlePromotionFailure", |
a7214d79fcf1
6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents:
1832
diff
changeset
|
249 JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) }, |
a7214d79fcf1
6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents:
1832
diff
changeset
|
250 { "MaxLiveObjectEvacuationRatio", |
a7214d79fcf1
6896603: CMS/GCH: collection_attempt_is_safe() ergo should use more recent data
ysr
parents:
1832
diff
changeset
|
251 JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) }, |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
252 { "ForceSharedSpaces", JDK_Version::jdk_update(6,25), JDK_Version::jdk(8) }, |
3251
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
253 { "UseParallelOldGCCompacting", |
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
254 JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) }, |
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
255 { "UseParallelDensePrefixUpdate", |
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
256 JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) }, |
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
257 { "UseParallelOldGCDensePrefix", |
eda9eb483d29
6841742: par compact - remove unused/unsupported options
jcoomes
parents:
3250
diff
changeset
|
258 JDK_Version::jdk_update(6,27), JDK_Version::jdk(8) }, |
2460 | 259 { "AllowTransitionalJSR292", JDK_Version::jdk(7), JDK_Version::jdk(8) }, |
3797
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
260 { "UseCompressedStrings", JDK_Version::jdk(7), JDK_Version::jdk(8) }, |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
261 { "CMSPermGenPrecleaningEnabled", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
262 { "CMSTriggerPermRatio", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
263 { "CMSInitiatingPermOccupancyFraction", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
264 { "AdaptivePermSizeWeight", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
265 { "PermGenPadding", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
266 { "PermMarkSweepDeadRatio", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
267 { "PermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
268 { "MaxPermSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
269 { "MinPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
270 { "MaxPermHeapExpansion", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
271 { "CMSRevisitStackSize", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
272 { "PrintRevisitStats", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
6916 | 273 { "UseVectoredExceptions", JDK_Version::jdk(8), JDK_Version::jdk(9) }, |
3797
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
274 #ifdef PRODUCT |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
275 { "DesiredMethodLimit", |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
276 JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) }, |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
277 #endif // PRODUCT |
242 | 278 { NULL, JDK_Version(0), JDK_Version(0) } |
279 }; | |
280 | |
281 // Returns true if the flag is obsolete and fits into the range specified | |
282 // for being ignored. In the case that the flag is ignored, the 'version' | |
283 // value is filled in with the version number when the flag became | |
284 // obsolete so that that value can be displayed to the user. | |
285 bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) { | |
0 | 286 int i = 0; |
242 | 287 assert(version != NULL, "Must provide a version buffer"); |
288 while (obsolete_jvm_flags[i].name != NULL) { | |
289 const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; | |
0 | 290 // <flag>=xxx form |
291 // [-|+]<flag> form | |
242 | 292 if ((strncmp(flag_status.name, s, strlen(flag_status.name)) == 0) || |
0 | 293 ((s[0] == '+' || s[0] == '-') && |
242 | 294 (strncmp(flag_status.name, &s[1], strlen(flag_status.name)) == 0))) { |
295 if (JDK_Version::current().compare(flag_status.accept_until) == -1) { | |
296 *version = flag_status.obsoleted_in; | |
297 return true; | |
298 } | |
0 | 299 } |
300 i++; | |
301 } | |
302 return false; | |
303 } | |
304 | |
305 // Constructs the system class path (aka boot class path) from the following | |
306 // components, in order: | |
307 // | |
308 // prefix // from -Xbootclasspath/p:... | |
309 // endorsed // the expansion of -Djava.endorsed.dirs=... | |
310 // base // from os::get_system_properties() or -Xbootclasspath= | |
311 // suffix // from -Xbootclasspath/a:... | |
312 // | |
313 // java.endorsed.dirs is a list of directories; any jar or zip files in the | |
314 // directories are added to the sysclasspath just before the base. | |
315 // | |
316 // This could be AllStatic, but it isn't needed after argument processing is | |
317 // complete. | |
318 class SysClassPath: public StackObj { | |
319 public: | |
320 SysClassPath(const char* base); | |
321 ~SysClassPath(); | |
322 | |
323 inline void set_base(const char* base); | |
324 inline void add_prefix(const char* prefix); | |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
325 inline void add_suffix_to_prefix(const char* suffix); |
0 | 326 inline void add_suffix(const char* suffix); |
327 inline void reset_path(const char* base); | |
328 | |
329 // Expand the jar/zip files in each directory listed by the java.endorsed.dirs | |
330 // property. Must be called after all command-line arguments have been | |
331 // processed (in particular, -Djava.endorsed.dirs=...) and before calling | |
332 // combined_path(). | |
333 void expand_endorsed(); | |
334 | |
335 inline const char* get_base() const { return _items[_scp_base]; } | |
336 inline const char* get_prefix() const { return _items[_scp_prefix]; } | |
337 inline const char* get_suffix() const { return _items[_scp_suffix]; } | |
338 inline const char* get_endorsed() const { return _items[_scp_endorsed]; } | |
339 | |
340 // Combine all the components into a single c-heap-allocated string; caller | |
341 // must free the string if/when no longer needed. | |
342 char* combined_path(); | |
343 | |
344 private: | |
345 // Utility routines. | |
346 static char* add_to_path(const char* path, const char* str, bool prepend); | |
347 static char* add_jars_to_path(char* path, const char* directory); | |
348 | |
349 inline void reset_item_at(int index); | |
350 | |
351 // Array indices for the items that make up the sysclasspath. All except the | |
352 // base are allocated in the C heap and freed by this class. | |
353 enum { | |
354 _scp_prefix, // from -Xbootclasspath/p:... | |
355 _scp_endorsed, // the expansion of -Djava.endorsed.dirs=... | |
356 _scp_base, // the default sysclasspath | |
357 _scp_suffix, // from -Xbootclasspath/a:... | |
358 _scp_nitems // the number of items, must be last. | |
359 }; | |
360 | |
361 const char* _items[_scp_nitems]; | |
362 DEBUG_ONLY(bool _expansion_done;) | |
363 }; | |
364 | |
365 SysClassPath::SysClassPath(const char* base) { | |
366 memset(_items, 0, sizeof(_items)); | |
367 _items[_scp_base] = base; | |
368 DEBUG_ONLY(_expansion_done = false;) | |
369 } | |
370 | |
371 SysClassPath::~SysClassPath() { | |
372 // Free everything except the base. | |
373 for (int i = 0; i < _scp_nitems; ++i) { | |
374 if (i != _scp_base) reset_item_at(i); | |
375 } | |
376 DEBUG_ONLY(_expansion_done = false;) | |
377 } | |
378 | |
379 inline void SysClassPath::set_base(const char* base) { | |
380 _items[_scp_base] = base; | |
381 } | |
382 | |
383 inline void SysClassPath::add_prefix(const char* prefix) { | |
384 _items[_scp_prefix] = add_to_path(_items[_scp_prefix], prefix, true); | |
385 } | |
386 | |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
387 inline void SysClassPath::add_suffix_to_prefix(const char* suffix) { |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
388 _items[_scp_prefix] = add_to_path(_items[_scp_prefix], suffix, false); |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
389 } |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
390 |
0 | 391 inline void SysClassPath::add_suffix(const char* suffix) { |
392 _items[_scp_suffix] = add_to_path(_items[_scp_suffix], suffix, false); | |
393 } | |
394 | |
395 inline void SysClassPath::reset_item_at(int index) { | |
396 assert(index < _scp_nitems && index != _scp_base, "just checking"); | |
397 if (_items[index] != NULL) { | |
6197 | 398 FREE_C_HEAP_ARRAY(char, _items[index], mtInternal); |
0 | 399 _items[index] = NULL; |
400 } | |
401 } | |
402 | |
403 inline void SysClassPath::reset_path(const char* base) { | |
404 // Clear the prefix and suffix. | |
405 reset_item_at(_scp_prefix); | |
406 reset_item_at(_scp_suffix); | |
407 set_base(base); | |
408 } | |
409 | |
410 //------------------------------------------------------------------------------ | |
411 | |
412 void SysClassPath::expand_endorsed() { | |
413 assert(_items[_scp_endorsed] == NULL, "can only be called once."); | |
414 | |
415 const char* path = Arguments::get_property("java.endorsed.dirs"); | |
416 if (path == NULL) { | |
417 path = Arguments::get_endorsed_dir(); | |
418 assert(path != NULL, "no default for java.endorsed.dirs"); | |
419 } | |
420 | |
421 char* expanded_path = NULL; | |
422 const char separator = *os::path_separator(); | |
423 const char* const end = path + strlen(path); | |
424 while (path < end) { | |
425 const char* tmp_end = strchr(path, separator); | |
426 if (tmp_end == NULL) { | |
427 expanded_path = add_jars_to_path(expanded_path, path); | |
428 path = end; | |
429 } else { | |
6197 | 430 char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1, mtInternal); |
0 | 431 memcpy(dirpath, path, tmp_end - path); |
432 dirpath[tmp_end - path] = '\0'; | |
433 expanded_path = add_jars_to_path(expanded_path, dirpath); | |
6197 | 434 FREE_C_HEAP_ARRAY(char, dirpath, mtInternal); |
0 | 435 path = tmp_end + 1; |
436 } | |
437 } | |
438 _items[_scp_endorsed] = expanded_path; | |
439 DEBUG_ONLY(_expansion_done = true;) | |
440 } | |
441 | |
442 // Combine the bootclasspath elements, some of which may be null, into a single | |
443 // c-heap-allocated string. | |
444 char* SysClassPath::combined_path() { | |
445 assert(_items[_scp_base] != NULL, "empty default sysclasspath"); | |
446 assert(_expansion_done, "must call expand_endorsed() first."); | |
447 | |
448 size_t lengths[_scp_nitems]; | |
449 size_t total_len = 0; | |
450 | |
451 const char separator = *os::path_separator(); | |
452 | |
453 // Get the lengths. | |
454 int i; | |
455 for (i = 0; i < _scp_nitems; ++i) { | |
456 if (_items[i] != NULL) { | |
457 lengths[i] = strlen(_items[i]); | |
458 // Include space for the separator char (or a NULL for the last item). | |
459 total_len += lengths[i] + 1; | |
460 } | |
461 } | |
462 assert(total_len > 0, "empty sysclasspath not allowed"); | |
463 | |
464 // Copy the _items to a single string. | |
6197 | 465 char* cp = NEW_C_HEAP_ARRAY(char, total_len, mtInternal); |
0 | 466 char* cp_tmp = cp; |
467 for (i = 0; i < _scp_nitems; ++i) { | |
468 if (_items[i] != NULL) { | |
469 memcpy(cp_tmp, _items[i], lengths[i]); | |
470 cp_tmp += lengths[i]; | |
471 *cp_tmp++ = separator; | |
472 } | |
473 } | |
474 *--cp_tmp = '\0'; // Replace the extra separator. | |
475 return cp; | |
476 } | |
477 | |
478 // Note: path must be c-heap-allocated (or NULL); it is freed if non-null. | |
479 char* | |
480 SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { | |
481 char *cp; | |
482 | |
483 assert(str != NULL, "just checking"); | |
484 if (path == NULL) { | |
485 size_t len = strlen(str) + 1; | |
6197 | 486 cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); |
0 | 487 memcpy(cp, str, len); // copy the trailing null |
488 } else { | |
489 const char separator = *os::path_separator(); | |
490 size_t old_len = strlen(path); | |
491 size_t str_len = strlen(str); | |
492 size_t len = old_len + str_len + 2; | |
493 | |
494 if (prepend) { | |
6197 | 495 cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); |
0 | 496 char* cp_tmp = cp; |
497 memcpy(cp_tmp, str, str_len); | |
498 cp_tmp += str_len; | |
499 *cp_tmp = separator; | |
500 memcpy(++cp_tmp, path, old_len + 1); // copy the trailing null | |
6197 | 501 FREE_C_HEAP_ARRAY(char, path, mtInternal); |
0 | 502 } else { |
6197 | 503 cp = REALLOC_C_HEAP_ARRAY(char, path, len, mtInternal); |
0 | 504 char* cp_tmp = cp + old_len; |
505 *cp_tmp = separator; | |
506 memcpy(++cp_tmp, str, str_len + 1); // copy the trailing null | |
507 } | |
508 } | |
509 return cp; | |
510 } | |
511 | |
512 // Scan the directory and append any jar or zip files found to path. | |
513 // Note: path must be c-heap-allocated (or NULL); it is freed if non-null. | |
514 char* SysClassPath::add_jars_to_path(char* path, const char* directory) { | |
515 DIR* dir = os::opendir(directory); | |
516 if (dir == NULL) return path; | |
517 | |
518 char dir_sep[2] = { '\0', '\0' }; | |
519 size_t directory_len = strlen(directory); | |
520 const char fileSep = *os::file_separator(); | |
521 if (directory[directory_len - 1] != fileSep) dir_sep[0] = fileSep; | |
522 | |
523 /* Scan the directory for jars/zips, appending them to path. */ | |
524 struct dirent *entry; | |
6197 | 525 char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory), mtInternal); |
0 | 526 while ((entry = os::readdir(dir, (dirent *) dbuf)) != NULL) { |
527 const char* name = entry->d_name; | |
528 const char* ext = name + strlen(name) - 4; | |
529 bool isJarOrZip = ext > name && | |
530 (os::file_name_strcmp(ext, ".jar") == 0 || | |
531 os::file_name_strcmp(ext, ".zip") == 0); | |
532 if (isJarOrZip) { | |
6197 | 533 char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name), mtInternal); |
0 | 534 sprintf(jarpath, "%s%s%s", directory, dir_sep, name); |
535 path = add_to_path(path, jarpath, false); | |
6197 | 536 FREE_C_HEAP_ARRAY(char, jarpath, mtInternal); |
0 | 537 } |
538 } | |
6197 | 539 FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); |
0 | 540 os::closedir(dir); |
541 return path; | |
542 } | |
543 | |
544 // Parses a memory size specification string. | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
545 static bool atomull(const char *s, julong* result) { |
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
546 julong n = 0; |
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
547 int args_read = sscanf(s, os::julong_format_specifier(), &n); |
0 | 548 if (args_read != 1) { |
549 return false; | |
550 } | |
551 while (*s != '\0' && isdigit(*s)) { | |
552 s++; | |
553 } | |
554 // 4705540: illegal if more characters are found after the first non-digit | |
555 if (strlen(s) > 1) { | |
556 return false; | |
557 } | |
558 switch (*s) { | |
559 case 'T': case 't': | |
560 *result = n * G * K; | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
561 // Check for overflow. |
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
562 if (*result/((julong)G * K) != n) return false; |
0 | 563 return true; |
564 case 'G': case 'g': | |
565 *result = n * G; | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
566 if (*result/G != n) return false; |
0 | 567 return true; |
568 case 'M': case 'm': | |
569 *result = n * M; | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
570 if (*result/M != n) return false; |
0 | 571 return true; |
572 case 'K': case 'k': | |
573 *result = n * K; | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
574 if (*result/K != n) return false; |
0 | 575 return true; |
576 case '\0': | |
577 *result = n; | |
578 return true; | |
579 default: | |
580 return false; | |
581 } | |
582 } | |
583 | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
584 Arguments::ArgsRange Arguments::check_memory_size(julong size, julong min_size) { |
0 | 585 if (size < min_size) return arg_too_small; |
586 // Check that size will fit in a size_t (only relevant on 32-bit) | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
587 if (size > max_uintx) return arg_too_big; |
0 | 588 return arg_in_range; |
589 } | |
590 | |
591 // Describe an argument out of range error | |
592 void Arguments::describe_range_error(ArgsRange errcode) { | |
593 switch(errcode) { | |
594 case arg_too_big: | |
595 jio_fprintf(defaultStream::error_stream(), | |
596 "The specified size exceeds the maximum " | |
597 "representable size.\n"); | |
598 break; | |
599 case arg_too_small: | |
600 case arg_unreadable: | |
601 case arg_in_range: | |
602 // do nothing for now | |
603 break; | |
604 default: | |
605 ShouldNotReachHere(); | |
606 } | |
607 } | |
608 | |
609 static bool set_bool_flag(char* name, bool value, FlagValueOrigin origin) { | |
610 return CommandLineFlags::boolAtPut(name, &value, origin); | |
611 } | |
612 | |
613 static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin) { | |
614 double v; | |
615 if (sscanf(value, "%lf", &v) != 1) { | |
616 return false; | |
617 } | |
618 | |
619 if (CommandLineFlags::doubleAtPut(name, &v, origin)) { | |
620 return true; | |
621 } | |
622 return false; | |
623 } | |
624 | |
625 static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
626 julong v; |
0 | 627 intx intx_v; |
628 bool is_neg = false; | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
629 // Check the sign first since atomull() parses only unsigned values. |
0 | 630 if (*value == '-') { |
631 if (!CommandLineFlags::intxAt(name, &intx_v)) { | |
632 return false; | |
633 } | |
634 value++; | |
635 is_neg = true; | |
636 } | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
637 if (!atomull(value, &v)) { |
0 | 638 return false; |
639 } | |
640 intx_v = (intx) v; | |
641 if (is_neg) { | |
642 intx_v = -intx_v; | |
643 } | |
644 if (CommandLineFlags::intxAtPut(name, &intx_v, origin)) { | |
645 return true; | |
646 } | |
647 uintx uintx_v = (uintx) v; | |
648 if (!is_neg && CommandLineFlags::uintxAtPut(name, &uintx_v, origin)) { | |
649 return true; | |
650 } | |
1064 | 651 uint64_t uint64_t_v = (uint64_t) v; |
652 if (!is_neg && CommandLineFlags::uint64_tAtPut(name, &uint64_t_v, origin)) { | |
653 return true; | |
654 } | |
0 | 655 return false; |
656 } | |
657 | |
658 static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) { | |
659 if (!CommandLineFlags::ccstrAtPut(name, &value, origin)) return false; | |
660 // Contract: CommandLineFlags always returns a pointer that needs freeing. | |
6197 | 661 FREE_C_HEAP_ARRAY(char, value, mtInternal); |
0 | 662 return true; |
663 } | |
664 | |
665 static bool append_to_string_flag(char* name, const char* new_value, FlagValueOrigin origin) { | |
666 const char* old_value = ""; | |
667 if (!CommandLineFlags::ccstrAt(name, &old_value)) return false; | |
668 size_t old_len = old_value != NULL ? strlen(old_value) : 0; | |
669 size_t new_len = strlen(new_value); | |
670 const char* value; | |
671 char* free_this_too = NULL; | |
672 if (old_len == 0) { | |
673 value = new_value; | |
674 } else if (new_len == 0) { | |
675 value = old_value; | |
676 } else { | |
6197 | 677 char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1, mtInternal); |
0 | 678 // each new setting adds another LINE to the switch: |
679 sprintf(buf, "%s\n%s", old_value, new_value); | |
680 value = buf; | |
681 free_this_too = buf; | |
682 } | |
683 (void) CommandLineFlags::ccstrAtPut(name, &value, origin); | |
684 // CommandLineFlags always returns a pointer that needs freeing. | |
6197 | 685 FREE_C_HEAP_ARRAY(char, value, mtInternal); |
0 | 686 if (free_this_too != NULL) { |
687 // CommandLineFlags made its own copy, so I must delete my own temp. buffer. | |
6197 | 688 FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal); |
0 | 689 } |
690 return true; | |
691 } | |
692 | |
693 bool Arguments::parse_argument(const char* arg, FlagValueOrigin origin) { | |
694 | |
695 // range of acceptable characters spelled out for portability reasons | |
696 #define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]" | |
697 #define BUFLEN 255 | |
698 char name[BUFLEN+1]; | |
699 char dummy; | |
700 | |
701 if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { | |
702 return set_bool_flag(name, false, origin); | |
703 } | |
704 if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { | |
705 return set_bool_flag(name, true, origin); | |
706 } | |
707 | |
708 char punct; | |
709 if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') { | |
710 const char* value = strchr(arg, '=') + 1; | |
711 Flag* flag = Flag::find_flag(name, strlen(name)); | |
712 if (flag != NULL && flag->is_ccstr()) { | |
713 if (flag->ccstr_accumulates()) { | |
714 return append_to_string_flag(name, value, origin); | |
715 } else { | |
716 if (value[0] == '\0') { | |
717 value = NULL; | |
718 } | |
719 return set_string_flag(name, value, origin); | |
720 } | |
721 } | |
722 } | |
723 | |
724 if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE ":%c", name, &punct) == 2 && punct == '=') { | |
725 const char* value = strchr(arg, '=') + 1; | |
726 // -XX:Foo:=xxx will reset the string flag to the given value. | |
727 if (value[0] == '\0') { | |
728 value = NULL; | |
729 } | |
730 return set_string_flag(name, value, origin); | |
731 } | |
732 | |
733 #define SIGNED_FP_NUMBER_RANGE "[-0123456789.]" | |
734 #define SIGNED_NUMBER_RANGE "[-0123456789]" | |
735 #define NUMBER_RANGE "[0123456789]" | |
736 char value[BUFLEN + 1]; | |
737 char value2[BUFLEN + 1]; | |
738 if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_NUMBER_RANGE "." "%" XSTR(BUFLEN) NUMBER_RANGE "%c", name, value, value2, &dummy) == 3) { | |
739 // Looks like a floating-point number -- try again with more lenient format string | |
740 if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_FP_NUMBER_RANGE "%c", name, value, &dummy) == 2) { | |
741 return set_fp_numeric_flag(name, value, origin); | |
742 } | |
743 } | |
744 | |
745 #define VALUE_RANGE "[-kmgtKMGT0123456789]" | |
746 if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) VALUE_RANGE "%c", name, value, &dummy) == 2) { | |
747 return set_numeric_flag(name, value, origin); | |
748 } | |
749 | |
750 return false; | |
751 } | |
752 | |
753 void Arguments::add_string(char*** bldarray, int* count, const char* arg) { | |
754 assert(bldarray != NULL, "illegal argument"); | |
755 | |
756 if (arg == NULL) { | |
757 return; | |
758 } | |
759 | |
760 int index = *count; | |
761 | |
762 // expand the array and add arg to the last element | |
763 (*count)++; | |
764 if (*bldarray == NULL) { | |
6197 | 765 *bldarray = NEW_C_HEAP_ARRAY(char*, *count, mtInternal); |
0 | 766 } else { |
6197 | 767 *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count, mtInternal); |
0 | 768 } |
769 (*bldarray)[index] = strdup(arg); | |
770 } | |
771 | |
772 void Arguments::build_jvm_args(const char* arg) { | |
773 add_string(&_jvm_args_array, &_num_jvm_args, arg); | |
774 } | |
775 | |
776 void Arguments::build_jvm_flags(const char* arg) { | |
777 add_string(&_jvm_flags_array, &_num_jvm_flags, arg); | |
778 } | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
779 #ifdef GRAAL |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
780 void Arguments::add_graal_arg(const char* arg) { |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
781 add_string(&_graal_args_array, &_num_graal_args, arg); |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1356
diff
changeset
|
782 } |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
783 #endif |
0 | 784 |
785 // utility function to return a string that concatenates all | |
786 // strings in a given char** array | |
787 const char* Arguments::build_resource_string(char** args, int count) { | |
788 if (args == NULL || count == 0) { | |
789 return NULL; | |
790 } | |
791 size_t length = strlen(args[0]) + 1; // add 1 for the null terminator | |
792 for (int i = 1; i < count; i++) { | |
793 length += strlen(args[i]) + 1; // add 1 for a space | |
794 } | |
795 char* s = NEW_RESOURCE_ARRAY(char, length); | |
796 strcpy(s, args[0]); | |
797 for (int j = 1; j < count; j++) { | |
798 strcat(s, " "); | |
799 strcat(s, args[j]); | |
800 } | |
801 return (const char*) s; | |
802 } | |
803 | |
804 void Arguments::print_on(outputStream* st) { | |
805 st->print_cr("VM Arguments:"); | |
806 if (num_jvm_flags() > 0) { | |
807 st->print("jvm_flags: "); print_jvm_flags_on(st); | |
808 } | |
809 if (num_jvm_args() > 0) { | |
810 st->print("jvm_args: "); print_jvm_args_on(st); | |
811 } | |
812 st->print_cr("java_command: %s", java_command() ? java_command() : "<unknown>"); | |
6879
8ebcedb7604d
7053130: hs_err file does not record specified CLASSPATH
coleenp
parents:
6878
diff
changeset
|
813 if (_java_class_path != NULL) { |
8ebcedb7604d
7053130: hs_err file does not record specified CLASSPATH
coleenp
parents:
6878
diff
changeset
|
814 char* path = _java_class_path->value(); |
8ebcedb7604d
7053130: hs_err file does not record specified CLASSPATH
coleenp
parents:
6878
diff
changeset
|
815 st->print_cr("java_class_path (initial): %s", strlen(path) == 0 ? "<not set>" : path ); |
8ebcedb7604d
7053130: hs_err file does not record specified CLASSPATH
coleenp
parents:
6878
diff
changeset
|
816 } |
0 | 817 st->print_cr("Launcher Type: %s", _sun_java_launcher); |
818 } | |
819 | |
820 void Arguments::print_jvm_flags_on(outputStream* st) { | |
821 if (_num_jvm_flags > 0) { | |
822 for (int i=0; i < _num_jvm_flags; i++) { | |
823 st->print("%s ", _jvm_flags_array[i]); | |
824 } | |
825 st->print_cr(""); | |
826 } | |
827 } | |
828 | |
829 void Arguments::print_jvm_args_on(outputStream* st) { | |
830 if (_num_jvm_args > 0) { | |
831 for (int i=0; i < _num_jvm_args; i++) { | |
832 st->print("%s ", _jvm_args_array[i]); | |
833 } | |
834 st->print_cr(""); | |
835 } | |
836 } | |
837 | |
242 | 838 bool Arguments::process_argument(const char* arg, |
839 jboolean ignore_unrecognized, FlagValueOrigin origin) { | |
840 | |
841 JDK_Version since = JDK_Version(); | |
0 | 842 |
3250 | 843 if (parse_argument(arg, origin) || ignore_unrecognized) { |
844 return true; | |
0 | 845 } |
3250 | 846 |
847 const char * const argname = *arg == '+' || *arg == '-' ? arg + 1 : arg; | |
848 if (is_newly_obsolete(arg, &since)) { | |
849 char version[256]; | |
850 since.to_string(version, sizeof(version)); | |
851 warning("ignoring option %s; support was removed in %s", argname, version); | |
852 return true; | |
853 } | |
854 | |
5947
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
855 // For locked flags, report a custom error message if available. |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
856 // Otherwise, report the standard unrecognized VM option. |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
857 |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
858 Flag* locked_flag = Flag::find_flag((char*)argname, strlen(argname), true); |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
859 if (locked_flag != NULL) { |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
860 char locked_message_buf[BUFLEN]; |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
861 locked_flag->get_locked_message(locked_message_buf, BUFLEN); |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
862 if (strlen(locked_message_buf) == 0) { |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
863 jio_fprintf(defaultStream::error_stream(), |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
864 "Unrecognized VM option '%s'\n", argname); |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
865 } else { |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
866 jio_fprintf(defaultStream::error_stream(), "%s", locked_message_buf); |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
867 } |
6017 | 868 } else { |
869 jio_fprintf(defaultStream::error_stream(), | |
870 "Unrecognized VM option '%s'\n", argname); | |
5947
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
871 } |
80fe40862b02
7144328: Improper commandlines for -XX:+-UnlockCommercialFeatures require proper warning/error messages
jmelvin
parents:
5915
diff
changeset
|
872 |
3250 | 873 // allow for commandline "commenting out" options like -XX:#+Verbose |
874 return arg[0] == '#'; | |
0 | 875 } |
876 | |
877 bool Arguments::process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized) { | |
878 FILE* stream = fopen(file_name, "rb"); | |
879 if (stream == NULL) { | |
880 if (should_exist) { | |
881 jio_fprintf(defaultStream::error_stream(), | |
882 "Could not open settings file %s\n", file_name); | |
883 return false; | |
884 } else { | |
885 return true; | |
886 } | |
887 } | |
888 | |
889 char token[1024]; | |
890 int pos = 0; | |
891 | |
892 bool in_white_space = true; | |
893 bool in_comment = false; | |
894 bool in_quote = false; | |
895 char quote_c = 0; | |
896 bool result = true; | |
897 | |
898 int c = getc(stream); | |
6901 | 899 while(c != EOF && pos < (int)(sizeof(token)-1)) { |
0 | 900 if (in_white_space) { |
901 if (in_comment) { | |
902 if (c == '\n') in_comment = false; | |
903 } else { | |
904 if (c == '#') in_comment = true; | |
905 else if (!isspace(c)) { | |
906 in_white_space = false; | |
907 token[pos++] = c; | |
908 } | |
909 } | |
910 } else { | |
911 if (c == '\n' || (!in_quote && isspace(c))) { | |
912 // token ends at newline, or at unquoted whitespace | |
913 // this allows a way to include spaces in string-valued options | |
914 token[pos] = '\0'; | |
915 logOption(token); | |
916 result &= process_argument(token, ignore_unrecognized, CONFIG_FILE); | |
917 build_jvm_flags(token); | |
918 pos = 0; | |
919 in_white_space = true; | |
920 in_quote = false; | |
921 } else if (!in_quote && (c == '\'' || c == '"')) { | |
922 in_quote = true; | |
923 quote_c = c; | |
924 } else if (in_quote && (c == quote_c)) { | |
925 in_quote = false; | |
926 } else { | |
927 token[pos++] = c; | |
928 } | |
929 } | |
930 c = getc(stream); | |
931 } | |
932 if (pos > 0) { | |
933 token[pos] = '\0'; | |
934 result &= process_argument(token, ignore_unrecognized, CONFIG_FILE); | |
935 build_jvm_flags(token); | |
936 } | |
937 fclose(stream); | |
938 return result; | |
939 } | |
940 | |
941 //============================================================================================================= | |
942 // Parsing of properties (-D) | |
943 | |
944 const char* Arguments::get_property(const char* key) { | |
945 return PropertyList_get_value(system_properties(), key); | |
946 } | |
947 | |
948 bool Arguments::add_property(const char* prop) { | |
949 const char* eq = strchr(prop, '='); | |
950 char* key; | |
951 // ns must be static--its address may be stored in a SystemProperty object. | |
952 const static char ns[1] = {0}; | |
953 char* value = (char *)ns; | |
954 | |
955 size_t key_len = (eq == NULL) ? strlen(prop) : (eq - prop); | |
6197 | 956 key = AllocateHeap(key_len + 1, mtInternal); |
0 | 957 strncpy(key, prop, key_len); |
958 key[key_len] = '\0'; | |
959 | |
960 if (eq != NULL) { | |
961 size_t value_len = strlen(prop) - key_len - 1; | |
6197 | 962 value = AllocateHeap(value_len + 1, mtInternal); |
0 | 963 strncpy(value, &prop[key_len + 1], value_len + 1); |
964 } | |
965 | |
966 if (strcmp(key, "java.compiler") == 0) { | |
967 process_java_compiler_argument(value); | |
968 FreeHeap(key); | |
969 if (eq != NULL) { | |
970 FreeHeap(value); | |
971 } | |
972 return true; | |
691 | 973 } else if (strcmp(key, "sun.java.command") == 0) { |
0 | 974 _java_command = value; |
975 | |
2129
8f8dfba37802
6994753: Implement optional hook to a Java method at VM startup.
kevinw
parents:
2095
diff
changeset
|
976 // Record value in Arguments, but let it get passed to Java. |
691 | 977 } else if (strcmp(key, "sun.java.launcher.pid") == 0) { |
0 | 978 // launcher.pid property is private and is processed |
979 // in process_sun_java_launcher_properties(); | |
980 // the sun.java.launcher property is passed on to the java application | |
981 FreeHeap(key); | |
982 if (eq != NULL) { | |
983 FreeHeap(value); | |
984 } | |
985 return true; | |
691 | 986 } else if (strcmp(key, "java.vendor.url.bug") == 0) { |
0 | 987 // save it in _java_vendor_url_bug, so JVM fatal error handler can access |
988 // its value without going through the property list or making a Java call. | |
989 _java_vendor_url_bug = value; | |
691 | 990 } else if (strcmp(key, "sun.boot.library.path") == 0) { |
991 PropertyList_unique_add(&_system_properties, key, value, true); | |
992 return true; | |
0 | 993 } |
994 // Create new property and add at the end of the list | |
995 PropertyList_unique_add(&_system_properties, key, value); | |
996 return true; | |
997 } | |
998 | |
999 //=========================================================================================================== | |
1000 // Setting int/mixed/comp mode flags | |
1001 | |
1002 void Arguments::set_mode_flags(Mode mode) { | |
1003 // Set up default values for all flags. | |
1004 // If you add a flag to any of the branches below, | |
1005 // add a default value for it here. | |
1006 set_java_compiler(false); | |
1007 _mode = mode; | |
1008 | |
1009 // Ensure Agent_OnLoad has the correct initial values. | |
1010 // This may not be the final mode; mode may change later in onload phase. | |
1011 PropertyList_unique_add(&_system_properties, "java.vm.info", | |
3326
6c978a541c03
7036267: c2/arm: mark version number as experimental and disable on unsupported platforms
dholmes
parents:
3261
diff
changeset
|
1012 (char*)VM_Version::vm_info_string(), false); |
0 | 1013 |
1014 UseInterpreter = true; | |
1015 UseCompiler = true; | |
1016 UseLoopCounter = true; | |
1017 | |
2458
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1018 #ifndef ZERO |
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1019 // Turn these off for mixed and comp. Leave them on for Zero. |
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1020 if (FLAG_IS_DEFAULT(UseFastAccessorMethods)) { |
3341
e9b8ef09622a
7041582: set_mode_flags isn't called without -Xmixed specified
never
parents:
3261
diff
changeset
|
1021 UseFastAccessorMethods = (mode == _int); |
2458
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1022 } |
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1023 if (FLAG_IS_DEFAULT(UseFastEmptyMethods)) { |
3341
e9b8ef09622a
7041582: set_mode_flags isn't called without -Xmixed specified
never
parents:
3261
diff
changeset
|
1024 UseFastEmptyMethods = (mode == _int); |
2458
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1025 } |
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1026 #endif |
98c560260039
7034513: enable fast accessors and empty methods for ZERO and -Xint
never
parents:
2416
diff
changeset
|
1027 |
0 | 1028 // Default values may be platform/compiler dependent - |
1029 // use the saved values | |
1030 ClipInlining = Arguments::_ClipInlining; | |
1031 AlwaysCompileLoopMethods = Arguments::_AlwaysCompileLoopMethods; | |
1032 UseOnStackReplacement = Arguments::_UseOnStackReplacement; | |
1033 BackgroundCompilation = Arguments::_BackgroundCompilation; | |
1034 | |
1035 // Change from defaults based on mode | |
1036 switch (mode) { | |
1037 default: | |
1038 ShouldNotReachHere(); | |
1039 break; | |
1040 case _int: | |
1041 UseCompiler = false; | |
1042 UseLoopCounter = false; | |
1043 AlwaysCompileLoopMethods = false; | |
1044 UseOnStackReplacement = false; | |
1045 break; | |
1046 case _mixed: | |
1047 // same as default | |
1048 break; | |
1049 case _comp: | |
1050 UseInterpreter = false; | |
1051 BackgroundCompilation = false; | |
1052 ClipInlining = false; | |
4758
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1053 // Be much more aggressive in tiered mode with -Xcomp and exercise C2 more. |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1054 // We will first compile a level 3 version (C1 with full profiling), then do one invocation of it and |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1055 // compile a level 4 (C2) and then continue executing it. |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1056 if (TieredCompilation) { |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1057 Tier3InvokeNotifyFreqLog = 0; |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1058 Tier4InvocationThreshold = 0; |
d725f0affb1a
7121111: -server -Xcomp -XX:+TieredCompilation does not invoke C2 compiler
iveresov
parents:
4111
diff
changeset
|
1059 } |
0 | 1060 break; |
1061 } | |
1062 } | |
1063 | |
1064 // Conflict: required to use shared spaces (-Xshare:on), but | |
1065 // incompatible command line options were chosen. | |
1066 | |
1067 static void no_shared_spaces() { | |
1068 if (RequireSharedSpaces) { | |
1069 jio_fprintf(defaultStream::error_stream(), | |
1070 "Class data sharing is inconsistent with other specified options.\n"); | |
1071 vm_exit_during_initialization("Unable to use shared archive.", NULL); | |
1072 } else { | |
1073 FLAG_SET_DEFAULT(UseSharedSpaces, false); | |
1074 } | |
1075 } | |
1076 | |
1783 | 1077 void Arguments::set_tiered_flags() { |
2348
5d8f5a6dced7
7020403: Add AdvancedCompilationPolicy for tiered
iveresov
parents:
2325
diff
changeset
|
1078 // With tiered, set default policy to AdvancedThresholdPolicy, which is 3. |
1783 | 1079 if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) { |
2348
5d8f5a6dced7
7020403: Add AdvancedCompilationPolicy for tiered
iveresov
parents:
2325
diff
changeset
|
1080 FLAG_SET_DEFAULT(CompilationPolicyChoice, 3); |
1783 | 1081 } |
1082 if (CompilationPolicyChoice < 2) { | |
1083 vm_exit_during_initialization( | |
1084 "Incompatible compilation policy selected", NULL); | |
1085 } | |
1891
9de67bf4244d
6996136: VM crash in src/share/vm/runtime/virtualspace.cpp:424
iveresov
parents:
1890
diff
changeset
|
1086 // Increase the code cache size - tiered compiles a lot more. |
1783 | 1087 if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) { |
1088 FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 2); | |
1089 } | |
1090 } | |
1091 | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
1092 #if INCLUDE_ALTERNATE_GCS |
4838 | 1093 static void disable_adaptive_size_policy(const char* collector_name) { |
1094 if (UseAdaptiveSizePolicy) { | |
1095 if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { | |
1096 warning("disabling UseAdaptiveSizePolicy; it is incompatible with %s.", | |
1097 collector_name); | |
1098 } | |
1099 FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); | |
1100 } | |
1101 } | |
1102 | |
0 | 1103 // If the user has chosen ParallelGCThreads > 0, we set UseParNewGC |
1104 // if it's not explictly set or unset. If the user has chosen | |
1105 // UseParNewGC and not explicitly set ParallelGCThreads we | |
1106 // set it, unless this is a single cpu machine. | |
1107 void Arguments::set_parnew_gc_flags() { | |
1064 | 1108 assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC, |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1109 "control point invariant"); |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1110 assert(UseParNewGC, "Error"); |
0 | 1111 |
4838 | 1112 // Turn off AdaptiveSizePolicy for parnew until it is complete. |
1113 disable_adaptive_size_policy("UseParNewGC"); | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1114 |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1115 if (ParallelGCThreads == 0) { |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1116 FLAG_SET_DEFAULT(ParallelGCThreads, |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1117 Abstract_VM_Version::parallel_worker_threads()); |
1064 | 1118 if (ParallelGCThreads == 1) { |
0 | 1119 FLAG_SET_DEFAULT(UseParNewGC, false); |
1064 | 1120 FLAG_SET_DEFAULT(ParallelGCThreads, 0); |
0 | 1121 } |
1122 } | |
1064 | 1123 if (UseParNewGC) { |
695 | 1124 // By default YoungPLABSize and OldPLABSize are set to 4096 and 1024 respectively, |
0 | 1125 // these settings are default for Parallel Scavenger. For ParNew+Tenured configuration |
1126 // we set them to 1024 and 1024. | |
1127 // See CR 6362902. | |
1128 if (FLAG_IS_DEFAULT(YoungPLABSize)) { | |
1129 FLAG_SET_DEFAULT(YoungPLABSize, (intx)1024); | |
1130 } | |
1131 if (FLAG_IS_DEFAULT(OldPLABSize)) { | |
1132 FLAG_SET_DEFAULT(OldPLABSize, (intx)1024); | |
1133 } | |
1134 | |
1064 | 1135 // AlwaysTenure flag should make ParNew promote all at first collection. |
0 | 1136 // See CR 6362902. |
1137 if (AlwaysTenure) { | |
6818 | 1138 FLAG_SET_CMDLINE(uintx, MaxTenuringThreshold, 0); |
0 | 1139 } |
695 | 1140 // When using compressed oops, we use local overflow stacks, |
1141 // rather than using a global overflow list chained through | |
1142 // the klass word of the object's pre-image. | |
1143 if (UseCompressedOops && !ParGCUseLocalOverflow) { | |
1144 if (!FLAG_IS_DEFAULT(ParGCUseLocalOverflow)) { | |
1145 warning("Forcing +ParGCUseLocalOverflow: needed if using compressed references"); | |
1146 } | |
1147 FLAG_SET_DEFAULT(ParGCUseLocalOverflow, true); | |
1148 } | |
1149 assert(ParGCUseLocalOverflow || !UseCompressedOops, "Error"); | |
0 | 1150 } |
1151 } | |
1152 | |
1153 // Adjust some sizes to suit CMS and/or ParNew needs; these work well on | |
1154 // sparc/solaris for certain applications, but would gain from | |
1155 // further optimization and tuning efforts, and would almost | |
1156 // certainly gain from analysis of platform and environment. | |
1157 void Arguments::set_cms_and_parnew_gc_flags() { | |
1064 | 1158 assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1159 assert(UseConcMarkSweepGC, "CMS is expected to be on here"); |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1160 |
0 | 1161 // If we are using CMS, we prefer to UseParNewGC, |
1162 // unless explicitly forbidden. | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1163 if (FLAG_IS_DEFAULT(UseParNewGC)) { |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1164 FLAG_SET_ERGO(bool, UseParNewGC, true); |
0 | 1165 } |
1166 | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
1167 // Turn off AdaptiveSizePolicy by default for cms until it is complete. |
4838 | 1168 disable_adaptive_size_policy("UseConcMarkSweepGC"); |
0 | 1169 |
1170 // In either case, adjust ParallelGCThreads and/or UseParNewGC | |
1171 // as needed. | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1172 if (UseParNewGC) { |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1173 set_parnew_gc_flags(); |
0 | 1174 } |
1175 | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1176 // MaxHeapSize is aligned down in collectorPolicy |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1177 size_t max_heap = align_size_down(MaxHeapSize, |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1178 CardTableRS::ct_max_alignment_constraint()); |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1179 |
0 | 1180 // Now make adjustments for CMS |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1181 intx tenuring_default = (intx)6; |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1182 size_t young_gen_per_worker = CMSYoungGenPerWorker; |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1183 |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1184 // Preferred young gen size for "short" pauses: |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1185 // upper bound depends on # of threads and NewRatio. |
0 | 1186 const uintx parallel_gc_threads = |
1187 (ParallelGCThreads == 0 ? 1 : ParallelGCThreads); | |
1188 const size_t preferred_max_new_size_unaligned = | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1189 MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * parallel_gc_threads)); |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1190 size_t preferred_max_new_size = |
0 | 1191 align_size_up(preferred_max_new_size_unaligned, os::vm_page_size()); |
1192 | |
1193 // Unless explicitly requested otherwise, size young gen | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1194 // for "short" pauses ~ CMSYoungGenPerWorker*ParallelGCThreads |
886
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1195 |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1196 // If either MaxNewSize or NewRatio is set on the command line, |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1197 // assume the user is trying to set the size of the young gen. |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1198 if (FLAG_IS_DEFAULT(MaxNewSize) && FLAG_IS_DEFAULT(NewRatio)) { |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1199 |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1200 // Set MaxNewSize to our calculated preferred_max_new_size unless |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1201 // NewSize was set on the command line and it is larger than |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1202 // preferred_max_new_size. |
0 | 1203 if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1204 FLAG_SET_ERGO(uintx, MaxNewSize, MAX2(NewSize, preferred_max_new_size)); |
0 | 1205 } else { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1206 FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size); |
0 | 1207 } |
1064 | 1208 if (PrintGCDetails && Verbose) { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1209 // Too early to use gclog_or_tty |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1210 tty->print_cr("CMS ergo set MaxNewSize: " SIZE_FORMAT, MaxNewSize); |
886
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1211 } |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1212 |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1213 // Code along this path potentially sets NewSize and OldSize |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1214 |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1215 assert(max_heap >= InitialHeapSize, "Error"); |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1216 assert(max_heap >= NewSize, "Error"); |
0 | 1217 |
1064 | 1218 if (PrintGCDetails && Verbose) { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1219 // Too early to use gclog_or_tty |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1220 tty->print_cr("CMS set min_heap_size: " SIZE_FORMAT |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1221 " initial_heap_size: " SIZE_FORMAT |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1222 " max_heap: " SIZE_FORMAT, |
1064 | 1223 min_heap_size(), InitialHeapSize, max_heap); |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1224 } |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1225 size_t min_new = preferred_max_new_size; |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1226 if (FLAG_IS_CMDLINE(NewSize)) { |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1227 min_new = NewSize; |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1228 } |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1229 if (max_heap > min_new && min_heap_size() > min_new) { |
0 | 1230 // Unless explicitly requested otherwise, make young gen |
1231 // at least min_new, and at most preferred_max_new_size. | |
1232 if (FLAG_IS_DEFAULT(NewSize)) { | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1233 FLAG_SET_ERGO(uintx, NewSize, MAX2(NewSize, min_new)); |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1234 FLAG_SET_ERGO(uintx, NewSize, MIN2(preferred_max_new_size, NewSize)); |
1064 | 1235 if (PrintGCDetails && Verbose) { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1236 // Too early to use gclog_or_tty |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1237 tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize); |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1238 } |
0 | 1239 } |
1240 // Unless explicitly requested otherwise, size old gen | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1241 // so it's NewRatio x of NewSize. |
0 | 1242 if (FLAG_IS_DEFAULT(OldSize)) { |
1243 if (max_heap > NewSize) { | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1244 FLAG_SET_ERGO(uintx, OldSize, MIN2(NewRatio*NewSize, max_heap - NewSize)); |
1064 | 1245 if (PrintGCDetails && Verbose) { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1246 // Too early to use gclog_or_tty |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
1247 tty->print_cr("CMS ergo set OldSize: " SIZE_FORMAT, OldSize); |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1248 } |
0 | 1249 } |
1250 } | |
1251 } | |
1252 } | |
1253 // Unless explicitly requested otherwise, definitely | |
1254 // promote all objects surviving "tenuring_default" scavenges. | |
1255 if (FLAG_IS_DEFAULT(MaxTenuringThreshold) && | |
1256 FLAG_IS_DEFAULT(SurvivorRatio)) { | |
6818 | 1257 FLAG_SET_ERGO(uintx, MaxTenuringThreshold, tenuring_default); |
0 | 1258 } |
1259 // If we decided above (or user explicitly requested) | |
1260 // `promote all' (via MaxTenuringThreshold := 0), | |
1261 // prefer minuscule survivor spaces so as not to waste | |
1262 // space for (non-existent) survivors | |
1263 if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) { | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1264 FLAG_SET_ERGO(intx, SurvivorRatio, MAX2((intx)1024, SurvivorRatio)); |
0 | 1265 } |
1266 // If OldPLABSize is set and CMSParPromoteBlocksToClaim is not, | |
1267 // set CMSParPromoteBlocksToClaim equal to OldPLABSize. | |
1268 // This is done in order to make ParNew+CMS configuration to work | |
1269 // with YoungPLABSize and OldPLABSize options. | |
1270 // See CR 6362902. | |
1271 if (!FLAG_IS_DEFAULT(OldPLABSize)) { | |
1272 if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1273 // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1274 // is. In this situtation let CMSParPromoteBlocksToClaim follow |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1275 // the value (either from the command line or ergonomics) of |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1276 // OldPLABSize. Following OldPLABSize is an ergonomics decision. |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1277 FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize); |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1278 } else { |
0 | 1279 // OldPLABSize and CMSParPromoteBlocksToClaim are both set. |
1280 // CMSParPromoteBlocksToClaim is a collector-specific flag, so | |
1281 // we'll let it to take precedence. | |
1282 jio_fprintf(defaultStream::error_stream(), | |
886
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1283 "Both OldPLABSize and CMSParPromoteBlocksToClaim" |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1284 " options are specified for the CMS collector." |
061cd4d965fc
6862534: -XX:NewRatio completely ignored when combined with -XX:+UseConcMarkSweepG
jmasa
parents:
845
diff
changeset
|
1285 " CMSParPromoteBlocksToClaim will take precedence.\n"); |
0 | 1286 } |
1287 } | |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1288 if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) { |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1289 // OldPLAB sizing manually turned off: Use a larger default setting, |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1290 // unless it was manually specified. This is because a too-low value |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1291 // will slow down scavenges. |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1292 if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1293 FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, 50); // default value before 6631166 |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1294 } |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1295 } |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1296 // Overwrite OldPLABSize which is the variable we will internally use everywhere. |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1297 FLAG_SET_ERGO(uintx, OldPLABSize, CMSParPromoteBlocksToClaim); |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1298 // If either of the static initialization defaults have changed, note this |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1299 // modification. |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1300 if (!FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim) || !FLAG_IS_DEFAULT(OldPLABWeight)) { |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1301 CFLS_LAB::modify_initialization(OldPLABSize, OldPLABWeight); |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
1302 } |
1284 | 1303 if (PrintGCDetails && Verbose) { |
1304 tty->print_cr("MarkStackSize: %uk MarkStackSizeMax: %uk", | |
1305 MarkStackSize / K, MarkStackSizeMax / K); | |
1306 tty->print_cr("ConcGCThreads: %u", ConcGCThreads); | |
1307 } | |
0 | 1308 } |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
1309 #endif // INCLUDE_ALTERNATE_GCS |
0 | 1310 |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1311 void set_object_alignment() { |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1312 // Object alignment. |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1313 assert(is_power_of_2(ObjectAlignmentInBytes), "ObjectAlignmentInBytes must be power of 2"); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1314 MinObjAlignmentInBytes = ObjectAlignmentInBytes; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1315 assert(MinObjAlignmentInBytes >= HeapWordsPerLong * HeapWordSize, "ObjectAlignmentInBytes value is too small"); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1316 MinObjAlignment = MinObjAlignmentInBytes / HeapWordSize; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1317 assert(MinObjAlignmentInBytes == MinObjAlignment * HeapWordSize, "ObjectAlignmentInBytes value is incorrect"); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1318 MinObjAlignmentInBytesMask = MinObjAlignmentInBytes - 1; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1319 |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1320 LogMinObjAlignmentInBytes = exact_log2(ObjectAlignmentInBytes); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1321 LogMinObjAlignment = LogMinObjAlignmentInBytes - LogHeapWordSize; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1322 |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1323 // Oop encoding heap max |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1324 OopEncodingHeapMax = (uint64_t(max_juint) + 1) << LogMinObjAlignmentInBytes; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1325 |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
1326 #if INCLUDE_ALTERNATE_GCS |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1327 // Set CMS global values |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1328 CompactibleFreeListSpace::set_cms_values(); |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
1329 #endif // INCLUDE_ALTERNATE_GCS |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1330 } |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1331 |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1332 bool verify_object_alignment() { |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1333 // Object alignment. |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1334 if (!is_power_of_2(ObjectAlignmentInBytes)) { |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1335 jio_fprintf(defaultStream::error_stream(), |
1829
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1336 "error: ObjectAlignmentInBytes=%d must be power of 2\n", |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1337 (int)ObjectAlignmentInBytes); |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1338 return false; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1339 } |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1340 if ((int)ObjectAlignmentInBytes < BytesPerLong) { |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1341 jio_fprintf(defaultStream::error_stream(), |
1829
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1342 "error: ObjectAlignmentInBytes=%d must be greater or equal %d\n", |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1343 (int)ObjectAlignmentInBytes, BytesPerLong); |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1344 return false; |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1345 } |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1346 // It does not make sense to have big object alignment |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1347 // since a space lost due to alignment will be greater |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1348 // then a saved space from compressed oops. |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1349 if ((int)ObjectAlignmentInBytes > 256) { |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1350 jio_fprintf(defaultStream::error_stream(), |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1351 "error: ObjectAlignmentInBytes=%d must not be greater then 256\n", |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1352 (int)ObjectAlignmentInBytes); |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1353 return false; |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1354 } |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1355 // In case page size is very small. |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1356 if ((int)ObjectAlignmentInBytes >= os::vm_page_size()) { |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1357 jio_fprintf(defaultStream::error_stream(), |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1358 "error: ObjectAlignmentInBytes=%d must be less then page size %d\n", |
fe08403130db
6979458: VM crashes when -XX:ObjectAlignmentInBytes is too big
kvn
parents:
1796
diff
changeset
|
1359 (int)ObjectAlignmentInBytes, os::vm_page_size()); |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1360 return false; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1361 } |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1362 return true; |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1363 } |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1364 |
135
b7268662a986
6689523: max heap calculation for compressed oops is off by MaxPermSize
coleenp
parents:
113
diff
changeset
|
1365 inline uintx max_heap_for_compressed_oops() { |
1963 | 1366 // Avoid sign flip. |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1367 if (OopEncodingHeapMax < ClassMetaspaceSize + os::vm_page_size()) { |
1963 | 1368 return 0; |
1369 } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1370 LP64_ONLY(return OopEncodingHeapMax - ClassMetaspaceSize - os::vm_page_size()); |
1064 | 1371 NOT_LP64(ShouldNotReachHere(); return 0); |
135
b7268662a986
6689523: max heap calculation for compressed oops is off by MaxPermSize
coleenp
parents:
113
diff
changeset
|
1372 } |
b7268662a986
6689523: max heap calculation for compressed oops is off by MaxPermSize
coleenp
parents:
113
diff
changeset
|
1373 |
0 | 1374 bool Arguments::should_auto_select_low_pause_collector() { |
1375 if (UseAutoGCSelectPolicy && | |
1376 !FLAG_IS_DEFAULT(MaxGCPauseMillis) && | |
1377 (MaxGCPauseMillis <= AutoGCSelectPauseMillis)) { | |
1378 if (PrintGCDetails) { | |
1379 // Cannot use gclog_or_tty yet. | |
1380 tty->print_cr("Automatic selection of the low pause collector" | |
1381 " based on pause goal of %d (ms)", MaxGCPauseMillis); | |
1382 } | |
1383 return true; | |
1384 } | |
1385 return false; | |
1386 } | |
1387 | |
1388 void Arguments::set_ergonomics_flags() { | |
1389 | |
4946 | 1390 if (os::is_server_class_machine()) { |
0 | 1391 // If no other collector is requested explicitly, |
1392 // let the VM select the collector based on | |
1393 // machine class and automatic selection policy. | |
1394 if (!UseSerialGC && | |
1395 !UseConcMarkSweepGC && | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1396 !UseG1GC && |
0 | 1397 !UseParNewGC && |
1398 FLAG_IS_DEFAULT(UseParallelGC)) { | |
1399 if (should_auto_select_low_pause_collector()) { | |
1400 FLAG_SET_ERGO(bool, UseConcMarkSweepGC, true); | |
1401 } else { | |
1402 FLAG_SET_ERGO(bool, UseParallelGC, true); | |
1403 } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1404 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1405 // Shared spaces work fine with other GCs but causes bytecode rewriting |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1406 // to be disabled, which hurts interpreter performance and decreases |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1407 // server performance. On server class machines, keep the default |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1408 // off unless it is asked for. Future work: either add bytecode rewriting |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1409 // at link time, or rewrite bytecodes in non-shared methods. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1410 if (!DumpSharedSpaces && !RequireSharedSpaces) { |
0 | 1411 no_shared_spaces(); |
1412 } | |
1413 } | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1414 |
1010 | 1415 #ifndef ZERO |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1416 #ifdef _LP64 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1417 // Check that UseCompressedOops can be set with the max heap size allocated |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1418 // by ergonomics. |
187 | 1419 if (MaxHeapSize <= max_heap_for_compressed_oops()) { |
1783 | 1420 #if !defined(COMPILER1) || defined(TIERED) |
2228 | 1421 if (FLAG_IS_DEFAULT(UseCompressedOops)) { |
932 | 1422 FLAG_SET_ERGO(bool, UseCompressedOops, true); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1423 } |
1060 | 1424 #endif |
325
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1425 #ifdef _WIN64 |
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1426 if (UseLargePages && UseCompressedOops) { |
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1427 // Cannot allocate guard pages for implicit checks in indexed addressing |
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1428 // mode, when large pages are specified on windows. |
642
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
570
diff
changeset
|
1429 // This flag could be switched ON if narrow oop base address is set to 0, |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
570
diff
changeset
|
1430 // see code in Universe::initialize_heap(). |
660978a2a31a
6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents:
570
diff
changeset
|
1431 Universe::set_narrow_oop_use_implicit_null_checks(false); |
325
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1432 } |
93befa083681
6741004: UseLargePages + UseCompressedOops breaks implicit null checking guard page
coleenp
parents:
276
diff
changeset
|
1433 #endif // _WIN64 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1434 } else { |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1435 if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) { |
344 | 1436 warning("Max heap size too large for Compressed Oops"); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1437 FLAG_SET_DEFAULT(UseCompressedOops, false); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1438 FLAG_SET_DEFAULT(UseCompressedKlassPointers, false); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1439 } |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1440 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1441 // UseCompressedOops must be on for UseCompressedKlassPointers to be on. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1442 if (!UseCompressedOops) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1443 if (UseCompressedKlassPointers) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1444 warning("UseCompressedKlassPointers requires UseCompressedOops"); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1445 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1446 FLAG_SET_DEFAULT(UseCompressedKlassPointers, false); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1447 } else { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1448 // Turn on UseCompressedKlassPointers too |
6848
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6818
diff
changeset
|
1449 if (FLAG_IS_DEFAULT(UseCompressedKlassPointers)) { |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6818
diff
changeset
|
1450 FLAG_SET_ERGO(bool, UseCompressedKlassPointers, true); |
8e47bac5643a
7054512: Compress class pointers after perm gen removal
roland
parents:
6818
diff
changeset
|
1451 } |
6736
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1452 // Set the ClassMetaspaceSize to something that will not need to be |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1453 // expanded, since it cannot be expanded. |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1454 if (UseCompressedKlassPointers && FLAG_IS_DEFAULT(ClassMetaspaceSize)) { |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1455 // 100,000 classes seems like a good size, so 100M assumes around 1K |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1456 // per klass. The vtable and oopMap is embedded so we don't have a fixed |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1457 // size per klass. Eventually, this will be parameterized because it |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1458 // would also be useful to determine the optimal size of the |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1459 // systemDictionary. |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1460 FLAG_SET_ERGO(uintx, ClassMetaspaceSize, 100*M); |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
1461 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
1462 } |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1463 // Also checks that certain machines are slower with compressed oops |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1464 // in vm_version initialization code. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
76
diff
changeset
|
1465 #endif // _LP64 |
1010 | 1466 #endif // !ZERO |
0 | 1467 } |
1468 | |
1469 void Arguments::set_parallel_gc_flags() { | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1470 assert(UseParallelGC || UseParallelOldGC, "Error"); |
4879 | 1471 // Enable ParallelOld unless it was explicitly disabled (cmd line or rc file). |
1472 if (FLAG_IS_DEFAULT(UseParallelOldGC)) { | |
1473 FLAG_SET_DEFAULT(UseParallelOldGC, true); | |
0 | 1474 } |
4879 | 1475 FLAG_SET_DEFAULT(UseParallelGC, true); |
0 | 1476 |
1477 // If no heap maximum was requested explicitly, use some reasonable fraction | |
1478 // of the physical memory, up to a maximum of 1GB. | |
1479 if (UseParallelGC) { | |
4095
bca17e38de00
6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents:
4039
diff
changeset
|
1480 FLAG_SET_DEFAULT(ParallelGCThreads, |
bca17e38de00
6593758: RFE: Enhance GC ergonomics to dynamically choose ParallelGCThreads
jmasa
parents:
4039
diff
changeset
|
1481 Abstract_VM_Version::parallel_worker_threads()); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1482 |
0 | 1483 // If InitialSurvivorRatio or MinSurvivorRatio were not specified, but the |
1484 // SurvivorRatio has been set, reset their default values to SurvivorRatio + | |
1485 // 2. By doing this we make SurvivorRatio also work for Parallel Scavenger. | |
1486 // See CR 6362902 for details. | |
1487 if (!FLAG_IS_DEFAULT(SurvivorRatio)) { | |
1488 if (FLAG_IS_DEFAULT(InitialSurvivorRatio)) { | |
1489 FLAG_SET_DEFAULT(InitialSurvivorRatio, SurvivorRatio + 2); | |
1490 } | |
1491 if (FLAG_IS_DEFAULT(MinSurvivorRatio)) { | |
1492 FLAG_SET_DEFAULT(MinSurvivorRatio, SurvivorRatio + 2); | |
1493 } | |
1494 } | |
1495 | |
1496 if (UseParallelOldGC) { | |
1497 // Par compact uses lower default values since they are treated as | |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1498 // minimums. These are different defaults because of the different |
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1499 // interpretation and are not ergonomically set. |
0 | 1500 if (FLAG_IS_DEFAULT(MarkSweepDeadRatio)) { |
13
183f41cf8bfe
6557851: CMS: ergonomics defaults are not set with FLAG_SET_ERGO
jmasa
parents:
10
diff
changeset
|
1501 FLAG_SET_DEFAULT(MarkSweepDeadRatio, 1); |
0 | 1502 } |
1503 } | |
1504 } | |
3322
567c87d484a0
7041501: NUMA: Expand the old gen more aggressively
iveresov
parents:
3315
diff
changeset
|
1505 if (UseNUMA) { |
567c87d484a0
7041501: NUMA: Expand the old gen more aggressively
iveresov
parents:
3315
diff
changeset
|
1506 if (FLAG_IS_DEFAULT(MinHeapDeltaBytes)) { |
567c87d484a0
7041501: NUMA: Expand the old gen more aggressively
iveresov
parents:
3315
diff
changeset
|
1507 FLAG_SET_DEFAULT(MinHeapDeltaBytes, 64*M); |
567c87d484a0
7041501: NUMA: Expand the old gen more aggressively
iveresov
parents:
3315
diff
changeset
|
1508 } |
3885 | 1509 // For those collectors or operating systems (eg, Windows) that do |
1510 // not support full UseNUMA, we will map to UseNUMAInterleaving for now | |
1511 UseNUMAInterleaving = true; | |
3322
567c87d484a0
7041501: NUMA: Expand the old gen more aggressively
iveresov
parents:
3315
diff
changeset
|
1512 } |
0 | 1513 } |
1514 | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1515 void Arguments::set_g1_gc_flags() { |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1516 assert(UseG1GC, "Error"); |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1517 #ifdef COMPILER1 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1518 FastTLABRefill = false; |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1519 #endif |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1520 FLAG_SET_DEFAULT(ParallelGCThreads, |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1521 Abstract_VM_Version::parallel_worker_threads()); |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1522 if (ParallelGCThreads == 0) { |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1523 FLAG_SET_DEFAULT(ParallelGCThreads, |
751 | 1524 Abstract_VM_Version::parallel_worker_threads()); |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1525 } |
751 | 1526 |
1284 | 1527 if (FLAG_IS_DEFAULT(MarkStackSize)) { |
1311
2a1472c30599
4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents:
1284
diff
changeset
|
1528 FLAG_SET_DEFAULT(MarkStackSize, 128 * TASKQUEUE_SIZE); |
1284 | 1529 } |
1530 if (PrintGCDetails && Verbose) { | |
1531 tty->print_cr("MarkStackSize: %uk MarkStackSizeMax: %uk", | |
1532 MarkStackSize / K, MarkStackSizeMax / K); | |
1533 tty->print_cr("ConcGCThreads: %u", ConcGCThreads); | |
1534 } | |
1356 | 1535 |
1536 if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) { | |
1537 // In G1, we want the default GC overhead goal to be higher than | |
1538 // say in PS. So we set it here to 10%. Otherwise the heap might | |
1539 // be expanded more aggressively than we would like it to. In | |
1540 // fact, even 10% seems to not be high enough in some cases | |
1541 // (especially small GC stress tests that the main thing they do | |
1542 // is allocation). We might consider increase it further. | |
1543 FLAG_SET_DEFAULT(GCTimeRatio, 9); | |
1544 } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1545 } |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1546 |
1064 | 1547 void Arguments::set_heap_size() { |
1548 if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) { | |
1549 // Deprecated flag | |
1550 FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction); | |
1551 } | |
1552 | |
1553 const julong phys_mem = | |
1554 FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM) | |
1555 : (julong)MaxRAM; | |
1556 | |
1557 // If the maximum heap size has not been set with -Xmx, | |
1558 // then set it as fraction of the size of physical memory, | |
1559 // respecting the maximum and minimum sizes of the heap. | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1560 if (FLAG_IS_DEFAULT(MaxHeapSize)) { |
1064 | 1561 julong reasonable_max = phys_mem / MaxRAMFraction; |
1562 | |
1563 if (phys_mem <= MaxHeapSize * MinRAMFraction) { | |
1564 // Small physical memory, so use a minimum fraction of it for the heap | |
1565 reasonable_max = phys_mem / MinRAMFraction; | |
1566 } else { | |
1567 // Not-small physical memory, so require a heap at least | |
1568 // as large as MaxHeapSize | |
1569 reasonable_max = MAX2(reasonable_max, (julong)MaxHeapSize); | |
1570 } | |
1571 if (!FLAG_IS_DEFAULT(ErgoHeapSizeLimit) && ErgoHeapSizeLimit != 0) { | |
1572 // Limit the heap size to ErgoHeapSizeLimit | |
1573 reasonable_max = MIN2(reasonable_max, (julong)ErgoHeapSizeLimit); | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1574 } |
1064 | 1575 if (UseCompressedOops) { |
1576 // Limit the heap size to the maximum possible when using compressed oops | |
1963 | 1577 julong max_coop_heap = (julong)max_heap_for_compressed_oops(); |
1578 if (HeapBaseMinAddress + MaxHeapSize < max_coop_heap) { | |
1579 // Heap should be above HeapBaseMinAddress to get zero based compressed oops | |
1580 // but it should be not less than default MaxHeapSize. | |
1581 max_coop_heap -= HeapBaseMinAddress; | |
1582 } | |
1583 reasonable_max = MIN2(reasonable_max, max_coop_heap); | |
1064 | 1584 } |
1585 reasonable_max = os::allocatable_physical_memory(reasonable_max); | |
1586 | |
1587 if (!FLAG_IS_DEFAULT(InitialHeapSize)) { | |
1588 // An initial heap size was specified on the command line, | |
1589 // so be sure that the maximum size is consistent. Done | |
1590 // after call to allocatable_physical_memory because that | |
1591 // method might reduce the allocation size. | |
1592 reasonable_max = MAX2(reasonable_max, (julong)InitialHeapSize); | |
1593 } | |
1594 | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1595 if (PrintGCDetails && Verbose) { |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1596 // Cannot use gclog_or_tty yet. |
1064 | 1597 tty->print_cr(" Maximum heap size " SIZE_FORMAT, reasonable_max); |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1598 } |
1064 | 1599 FLAG_SET_ERGO(uintx, MaxHeapSize, (uintx)reasonable_max); |
1600 } | |
1601 | |
1602 // If the initial_heap_size has not been set with InitialHeapSize | |
1603 // or -Xms, then set it as fraction of the size of physical memory, | |
1604 // respecting the maximum and minimum sizes of the heap. | |
1605 if (FLAG_IS_DEFAULT(InitialHeapSize)) { | |
1074
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1606 julong reasonable_minimum = (julong)(OldSize + NewSize); |
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1607 |
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1608 reasonable_minimum = MIN2(reasonable_minimum, (julong)MaxHeapSize); |
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1609 |
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1610 reasonable_minimum = os::allocatable_physical_memory(reasonable_minimum); |
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1611 |
1064 | 1612 julong reasonable_initial = phys_mem / InitialRAMFraction; |
1613 | |
1074
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1614 reasonable_initial = MAX2(reasonable_initial, reasonable_minimum); |
1064 | 1615 reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize); |
1616 | |
1617 reasonable_initial = os::allocatable_physical_memory(reasonable_initial); | |
1618 | |
1619 if (PrintGCDetails && Verbose) { | |
1620 // Cannot use gclog_or_tty yet. | |
1621 tty->print_cr(" Initial heap size " SIZE_FORMAT, (uintx)reasonable_initial); | |
1074
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1622 tty->print_cr(" Minimum heap size " SIZE_FORMAT, (uintx)reasonable_minimum); |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1623 } |
1064 | 1624 FLAG_SET_ERGO(uintx, InitialHeapSize, (uintx)reasonable_initial); |
1074
84cb6f20afb3
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
phh
parents:
1069
diff
changeset
|
1625 set_min_heap_size((uintx)reasonable_minimum); |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1626 } |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1627 } |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1628 |
0 | 1629 // This must be called after ergonomics because we want bytecode rewriting |
1630 // if the server compiler is used, or if UseSharedSpaces is disabled. | |
1631 void Arguments::set_bytecode_flags() { | |
1632 // Better not attempt to store into a read-only space. | |
1633 if (UseSharedSpaces) { | |
1634 FLAG_SET_DEFAULT(RewriteBytecodes, false); | |
1635 FLAG_SET_DEFAULT(RewriteFrequentPairs, false); | |
1636 } | |
1637 | |
1638 if (!RewriteBytecodes) { | |
1639 FLAG_SET_DEFAULT(RewriteFrequentPairs, false); | |
1640 } | |
1641 } | |
1642 | |
1643 // Aggressive optimization flags -XX:+AggressiveOpts | |
1644 void Arguments::set_aggressive_opts_flags() { | |
17
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1645 #ifdef COMPILER2 |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1646 if (AggressiveOpts || !FLAG_IS_DEFAULT(AutoBoxCacheMax)) { |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1647 if (FLAG_IS_DEFAULT(EliminateAutoBox)) { |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1648 FLAG_SET_DEFAULT(EliminateAutoBox, true); |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1649 } |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1650 if (FLAG_IS_DEFAULT(AutoBoxCacheMax)) { |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1651 FLAG_SET_DEFAULT(AutoBoxCacheMax, 20000); |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1652 } |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1653 |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1654 // Feed the cache size setting into the JDK |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1655 char buffer[1024]; |
513
2328d1d3f8cf
6781583: Hotspot build fails on linux 64 bit platform with gcc 4.3.2
xlu
parents:
489
diff
changeset
|
1656 sprintf(buffer, "java.lang.Integer.IntegerCache.high=" INTX_FORMAT, AutoBoxCacheMax); |
17
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1657 add_property(buffer); |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1658 } |
416
b6cfd754403d
6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents:
363
diff
changeset
|
1659 if (AggressiveOpts && FLAG_IS_DEFAULT(BiasedLockingStartupDelay)) { |
b6cfd754403d
6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents:
363
diff
changeset
|
1660 FLAG_SET_DEFAULT(BiasedLockingStartupDelay, 500); |
b6cfd754403d
6649622: HotSpot Biased locking needs tuning on latest CPUs
never
parents:
363
diff
changeset
|
1661 } |
17
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1662 #endif |
ff5961f4c095
6395208: Elide autoboxing for calls to HashMap.get(int) and HashMap.get(long)
never
parents:
0
diff
changeset
|
1663 |
0 | 1664 if (AggressiveOpts) { |
61 | 1665 // Sample flag setting code |
1666 // if (FLAG_IS_DEFAULT(EliminateZeroing)) { | |
1667 // FLAG_SET_DEFAULT(EliminateZeroing, true); | |
1668 // } | |
0 | 1669 } |
1670 } | |
1671 | |
1672 //=========================================================================================================== | |
1673 // Parsing of java.compiler property | |
1674 | |
1675 void Arguments::process_java_compiler_argument(char* arg) { | |
1676 // For backwards compatibility, Djava.compiler=NONE or "" | |
1677 // causes us to switch to -Xint mode UNLESS -Xdebug | |
1678 // is also specified. | |
1679 if (strlen(arg) == 0 || strcasecmp(arg, "NONE") == 0) { | |
1680 set_java_compiler(true); // "-Djava.compiler[=...]" most recently seen. | |
1681 } | |
1682 } | |
1683 | |
1684 void Arguments::process_java_launcher_argument(const char* launcher, void* extra_info) { | |
1685 _sun_java_launcher = strdup(launcher); | |
2302
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1686 if (strcmp("gamma", _sun_java_launcher) == 0) { |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1687 _created_by_gamma_launcher = true; |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1688 } |
0 | 1689 } |
1690 | |
1691 bool Arguments::created_by_java_launcher() { | |
1692 assert(_sun_java_launcher != NULL, "property must have value"); | |
1693 return strcmp(DEFAULT_JAVA_LAUNCHER, _sun_java_launcher) != 0; | |
1694 } | |
1695 | |
2302
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1696 bool Arguments::created_by_gamma_launcher() { |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1697 return _created_by_gamma_launcher; |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1698 } |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
1699 |
0 | 1700 //=========================================================================================================== |
1701 // Parsing of main arguments | |
1702 | |
1244
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1703 bool Arguments::verify_interval(uintx val, uintx min, |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1704 uintx max, const char* name) { |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1705 // Returns true iff value is in the inclusive interval [min..max] |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1706 // false, otherwise. |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1707 if (val >= min && val <= max) { |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1708 return true; |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1709 } |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1710 jio_fprintf(defaultStream::error_stream(), |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1711 "%s of " UINTX_FORMAT " is invalid; must be between " UINTX_FORMAT |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1712 " and " UINTX_FORMAT "\n", |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1713 name, val, min, max); |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1714 return false; |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1715 } |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1716 |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1717 bool Arguments::verify_min_value(intx val, intx min, const char* name) { |
2366
1fb790245268
6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents:
2362
diff
changeset
|
1718 // Returns true if given value is at least specified min threshold |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1719 // false, otherwise. |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1720 if (val >= min ) { |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1721 return true; |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1722 } |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1723 jio_fprintf(defaultStream::error_stream(), |
2366
1fb790245268
6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents:
2362
diff
changeset
|
1724 "%s of " INTX_FORMAT " is invalid; must be at least " INTX_FORMAT "\n", |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1725 name, val, min); |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1726 return false; |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1727 } |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1728 |
0 | 1729 bool Arguments::verify_percentage(uintx value, const char* name) { |
1730 if (value <= 100) { | |
1731 return true; | |
1732 } | |
1733 jio_fprintf(defaultStream::error_stream(), | |
1734 "%s of " UINTX_FORMAT " is invalid; must be between 0 and 100\n", | |
1735 name, value); | |
1736 return false; | |
1737 } | |
1738 | |
1064 | 1739 static void force_serial_gc() { |
0 | 1740 FLAG_SET_DEFAULT(UseSerialGC, true); |
1741 FLAG_SET_DEFAULT(UseParNewGC, false); | |
1742 FLAG_SET_DEFAULT(UseConcMarkSweepGC, false); | |
945
68ef3fdcdb76
6872136: CMS: confusing message may be printed when a collector is switched off implicitly
ysr
parents:
932
diff
changeset
|
1743 FLAG_SET_DEFAULT(CMSIncrementalMode, false); // special CMS suboption |
0 | 1744 FLAG_SET_DEFAULT(UseParallelGC, false); |
1745 FLAG_SET_DEFAULT(UseParallelOldGC, false); | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1746 FLAG_SET_DEFAULT(UseG1GC, false); |
0 | 1747 } |
1748 | |
1749 static bool verify_serial_gc_flags() { | |
1750 return (UseSerialGC && | |
945
68ef3fdcdb76
6872136: CMS: confusing message may be printed when a collector is switched off implicitly
ysr
parents:
932
diff
changeset
|
1751 !(UseParNewGC || (UseConcMarkSweepGC || CMSIncrementalMode) || UseG1GC || |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
1752 UseParallelGC || UseParallelOldGC)); |
0 | 1753 } |
1754 | |
3767
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1755 // check if do gclog rotation |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1756 // +UseGCLogFileRotation is a must, |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1757 // no gc log rotation when log file not supplied or |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1758 // NumberOfGCLogFiles is 0, or GCLogFileSize is 0 |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1759 void check_gclog_consistency() { |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1760 if (UseGCLogFileRotation) { |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1761 if ((Arguments::gc_log_filename() == NULL) || |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1762 (NumberOfGCLogFiles == 0) || |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1763 (GCLogFileSize == 0)) { |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1764 jio_fprintf(defaultStream::output_stream(), |
3769
ef2d1b8f2dd4
7051430: CMS: ongoing CMS cycle should terminate abruptly to allow prompt JVM termination at exit
ysr
parents:
3767
diff
changeset
|
1765 "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>\n" |
3767
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1766 "where num_of_file > 0 and num_of_size > 0\n" |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1767 "GC log rotation is turned off\n"); |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1768 UseGCLogFileRotation = false; |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1769 } |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1770 } |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1771 |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1772 if (UseGCLogFileRotation && GCLogFileSize < 8*K) { |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1773 FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K); |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1774 jio_fprintf(defaultStream::output_stream(), |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1775 "GCLogFileSize changed to minimum 8K\n"); |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1776 } |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1777 } |
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1778 |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1779 // Check consistency of GC selection |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1780 bool Arguments::check_gc_consistency() { |
3767
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
1781 check_gclog_consistency(); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1782 bool status = true; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1783 // Ensure that the user has not selected conflicting sets |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1784 // of collectors. [Note: this check is merely a user convenience; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1785 // collectors over-ride each other so that only a non-conflicting |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1786 // set is selected; however what the user gets is not what they |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1787 // may have expected from the combination they asked for. It's |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1788 // better to reduce user confusion by not allowing them to |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1789 // select conflicting combinations. |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1790 uint i = 0; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1791 if (UseSerialGC) i++; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1792 if (UseConcMarkSweepGC || UseParNewGC) i++; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1793 if (UseParallelGC || UseParallelOldGC) i++; |
845
df6caf649ff7
6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents:
751
diff
changeset
|
1794 if (UseG1GC) i++; |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1795 if (i > 1) { |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1796 jio_fprintf(defaultStream::error_stream(), |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1797 "Conflicting collector combinations in option list; " |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1798 "please refer to the release notes for the combinations " |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1799 "allowed\n"); |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1800 status = false; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1801 } |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1802 |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1803 return status; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1804 } |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1805 |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1806 // Check stack pages settings |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1807 bool Arguments::check_stack_pages() |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1808 { |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1809 bool status = true; |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1810 status = status && verify_min_value(StackYellowPages, 1, "StackYellowPages"); |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1811 status = status && verify_min_value(StackRedPages, 1, "StackRedPages"); |
1867
b6aedd1acdc0
6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong
coleenp
parents:
1864
diff
changeset
|
1812 // greater stack shadow pages can't generate instruction to bang stack |
b6aedd1acdc0
6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong
coleenp
parents:
1864
diff
changeset
|
1813 status = status && verify_interval(StackShadowPages, 1, 50, "StackShadowPages"); |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1814 return status; |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1815 } |
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1816 |
0 | 1817 // Check the consistency of vm_init_args |
1818 bool Arguments::check_vm_args_consistency() { | |
1819 // Method for adding checks for flag consistency. | |
1820 // The intent is to warn the user of all possible conflicts, | |
1821 // before returning an error. | |
1822 // Note: Needs platform-dependent factoring. | |
1823 bool status = true; | |
1824 | |
1825 #if ( (defined(COMPILER2) && defined(SPARC))) | |
1826 // NOTE: The call to VM_Version_init depends on the fact that VM_Version_init | |
1827 // on sparc doesn't require generation of a stub as is the case on, e.g., | |
1828 // x86. Normally, VM_Version_init must be called from init_globals in | |
1829 // init.cpp, which is called by the initial java thread *after* arguments | |
1830 // have been parsed. VM_Version_init gets called twice on sparc. | |
1831 extern void VM_Version_init(); | |
1832 VM_Version_init(); | |
1833 if (!VM_Version::has_v9()) { | |
1834 jio_fprintf(defaultStream::error_stream(), | |
1835 "V8 Machine detected, Server requires V9\n"); | |
1836 status = false; | |
1837 } | |
1838 #endif /* COMPILER2 && SPARC */ | |
1839 | |
1840 // Allow both -XX:-UseStackBanging and -XX:-UseBoundThreads in non-product | |
1841 // builds so the cost of stack banging can be measured. | |
1842 #if (defined(PRODUCT) && defined(SOLARIS)) | |
1843 if (!UseBoundThreads && !UseStackBanging) { | |
1844 jio_fprintf(defaultStream::error_stream(), | |
1845 "-UseStackBanging conflicts with -UseBoundThreads\n"); | |
1846 | |
1847 status = false; | |
1848 } | |
1849 #endif | |
1850 | |
1851 if (TLABRefillWasteFraction == 0) { | |
1852 jio_fprintf(defaultStream::error_stream(), | |
1853 "TLABRefillWasteFraction should be a denominator, " | |
1854 "not " SIZE_FORMAT "\n", | |
1855 TLABRefillWasteFraction); | |
1856 status = false; | |
1857 } | |
1858 | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1859 status = status && verify_percentage(AdaptiveSizePolicyWeight, |
0 | 1860 "AdaptiveSizePolicyWeight"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1861 status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance"); |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1862 status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio"); |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1863 status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio"); |
0 | 1864 |
1865 if (MinHeapFreeRatio > MaxHeapFreeRatio) { | |
1866 jio_fprintf(defaultStream::error_stream(), | |
1867 "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or " | |
1868 "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n", | |
1869 MinHeapFreeRatio, MaxHeapFreeRatio); | |
1870 status = false; | |
1871 } | |
1872 // Keeping the heap 100% free is hard ;-) so limit it to 99%. | |
1873 MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99); | |
1874 | |
1875 if (FullGCALot && FLAG_IS_DEFAULT(MarkSweepAlwaysCompactCount)) { | |
1876 MarkSweepAlwaysCompactCount = 1; // Move objects every gc. | |
1877 } | |
1878 | |
483
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1879 if (UseParallelOldGC && ParallelOldGCSplitALot) { |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1880 // Settings to encourage splitting. |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1881 if (!FLAG_IS_CMDLINE(NewRatio)) { |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1882 FLAG_SET_CMDLINE(intx, NewRatio, 2); |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1883 } |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1884 if (!FLAG_IS_CMDLINE(ScavengeBeforeFullGC)) { |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1885 FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1886 } |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1887 } |
0f773163217d
6765954: par compact - stress mode for splitting young gen spaces
jcoomes
parents:
449
diff
changeset
|
1888 |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1889 status = status && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit"); |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1890 status = status && verify_percentage(GCTimeLimit, "GCTimeLimit"); |
0 | 1891 if (GCTimeLimit == 100) { |
1892 // Turn off gc-overhead-limit-exceeded checks | |
1893 FLAG_SET_DEFAULT(UseGCOverheadLimit, false); | |
1894 } | |
1895 | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1896 status = status && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit"); |
0 | 1897 |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1898 status = status && check_gc_consistency(); |
1744
f8c5d1bdaad4
6885308: The incorrect -XX:StackRedPages, -XX:StackShadowPages, -XX:StackYellowPages could cause VM crash
ptisnovs
parents:
1681
diff
changeset
|
1899 status = status && check_stack_pages(); |
0 | 1900 |
1901 if (_has_alloc_profile) { | |
1902 if (UseParallelGC || UseParallelOldGC) { | |
1903 jio_fprintf(defaultStream::error_stream(), | |
1904 "error: invalid argument combination.\n" | |
1905 "Allocation profiling (-Xaprof) cannot be used together with " | |
1906 "Parallel GC (-XX:+UseParallelGC or -XX:+UseParallelOldGC).\n"); | |
1907 status = false; | |
1908 } | |
1909 if (UseConcMarkSweepGC) { | |
1910 jio_fprintf(defaultStream::error_stream(), | |
1911 "error: invalid argument combination.\n" | |
1912 "Allocation profiling (-Xaprof) cannot be used together with " | |
1913 "the CMS collector (-XX:+UseConcMarkSweepGC).\n"); | |
1914 status = false; | |
1915 } | |
1916 } | |
1917 | |
1918 if (CMSIncrementalMode) { | |
1919 if (!UseConcMarkSweepGC) { | |
1920 jio_fprintf(defaultStream::error_stream(), | |
1921 "error: invalid argument combination.\n" | |
1922 "The CMS collector (-XX:+UseConcMarkSweepGC) must be " | |
1923 "selected in order\nto use CMSIncrementalMode.\n"); | |
1924 status = false; | |
1925 } else { | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1926 status = status && verify_percentage(CMSIncrementalDutyCycle, |
0 | 1927 "CMSIncrementalDutyCycle"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1928 status = status && verify_percentage(CMSIncrementalDutyCycleMin, |
0 | 1929 "CMSIncrementalDutyCycleMin"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1930 status = status && verify_percentage(CMSIncrementalSafetyFactor, |
0 | 1931 "CMSIncrementalSafetyFactor"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1932 status = status && verify_percentage(CMSIncrementalOffset, |
0 | 1933 "CMSIncrementalOffset"); |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
1934 status = status && verify_percentage(CMSExpAvgFactor, |
0 | 1935 "CMSExpAvgFactor"); |
1936 // If it was not set on the command line, set | |
1937 // CMSInitiatingOccupancyFraction to 1 so icms can initiate cycles early. | |
1938 if (CMSInitiatingOccupancyFraction < 0) { | |
1939 FLAG_SET_DEFAULT(CMSInitiatingOccupancyFraction, 1); | |
1940 } | |
1941 } | |
1942 } | |
1943 | |
1944 // CMS space iteration, which FLSVerifyAllHeapreferences entails, | |
1945 // insists that we hold the requisite locks so that the iteration is | |
1946 // MT-safe. For the verification at start-up and shut-down, we don't | |
1947 // yet have a good way of acquiring and releasing these locks, | |
1948 // which are not visible at the CollectedHeap level. We want to | |
1949 // be able to acquire these locks and then do the iteration rather | |
1950 // than just disable the lock verification. This will be fixed under | |
1951 // bug 4788986. | |
1952 if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) { | |
1953 if (VerifyGCStartAt == 0) { | |
1954 warning("Heap verification at start-up disabled " | |
1955 "(due to current incompatibility with FLSVerifyAllHeapReferences)"); | |
1956 VerifyGCStartAt = 1; // Disable verification at start-up | |
1957 } | |
1958 if (VerifyBeforeExit) { | |
1959 warning("Heap verification at shutdown disabled " | |
1960 "(due to current incompatibility with FLSVerifyAllHeapReferences)"); | |
1961 VerifyBeforeExit = false; // Disable verification at shutdown | |
1962 } | |
1963 } | |
1964 | |
1965 // Note: only executed in non-PRODUCT mode | |
1966 if (!UseAsyncConcMarkSweepGC && | |
1967 (ExplicitGCInvokesConcurrent || | |
1968 ExplicitGCInvokesConcurrentAndUnloadsClasses)) { | |
1969 jio_fprintf(defaultStream::error_stream(), | |
6628
bb3f6194fedb
7178363: G1: Remove the serial code for PrintGCDetails and make it a special case of the parallel code
brutisso
parents:
6266
diff
changeset
|
1970 "error: +ExplicitGCInvokesConcurrent[AndUnloadsClasses] conflicts" |
0 | 1971 " with -UseAsyncConcMarkSweepGC"); |
1972 status = false; | |
1973 } | |
1974 | |
2366
1fb790245268
6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents:
2362
diff
changeset
|
1975 status = status && verify_min_value(ParGCArrayScanChunk, 1, "ParGCArrayScanChunk"); |
1fb790245268
6820066: Check that -XX:ParGCArrayScanChunk has a value larger than zero.
jwilhelm
parents:
2362
diff
changeset
|
1976 |
2174
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1977 #ifndef SERIALGC |
1283
1c72304f1885
6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents:
1257
diff
changeset
|
1978 if (UseG1GC) { |
1c72304f1885
6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents:
1257
diff
changeset
|
1979 status = status && verify_percentage(InitiatingHeapOccupancyPercent, |
1c72304f1885
6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents:
1257
diff
changeset
|
1980 "InitiatingHeapOccupancyPercent"); |
2174
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1981 status = status && verify_min_value(G1RefProcDrainInterval, 1, |
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1982 "G1RefProcDrainInterval"); |
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1983 status = status && verify_min_value((intx)G1ConcMarkStepDurationMillis, 1, |
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1984 "G1ConcMarkStepDurationMillis"); |
1283
1c72304f1885
6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents:
1257
diff
changeset
|
1985 } |
2174
234761c55641
6608385: G1: need to support parallel reference processing
johnc
parents:
2129
diff
changeset
|
1986 #endif |
1283
1c72304f1885
6928073: G1: use existing command line parameters for marking cycle initiation
tonyp
parents:
1257
diff
changeset
|
1987 |
1244
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1988 status = status && verify_interval(RefDiscoveryPolicy, |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1989 ReferenceProcessor::DiscoveryPolicyMin, |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1990 ReferenceProcessor::DiscoveryPolicyMax, |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1991 "RefDiscoveryPolicy"); |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1992 |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1993 // Limit the lower bound of this flag to 1 as it is used in a division |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1994 // expression. |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1995 status = status && verify_interval(TLABWasteTargetPercent, |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1996 1, 100, "TLABWasteTargetPercent"); |
745c853ee57f
6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
johnc
parents:
1188
diff
changeset
|
1997 |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1998 status = status && verify_object_alignment(); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
1999 |
6736
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
2000 status = status && verify_min_value(ClassMetaspaceSize, 1*M, |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
2001 "ClassMetaspaceSize"); |
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
2002 |
6755
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2003 #ifdef SPARC |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2004 if (UseConcMarkSweepGC || UseG1GC) { |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2005 // Issue a stern warning if the user has explicitly set |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2006 // UseMemSetInBOT (it is known to cause issues), but allow |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2007 // use for experimentation and debugging. |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2008 if (VM_Version::is_sun4v() && UseMemSetInBOT) { |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2009 assert(!FLAG_IS_DEFAULT(UseMemSetInBOT), "Error"); |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2010 warning("Experimental flag -XX:+UseMemSetInBOT is known to cause instability" |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2011 " on sun4v; please understand that you are using at your own risk!"); |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2012 } |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2013 } |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2014 #endif // SPARC |
bc675e55b48c
7193946: Move warnings associated with UseMemSetInBOT flag
johnc
parents:
6736
diff
changeset
|
2015 |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2016 if (PrintNMTStatistics) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2017 #if INCLUDE_NMT |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2018 if (MemTracker::tracking_level() == MemTracker::NMT_off) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2019 #endif // INCLUDE_NMT |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2020 warning("PrintNMTStatistics is disabled, because native memory tracking is not enabled"); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2021 PrintNMTStatistics = false; |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2022 #if INCLUDE_NMT |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2023 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2024 #endif |
6770
9a86ddfc6c8f
7188594: Print statistic collected by NMT with VM flag
zgu
parents:
6736
diff
changeset
|
2025 } |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2026 #ifdef GRAAL |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2027 if (UseCompressedOops) { |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2028 jio_fprintf(defaultStream::error_stream(), |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2029 "CompressedOops are not supported in Graal at the moment\n"); |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2030 status = false; |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2031 } |
6995
edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
2032 if (UseCompressedKlassPointers) { |
edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
2033 jio_fprintf(defaultStream::error_stream(), |
edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
2034 "UseCompressedKlassPointers are not supported in Graal at the moment\n"); |
edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
2035 status = false; |
edb2d7ed9a01
ensure UseCompressedKlassPointers is disabled in Graal VM
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
2036 } |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2037 if (UseG1GC) { |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2038 jio_fprintf(defaultStream::error_stream(), |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2039 "G1 is not supported in Graal at the moment\n"); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2040 status = false; |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2041 } |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2042 |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2043 if (!ScavengeRootsInCode) { |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2044 warning("forcing ScavengeRootsInCode non-zero because Graal is enabled"); |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2045 ScavengeRootsInCode = 1; |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2046 } |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
diff
changeset
|
2047 |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2048 #endif |
0 | 2049 return status; |
2050 } | |
2051 | |
2052 bool Arguments::is_bad_option(const JavaVMOption* option, jboolean ignore, | |
2053 const char* option_type) { | |
2054 if (ignore) return false; | |
2055 | |
2056 const char* spacer = " "; | |
2057 if (option_type == NULL) { | |
2058 option_type = ++spacer; // Set both to the empty string. | |
2059 } | |
2060 | |
2061 if (os::obsolete_option(option)) { | |
2062 jio_fprintf(defaultStream::error_stream(), | |
2063 "Obsolete %s%soption: %s\n", option_type, spacer, | |
2064 option->optionString); | |
2065 return false; | |
2066 } else { | |
2067 jio_fprintf(defaultStream::error_stream(), | |
2068 "Unrecognized %s%soption: %s\n", option_type, spacer, | |
2069 option->optionString); | |
2070 return true; | |
2071 } | |
2072 } | |
2073 | |
2074 static const char* user_assertion_options[] = { | |
2075 "-da", "-ea", "-disableassertions", "-enableassertions", 0 | |
2076 }; | |
2077 | |
2078 static const char* system_assertion_options[] = { | |
2079 "-dsa", "-esa", "-disablesystemassertions", "-enablesystemassertions", 0 | |
2080 }; | |
2081 | |
2082 // Return true if any of the strings in null-terminated array 'names' matches. | |
2083 // If tail_allowed is true, then the tail must begin with a colon; otherwise, | |
2084 // the option must match exactly. | |
2085 static bool match_option(const JavaVMOption* option, const char** names, const char** tail, | |
2086 bool tail_allowed) { | |
2087 for (/* empty */; *names != NULL; ++names) { | |
2088 if (match_option(option, *names, tail)) { | |
2089 if (**tail == '\0' || tail_allowed && **tail == ':') { | |
2090 return true; | |
2091 } | |
2092 } | |
2093 } | |
2094 return false; | |
2095 } | |
2096 | |
1284 | 2097 bool Arguments::parse_uintx(const char* value, |
2098 uintx* uintx_arg, | |
2099 uintx min_size) { | |
2100 | |
2101 // Check the sign first since atomull() parses only unsigned values. | |
2102 bool value_is_positive = !(*value == '-'); | |
2103 | |
2104 if (value_is_positive) { | |
2105 julong n; | |
2106 bool good_return = atomull(value, &n); | |
2107 if (good_return) { | |
2108 bool above_minimum = n >= min_size; | |
2109 bool value_is_too_large = n > max_uintx; | |
2110 | |
2111 if (above_minimum && !value_is_too_large) { | |
2112 *uintx_arg = n; | |
2113 return true; | |
2114 } | |
2115 } | |
2116 } | |
2117 return false; | |
2118 } | |
2119 | |
0 | 2120 Arguments::ArgsRange Arguments::parse_memory_size(const char* s, |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2121 julong* long_arg, |
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2122 julong min_size) { |
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2123 if (!atomull(s, long_arg)) return arg_unreadable; |
0 | 2124 return check_memory_size(*long_arg, min_size); |
2125 } | |
2126 | |
2127 // Parse JavaVMInitArgs structure | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2128 #ifdef GRAAL |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2129 static void prepend_to_graal_classpath(SysClassPath &cp, const char* graal_dir, const char* project) { |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2130 const int BUFFER_SIZE = 1024; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2131 char path[BUFFER_SIZE]; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2132 |
4252
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2133 const char fileSep = *os::file_separator(); |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2134 sprintf(path, "%s%c%s%cbin", graal_dir, fileSep, project, fileSep); |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2135 DIR* dir = os::opendir(path); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2136 if (dir == NULL) { |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2137 jio_fprintf(defaultStream::output_stream(), "Error while starting Graal VM: The Graal class directory %s could not be opened.\n", path); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2138 vm_exit(1); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2139 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2140 os::closedir(dir); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2141 cp.add_prefix(path); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2142 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2143 |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2144 // Walk up the directory hierarchy starting from JAVA_HOME looking |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2145 // for a directory named "graal". If found, then the full path to |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2146 // this directory is returned in graal_dir. |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2147 static bool find_graal_dir(char* graal_dir) { |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2148 strcpy(graal_dir, Arguments::get_java_home()); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2149 char* end = graal_dir + strlen(graal_dir); |
4252
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2150 const char fileSep = *os::file_separator(); |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2151 while (end != graal_dir) { |
4252
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2152 if (fileSep == '/') |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2153 strcat(graal_dir, "/graal"); |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2154 else { |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2155 assert(fileSep == '\\', "unexpected separator char"); |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2156 strcat(graal_dir, "\\graal"); |
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2157 } |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2158 DIR* dir = os::opendir(graal_dir); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2159 if (dir != NULL) { |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2160 os::closedir(dir); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2161 return true; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2162 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2163 *end = 0; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2164 while (end != graal_dir) { |
4252
67e88b7624d5
Removed need for GRAAL environment variable on Windows.
Doug Simon <doug.simon@oracle.com>
parents:
4205
diff
changeset
|
2165 if (*end == fileSep) { |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2166 *end = 0; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2167 break; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2168 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2169 end--; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2170 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2171 } |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2172 return false; |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2173 } |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2174 #endif |
0 | 2175 |
2176 jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { | |
2177 // For components of the system classpath. | |
2178 SysClassPath scp(Arguments::get_sysclasspath()); | |
2179 bool scp_assembly_required = false; | |
2180 | |
2181 // Save default settings for some mode flags | |
2182 Arguments::_AlwaysCompileLoopMethods = AlwaysCompileLoopMethods; | |
2183 Arguments::_UseOnStackReplacement = UseOnStackReplacement; | |
2184 Arguments::_ClipInlining = ClipInlining; | |
2185 Arguments::_BackgroundCompilation = BackgroundCompilation; | |
2186 | |
3341
e9b8ef09622a
7041582: set_mode_flags isn't called without -Xmixed specified
never
parents:
3261
diff
changeset
|
2187 // Setup flags for mixed which is the default |
e9b8ef09622a
7041582: set_mode_flags isn't called without -Xmixed specified
never
parents:
3261
diff
changeset
|
2188 set_mode_flags(_mixed); |
e9b8ef09622a
7041582: set_mode_flags isn't called without -Xmixed specified
never
parents:
3261
diff
changeset
|
2189 |
0 | 2190 // Parse JAVA_TOOL_OPTIONS environment variable (if present) |
2191 jint result = parse_java_tool_options_environment_variable(&scp, &scp_assembly_required); | |
2192 if (result != JNI_OK) { | |
2193 return result; | |
2194 } | |
2195 | |
2196 // Parse JavaVMInitArgs structure passed in | |
2197 result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, COMMAND_LINE); | |
2198 if (result != JNI_OK) { | |
2199 return result; | |
2200 } | |
2201 | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2202 #ifdef GRAAL |
3543
344264424174
Enable debugging of compiler code from Java IDEs. Moved binary to "graal" subdirectory. New flag for starting Graal is just "-graal".
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3535
diff
changeset
|
2203 if (PrintVMOptions) { |
3568
409ef3a68dc8
re-lock objects whose lock was removed by escape analysis, enable stack walking compilation policy (-XX:CompilationPolicyChoice=1)
Lukas Stadler <lukas.stadler@jku.at>
parents:
3546
diff
changeset
|
2204 tty->print_cr("Running Graal VM... "); |
3543
344264424174
Enable debugging of compiler code from Java IDEs. Moved binary to "graal" subdirectory. New flag for starting Graal is just "-graal".
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3535
diff
changeset
|
2205 } |
344264424174
Enable debugging of compiler code from Java IDEs. Moved binary to "graal" subdirectory. New flag for starting Graal is just "-graal".
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3535
diff
changeset
|
2206 const int BUFFER_SIZE = 1024; |
3736
d3ec27ea1b20
Work with GRAAL environment variable instead of MAXINE environment variable.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3601
diff
changeset
|
2207 char graal_dir[BUFFER_SIZE]; |
d3ec27ea1b20
Work with GRAAL environment variable instead of MAXINE environment variable.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3601
diff
changeset
|
2208 if (!os::getenv("GRAAL", graal_dir, sizeof(graal_dir))) { |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2209 if (find_graal_dir(graal_dir) == false) { |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2210 jio_fprintf(defaultStream::output_stream(), "Error while starting Graal VM: The GRAAL environment variable needs to point to the directory containing the Graal projects.\n"); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2211 vm_exit(0); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2212 } |
3543
344264424174
Enable debugging of compiler code from Java IDEs. Moved binary to "graal" subdirectory. New flag for starting Graal is just "-graal".
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3535
diff
changeset
|
2213 } |
3736
d3ec27ea1b20
Work with GRAAL environment variable instead of MAXINE environment variable.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3601
diff
changeset
|
2214 if (PrintVMOptions) tty->print_cr("GRAAL=%s", graal_dir); |
4345
176d60b77d31
Moved PrintCompilation logic from graal.compiler to graal.hotspot. Made bootclasspath generated from the GRAAL environment option more generic (such that adding/removing a project requires no changes in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4252
diff
changeset
|
2215 |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2216 // this declaration is checked for correctness by 'mx build' - only |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2217 // modify its entries, not its name or shape |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2218 const char* graal_projects[] = { |
6495
75f130f2b30f
moved AMD64 specific HotSpot code in com.oracle.graal.hotspot.amd64 project
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
2219 #ifdef AMD64 |
6580
d56d600819fe
moved AMD64 into its own (new) project: com.oracle.graal.amd64
Doug Simon <doug.simon@oracle.com>
parents:
6543
diff
changeset
|
2220 "com.oracle.graal.amd64", |
6497
64b7dd2075c0
renamed projects com.oracle.max.asm* to com.oracle.graal.asm*
Doug Simon <doug.simon@oracle.com>
parents:
6496
diff
changeset
|
2221 "com.oracle.graal.asm.amd64", |
6495
75f130f2b30f
moved AMD64 specific HotSpot code in com.oracle.graal.hotspot.amd64 project
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
2222 "com.oracle.graal.lir.amd64", |
6496
16d1411409b4
moved AMD64 specific code into com.oracle.graal.compiler.amd64
Doug Simon <doug.simon@oracle.com>
parents:
6495
diff
changeset
|
2223 "com.oracle.graal.compiler.amd64", |
6495
75f130f2b30f
moved AMD64 specific HotSpot code in com.oracle.graal.hotspot.amd64 project
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
2224 "com.oracle.graal.hotspot.amd64", |
75f130f2b30f
moved AMD64 specific HotSpot code in com.oracle.graal.hotspot.amd64 project
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
2225 #endif |
6543
ec196bfc458b
Minor fixes after cleanup
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6526
diff
changeset
|
2226 "com.oracle.graal.api.runtime", |
5508
22fe762332af
Changes in C++ part for the Java renamings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5176
diff
changeset
|
2227 "com.oracle.graal.api.meta", |
5512
18f51ca0070f
Changes in the C++ part according to the Java renamings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5508
diff
changeset
|
2228 "com.oracle.graal.api.code", |
18f51ca0070f
Changes in the C++ part according to the Java renamings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5508
diff
changeset
|
2229 "com.oracle.graal.api.interpreter", |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2230 "com.oracle.graal.hotspot", |
6497
64b7dd2075c0
renamed projects com.oracle.max.asm* to com.oracle.graal.asm*
Doug Simon <doug.simon@oracle.com>
parents:
6496
diff
changeset
|
2231 "com.oracle.graal.asm", |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2232 "com.oracle.graal.alloc", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2233 "com.oracle.graal.snippets", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2234 "com.oracle.graal.compiler", |
6522
c612043278e9
refactoring: graal.compiler.phases -> graal.phases, graal.compiler.virtual -> graal.virtual, graal.compiler.loop -> graal.loop
Doug Simon <doug.simon@oracle.com>
parents:
6502
diff
changeset
|
2235 "com.oracle.graal.loop", |
c612043278e9
refactoring: graal.compiler.phases -> graal.phases, graal.compiler.virtual -> graal.virtual, graal.compiler.loop -> graal.loop
Doug Simon <doug.simon@oracle.com>
parents:
6502
diff
changeset
|
2236 "com.oracle.graal.phases", |
6526
ee651c726397
split phases out of graal.phases project into graal.phases.common project
Doug Simon <doug.simon@oracle.com>
parents:
6522
diff
changeset
|
2237 "com.oracle.graal.phases.common", |
6522
c612043278e9
refactoring: graal.compiler.phases -> graal.phases, graal.compiler.virtual -> graal.virtual, graal.compiler.loop -> graal.loop
Doug Simon <doug.simon@oracle.com>
parents:
6502
diff
changeset
|
2238 "com.oracle.graal.virtual", |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2239 "com.oracle.graal.nodes", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2240 "com.oracle.graal.printer", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2241 "com.oracle.graal.debug", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2242 "com.oracle.graal.graph", |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2243 "com.oracle.graal.lir", |
5570
30162e74f11f
Updated list of projects added to the bootclasspath.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5512
diff
changeset
|
2244 "com.oracle.graal.bytecode", |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2245 "com.oracle.graal.java" |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2246 }; |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2247 |
5093
ba5e8ba07b5c
compiler.class.path should not include system class path
Doug Simon <doug.simon@oracle.com>
parents:
5065
diff
changeset
|
2248 SysClassPath scp_compiler(""); |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2249 const int len = sizeof(graal_projects) / sizeof(char*); |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2250 for (int i = 0; i < len; i++) { |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2251 if (PrintVMOptions) { |
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2252 tty->print_cr("Adding project directory %s to bootclasspath", graal_projects[i]); |
4345
176d60b77d31
Moved PrintCompilation logic from graal.compiler to graal.hotspot. Made bootclasspath generated from the GRAAL environment option more generic (such that adding/removing a project requires no changes in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4252
diff
changeset
|
2253 } |
5152
cfdb3c24bd6c
changed Graal class path declaration (back) to a constant that is checked for correctness during building
Doug Simon <doug.simon@oracle.com>
parents:
5093
diff
changeset
|
2254 prepend_to_graal_classpath(scp_compiler, graal_dir, graal_projects[i]); |
4345
176d60b77d31
Moved PrintCompilation logic from graal.compiler to graal.hotspot. Made bootclasspath generated from the GRAAL environment option more generic (such that adding/removing a project requires no changes in the C++ part).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4252
diff
changeset
|
2255 } |
4155
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2256 scp_compiler.expand_endorsed(); |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2257 |
394404b2d9bd
Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
Doug Simon <doug.simon@oracle.com>
parents:
4137
diff
changeset
|
2258 Arguments::set_compilerclasspath(scp_compiler.combined_path()); |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2259 #endif |
3543
344264424174
Enable debugging of compiler code from Java IDEs. Moved binary to "graal" subdirectory. New flag for starting Graal is just "-graal".
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3535
diff
changeset
|
2260 |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2261 if (AggressiveOpts) { |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2262 // Insert alt-rt.jar between user-specified bootclasspath |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2263 // prefix and the default bootclasspath. os::set_boot_path() |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2264 // uses meta_index_dir as the default bootclasspath directory. |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2265 const char* altclasses_jar = "alt-rt.jar"; |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2266 size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 + |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2267 strlen(altclasses_jar); |
6197 | 2268 char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal); |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2269 strcpy(altclasses_path, get_meta_index_dir()); |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2270 strcat(altclasses_path, altclasses_jar); |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2271 scp.add_suffix_to_prefix(altclasses_path); |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2272 scp_assembly_required = true; |
6197 | 2273 FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal); |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2274 } |
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2275 |
5915 | 2276 if (WhiteBoxAPI) { |
2277 // Append wb.jar to bootclasspath if enabled | |
2278 const char* wb_jar = "wb.jar"; | |
2279 size_t wb_path_len = strlen(get_meta_index_dir()) + 1 + | |
2280 strlen(wb_jar); | |
6197 | 2281 char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len, mtInternal); |
5915 | 2282 strcpy(wb_path, get_meta_index_dir()); |
2283 strcat(wb_path, wb_jar); | |
2284 scp.add_suffix(wb_path); | |
2285 scp_assembly_required = true; | |
6197 | 2286 FREE_C_HEAP_ARRAY(char, wb_path, mtInternal); |
5915 | 2287 } |
2288 | |
0 | 2289 // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) |
2290 result = parse_java_options_environment_variable(&scp, &scp_assembly_required); | |
2291 if (result != JNI_OK) { | |
2292 return result; | |
2293 } | |
2294 | |
2295 // Do final processing now that all arguments have been parsed | |
2296 result = finalize_vm_init_args(&scp, scp_assembly_required); | |
2297 if (result != JNI_OK) { | |
2298 return result; | |
2299 } | |
2300 | |
2301 return JNI_OK; | |
2302 } | |
2303 | |
2304 jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, | |
2305 SysClassPath* scp_p, | |
2306 bool* scp_assembly_required_p, | |
2307 FlagValueOrigin origin) { | |
2308 // Remaining part of option string | |
2309 const char* tail; | |
2310 | |
2311 // iterate over arguments | |
2312 for (int index = 0; index < args->nOptions; index++) { | |
2313 bool is_absolute_path = false; // for -agentpath vs -agentlib | |
2314 | |
2315 const JavaVMOption* option = args->options + index; | |
2316 | |
2317 if (!match_option(option, "-Djava.class.path", &tail) && | |
2318 !match_option(option, "-Dsun.java.command", &tail) && | |
2319 !match_option(option, "-Dsun.java.launcher", &tail)) { | |
2320 | |
2321 // add all jvm options to the jvm_args string. This string | |
2322 // is used later to set the java.vm.args PerfData string constant. | |
2323 // the -Djava.class.path and the -Dsun.java.command options are | |
2324 // omitted from jvm_args string as each have their own PerfData | |
2325 // string constant object. | |
2326 build_jvm_args(option->optionString); | |
2327 } | |
2328 | |
2329 // -verbose:[class/gc/jni] | |
2330 if (match_option(option, "-verbose", &tail)) { | |
2331 if (!strcmp(tail, ":class") || !strcmp(tail, "")) { | |
2332 FLAG_SET_CMDLINE(bool, TraceClassLoading, true); | |
2333 FLAG_SET_CMDLINE(bool, TraceClassUnloading, true); | |
2334 } else if (!strcmp(tail, ":gc")) { | |
2335 FLAG_SET_CMDLINE(bool, PrintGC, true); | |
2336 } else if (!strcmp(tail, ":jni")) { | |
2337 FLAG_SET_CMDLINE(bool, PrintJNIResolving, true); | |
2338 } | |
2339 // -da / -ea / -disableassertions / -enableassertions | |
2340 // These accept an optional class/package name separated by a colon, e.g., | |
2341 // -da:java.lang.Thread. | |
2342 } else if (match_option(option, user_assertion_options, &tail, true)) { | |
2343 bool enable = option->optionString[1] == 'e'; // char after '-' is 'e' | |
2344 if (*tail == '\0') { | |
2345 JavaAssertions::setUserClassDefault(enable); | |
2346 } else { | |
2347 assert(*tail == ':', "bogus match by match_option()"); | |
2348 JavaAssertions::addOption(tail + 1, enable); | |
2349 } | |
2350 // -dsa / -esa / -disablesystemassertions / -enablesystemassertions | |
2351 } else if (match_option(option, system_assertion_options, &tail, false)) { | |
2352 bool enable = option->optionString[1] == 'e'; // char after '-' is 'e' | |
2353 JavaAssertions::setSystemClassDefault(enable); | |
2354 // -bootclasspath: | |
2355 } else if (match_option(option, "-Xbootclasspath:", &tail)) { | |
2356 scp_p->reset_path(tail); | |
2357 *scp_assembly_required_p = true; | |
2358 // -bootclasspath/a: | |
2359 } else if (match_option(option, "-Xbootclasspath/a:", &tail)) { | |
2360 scp_p->add_suffix(tail); | |
2361 *scp_assembly_required_p = true; | |
2362 // -bootclasspath/p: | |
2363 } else if (match_option(option, "-Xbootclasspath/p:", &tail)) { | |
2364 scp_p->add_prefix(tail); | |
2365 *scp_assembly_required_p = true; | |
2366 // -Xrun | |
2367 } else if (match_option(option, "-Xrun", &tail)) { | |
531
40ee984935b9
6792705: Add JAR file to bootclasspath when using AggressiveOpts
phh
parents:
513
diff
changeset
|
2368 if (tail != NULL) { |
0 | 2369 const char* pos = strchr(tail, ':'); |
2370 size_t len = (pos == NULL) ? strlen(tail) : pos - tail; | |
6197 | 2371 char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); |
0 | 2372 name[len] = '\0'; |
2373 | |
2374 char *options = NULL; | |
2375 if(pos != NULL) { | |
2376 size_t len2 = strlen(pos+1) + 1; // options start after ':'. Final zero must be copied. | |
6197 | 2377 options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2); |
0 | 2378 } |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2379 #if !INCLUDE_JVMTI |
0 | 2380 if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2381 warning("profiling and debugging agents are not supported in this VM"); |
0 | 2382 } else |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2383 #endif // !INCLUDE_JVMTI |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2384 add_init_library(name, options); |
0 | 2385 } |
2386 // -agentlib and -agentpath | |
2387 } else if (match_option(option, "-agentlib:", &tail) || | |
2388 (is_absolute_path = match_option(option, "-agentpath:", &tail))) { | |
2389 if(tail != NULL) { | |
2390 const char* pos = strchr(tail, '='); | |
2391 size_t len = (pos == NULL) ? strlen(tail) : pos - tail; | |
6197 | 2392 char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); |
0 | 2393 name[len] = '\0'; |
2394 | |
2395 char *options = NULL; | |
2396 if(pos != NULL) { | |
6197 | 2397 options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1); |
0 | 2398 } |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2399 #if !INCLUDE_JVMTI |
0 | 2400 if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2401 warning("profiling and debugging agents are not supported in this VM"); |
0 | 2402 } else |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2403 #endif // !INCLUDE_JVMTI |
0 | 2404 add_init_agent(name, options, is_absolute_path); |
2405 | |
2406 } | |
2407 // -javaagent | |
2408 } else if (match_option(option, "-javaagent:", &tail)) { | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2409 #if !INCLUDE_JVMTI |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2410 warning("Instrumentation agents are not supported in this VM"); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2411 #else |
0 | 2412 if(tail != NULL) { |
6197 | 2413 char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail); |
0 | 2414 add_init_agent("instrument", options, false); |
2415 } | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2416 #endif // !INCLUDE_JVMTI |
0 | 2417 // -Xnoclassgc |
2418 } else if (match_option(option, "-Xnoclassgc", &tail)) { | |
2419 FLAG_SET_CMDLINE(bool, ClassUnloading, false); | |
2420 // -Xincgc: i-CMS | |
2421 } else if (match_option(option, "-Xincgc", &tail)) { | |
2422 FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true); | |
2423 FLAG_SET_CMDLINE(bool, CMSIncrementalMode, true); | |
2424 // -Xnoincgc: no i-CMS | |
2425 } else if (match_option(option, "-Xnoincgc", &tail)) { | |
2426 FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false); | |
2427 FLAG_SET_CMDLINE(bool, CMSIncrementalMode, false); | |
2428 // -Xconcgc | |
2429 } else if (match_option(option, "-Xconcgc", &tail)) { | |
2430 FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, true); | |
2431 // -Xnoconcgc | |
2432 } else if (match_option(option, "-Xnoconcgc", &tail)) { | |
2433 FLAG_SET_CMDLINE(bool, UseConcMarkSweepGC, false); | |
2434 // -Xbatch | |
2435 } else if (match_option(option, "-Xbatch", &tail)) { | |
2436 FLAG_SET_CMDLINE(bool, BackgroundCompilation, false); | |
2437 // -Xmn for compatibility with other JVM vendors | |
2438 } else if (match_option(option, "-Xmn", &tail)) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2439 julong long_initial_eden_size = 0; |
0 | 2440 ArgsRange errcode = parse_memory_size(tail, &long_initial_eden_size, 1); |
2441 if (errcode != arg_in_range) { | |
2442 jio_fprintf(defaultStream::error_stream(), | |
2443 "Invalid initial eden size: %s\n", option->optionString); | |
2444 describe_range_error(errcode); | |
2445 return JNI_EINVAL; | |
2446 } | |
1064 | 2447 FLAG_SET_CMDLINE(uintx, MaxNewSize, (uintx)long_initial_eden_size); |
2448 FLAG_SET_CMDLINE(uintx, NewSize, (uintx)long_initial_eden_size); | |
0 | 2449 // -Xms |
2450 } else if (match_option(option, "-Xms", &tail)) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2451 julong long_initial_heap_size = 0; |
0 | 2452 ArgsRange errcode = parse_memory_size(tail, &long_initial_heap_size, 1); |
2453 if (errcode != arg_in_range) { | |
2454 jio_fprintf(defaultStream::error_stream(), | |
2455 "Invalid initial heap size: %s\n", option->optionString); | |
2456 describe_range_error(errcode); | |
2457 return JNI_EINVAL; | |
2458 } | |
1064 | 2459 FLAG_SET_CMDLINE(uintx, InitialHeapSize, (uintx)long_initial_heap_size); |
0 | 2460 // Currently the minimum size and the initial heap sizes are the same. |
1064 | 2461 set_min_heap_size(InitialHeapSize); |
0 | 2462 // -Xmx |
2463 } else if (match_option(option, "-Xmx", &tail)) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2464 julong long_max_heap_size = 0; |
0 | 2465 ArgsRange errcode = parse_memory_size(tail, &long_max_heap_size, 1); |
2466 if (errcode != arg_in_range) { | |
2467 jio_fprintf(defaultStream::error_stream(), | |
2468 "Invalid maximum heap size: %s\n", option->optionString); | |
2469 describe_range_error(errcode); | |
2470 return JNI_EINVAL; | |
2471 } | |
1064 | 2472 FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size); |
0 | 2473 // Xmaxf |
2474 } else if (match_option(option, "-Xmaxf", &tail)) { | |
2475 int maxf = (int)(atof(tail) * 100); | |
2476 if (maxf < 0 || maxf > 100) { | |
2477 jio_fprintf(defaultStream::error_stream(), | |
2478 "Bad max heap free percentage size: %s\n", | |
2479 option->optionString); | |
2480 return JNI_EINVAL; | |
2481 } else { | |
2482 FLAG_SET_CMDLINE(uintx, MaxHeapFreeRatio, maxf); | |
2483 } | |
2484 // Xminf | |
2485 } else if (match_option(option, "-Xminf", &tail)) { | |
2486 int minf = (int)(atof(tail) * 100); | |
2487 if (minf < 0 || minf > 100) { | |
2488 jio_fprintf(defaultStream::error_stream(), | |
2489 "Bad min heap free percentage size: %s\n", | |
2490 option->optionString); | |
2491 return JNI_EINVAL; | |
2492 } else { | |
2493 FLAG_SET_CMDLINE(uintx, MinHeapFreeRatio, minf); | |
2494 } | |
2495 // -Xss | |
2496 } else if (match_option(option, "-Xss", &tail)) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2497 julong long_ThreadStackSize = 0; |
0 | 2498 ArgsRange errcode = parse_memory_size(tail, &long_ThreadStackSize, 1000); |
2499 if (errcode != arg_in_range) { | |
2500 jio_fprintf(defaultStream::error_stream(), | |
2501 "Invalid thread stack size: %s\n", option->optionString); | |
2502 describe_range_error(errcode); | |
2503 return JNI_EINVAL; | |
2504 } | |
2505 // Internally track ThreadStackSize in units of 1024 bytes. | |
2506 FLAG_SET_CMDLINE(intx, ThreadStackSize, | |
2507 round_to((int)long_ThreadStackSize, K) / K); | |
2508 // -Xoss | |
2509 } else if (match_option(option, "-Xoss", &tail)) { | |
2510 // HotSpot does not have separate native and Java stacks, ignore silently for compatibility | |
2511 // -Xmaxjitcodesize | |
2095
36c186bcc085
6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents:
2002
diff
changeset
|
2512 } else if (match_option(option, "-Xmaxjitcodesize", &tail) || |
36c186bcc085
6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents:
2002
diff
changeset
|
2513 match_option(option, "-XX:ReservedCodeCacheSize=", &tail)) { |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2514 julong long_ReservedCodeCacheSize = 0; |
0 | 2515 ArgsRange errcode = parse_memory_size(tail, &long_ReservedCodeCacheSize, |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2516 (size_t)InitialCodeCacheSize); |
0 | 2517 if (errcode != arg_in_range) { |
2518 jio_fprintf(defaultStream::error_stream(), | |
2095
36c186bcc085
6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents:
2002
diff
changeset
|
2519 "Invalid maximum code cache size: %s. Should be greater than InitialCodeCacheSize=%dK\n", |
36c186bcc085
6302804: Hotspot VM dies ungraceful death when C heap is exhausted in various places.
coleenp
parents:
2002
diff
changeset
|
2520 option->optionString, InitialCodeCacheSize/K); |
0 | 2521 describe_range_error(errcode); |
2522 return JNI_EINVAL; | |
2523 } | |
2524 FLAG_SET_CMDLINE(uintx, ReservedCodeCacheSize, (uintx)long_ReservedCodeCacheSize); | |
2525 // -green | |
2526 } else if (match_option(option, "-green", &tail)) { | |
2527 jio_fprintf(defaultStream::error_stream(), | |
2528 "Green threads support not available\n"); | |
2529 return JNI_EINVAL; | |
2530 // -native | |
2531 } else if (match_option(option, "-native", &tail)) { | |
2532 // HotSpot always uses native threads, ignore silently for compatibility | |
2533 // -Xsqnopause | |
2534 } else if (match_option(option, "-Xsqnopause", &tail)) { | |
2535 // EVM option, ignore silently for compatibility | |
2536 // -Xrs | |
2537 } else if (match_option(option, "-Xrs", &tail)) { | |
2538 // Classic/EVM option, new functionality | |
2539 FLAG_SET_CMDLINE(bool, ReduceSignalUsage, true); | |
2540 } else if (match_option(option, "-Xusealtsigs", &tail)) { | |
2541 // change default internal VM signals used - lower case for back compat | |
2542 FLAG_SET_CMDLINE(bool, UseAltSigs, true); | |
2543 // -Xoptimize | |
2544 } else if (match_option(option, "-Xoptimize", &tail)) { | |
2545 // EVM option, ignore silently for compatibility | |
2546 // -Xprof | |
2547 } else if (match_option(option, "-Xprof", &tail)) { | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2548 #if INCLUDE_FPROF |
0 | 2549 _has_profile = true; |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2550 #else // INCLUDE_FPROF |
0 | 2551 // do we have to exit? |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2552 warning("Flat profiling is not supported in this VM."); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2553 #endif // INCLUDE_FPROF |
0 | 2554 // -Xaprof |
2555 } else if (match_option(option, "-Xaprof", &tail)) { | |
2556 _has_alloc_profile = true; | |
2557 // -Xconcurrentio | |
2558 } else if (match_option(option, "-Xconcurrentio", &tail)) { | |
2559 FLAG_SET_CMDLINE(bool, UseLWPSynchronization, true); | |
2560 FLAG_SET_CMDLINE(bool, BackgroundCompilation, false); | |
2561 FLAG_SET_CMDLINE(intx, DeferThrSuspendLoopCount, 1); | |
2562 FLAG_SET_CMDLINE(bool, UseTLAB, false); | |
2563 FLAG_SET_CMDLINE(uintx, NewSizeThreadIncrease, 16 * K); // 20Kb per thread added to new generation | |
2564 | |
2565 // -Xinternalversion | |
2566 } else if (match_option(option, "-Xinternalversion", &tail)) { | |
2567 jio_fprintf(defaultStream::output_stream(), "%s\n", | |
2568 VM_Version::internal_vm_info_string()); | |
2569 vm_exit(0); | |
2570 #ifndef PRODUCT | |
2571 // -Xprintflags | |
2572 } else if (match_option(option, "-Xprintflags", &tail)) { | |
4773 | 2573 CommandLineFlags::printFlags(tty, false); |
0 | 2574 vm_exit(0); |
2575 #endif | |
2576 // -D | |
2577 } else if (match_option(option, "-D", &tail)) { | |
2578 if (!add_property(tail)) { | |
2579 return JNI_ENOMEM; | |
2580 } | |
2581 // Out of the box management support | |
2582 if (match_option(option, "-Dcom.sun.management", &tail)) { | |
2583 FLAG_SET_CMDLINE(bool, ManagementServer, true); | |
2584 } | |
2585 // -Xint | |
2586 } else if (match_option(option, "-Xint", &tail)) { | |
2587 set_mode_flags(_int); | |
2588 // -Xmixed | |
2589 } else if (match_option(option, "-Xmixed", &tail)) { | |
2590 set_mode_flags(_mixed); | |
2591 // -Xcomp | |
2592 } else if (match_option(option, "-Xcomp", &tail)) { | |
2593 // for testing the compiler; turn off all flags that inhibit compilation | |
2594 set_mode_flags(_comp); | |
2595 | |
2596 // -Xshare:dump | |
2597 } else if (match_option(option, "-Xshare:dump", &tail)) { | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
2598 #if defined(KERNEL) |
0 | 2599 vm_exit_during_initialization( |
2600 "Dumping a shared archive is not supported on the Kernel JVM.", NULL); | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2601 #elif !INCLUDE_CDS |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2602 vm_exit_during_initialization( |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2603 "Dumping a shared archive is not supported in this VM.", NULL); |
0 | 2604 #else |
2605 FLAG_SET_CMDLINE(bool, DumpSharedSpaces, true); | |
2606 set_mode_flags(_int); // Prevent compilation, which creates objects | |
2607 #endif | |
2608 // -Xshare:on | |
2609 } else if (match_option(option, "-Xshare:on", &tail)) { | |
2610 FLAG_SET_CMDLINE(bool, UseSharedSpaces, true); | |
2611 FLAG_SET_CMDLINE(bool, RequireSharedSpaces, true); | |
2612 // -Xshare:auto | |
2613 } else if (match_option(option, "-Xshare:auto", &tail)) { | |
2614 FLAG_SET_CMDLINE(bool, UseSharedSpaces, true); | |
2615 FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false); | |
2616 // -Xshare:off | |
2617 } else if (match_option(option, "-Xshare:off", &tail)) { | |
2618 FLAG_SET_CMDLINE(bool, UseSharedSpaces, false); | |
2619 FLAG_SET_CMDLINE(bool, RequireSharedSpaces, false); | |
2620 | |
2621 // -Xverify | |
2622 } else if (match_option(option, "-Xverify", &tail)) { | |
2623 if (strcmp(tail, ":all") == 0 || strcmp(tail, "") == 0) { | |
2624 FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, true); | |
2625 FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true); | |
2626 } else if (strcmp(tail, ":remote") == 0) { | |
2627 FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false); | |
2628 FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, true); | |
2629 } else if (strcmp(tail, ":none") == 0) { | |
2630 FLAG_SET_CMDLINE(bool, BytecodeVerificationLocal, false); | |
2631 FLAG_SET_CMDLINE(bool, BytecodeVerificationRemote, false); | |
2632 } else if (is_bad_option(option, args->ignoreUnrecognized, "verification")) { | |
2633 return JNI_EINVAL; | |
2634 } | |
2635 // -Xdebug | |
2636 } else if (match_option(option, "-Xdebug", &tail)) { | |
2637 // note this flag has been used, then ignore | |
2638 set_xdebug_mode(true); | |
2639 // -Xnoagent | |
2640 } else if (match_option(option, "-Xnoagent", &tail)) { | |
2641 // For compatibility with classic. HotSpot refuses to load the old style agent.dll. | |
2642 } else if (match_option(option, "-Xboundthreads", &tail)) { | |
2643 // Bind user level threads to kernel threads (Solaris only) | |
2644 FLAG_SET_CMDLINE(bool, UseBoundThreads, true); | |
2645 } else if (match_option(option, "-Xloggc:", &tail)) { | |
2646 // Redirect GC output to the file. -Xloggc:<filename> | |
2647 // ostream_init_log(), when called will use this filename | |
2648 // to initialize a fileStream. | |
2649 _gc_log_filename = strdup(tail); | |
2650 FLAG_SET_CMDLINE(bool, PrintGC, true); | |
2651 FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true); | |
2652 | |
2653 // JNI hooks | |
2654 } else if (match_option(option, "-Xcheck", &tail)) { | |
2655 if (!strcmp(tail, ":jni")) { | |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2656 #if !INCLUDE_JNI_CHECK |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2657 warning("JNI CHECKING is not supported in this VM"); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2658 #else |
0 | 2659 CheckJNICalls = true; |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
2660 #endif // INCLUDE_JNI_CHECK |
0 | 2661 } else if (is_bad_option(option, args->ignoreUnrecognized, |
2662 "check")) { | |
2663 return JNI_EINVAL; | |
2664 } | |
2665 } else if (match_option(option, "vfprintf", &tail)) { | |
2666 _vfprintf_hook = CAST_TO_FN_PTR(vfprintf_hook_t, option->extraInfo); | |
2667 } else if (match_option(option, "exit", &tail)) { | |
2668 _exit_hook = CAST_TO_FN_PTR(exit_hook_t, option->extraInfo); | |
2669 } else if (match_option(option, "abort", &tail)) { | |
2670 _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo); | |
2671 // -XX:+AggressiveHeap | |
2672 } else if (match_option(option, "-XX:+AggressiveHeap", &tail)) { | |
2673 | |
2674 // This option inspects the machine and attempts to set various | |
2675 // parameters to be optimal for long-running, memory allocation | |
2676 // intensive jobs. It is intended for machines with large | |
2677 // amounts of cpu and memory. | |
2678 | |
2679 // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit | |
2680 // VM, but we may not be able to represent the total physical memory | |
2681 // available (like having 8gb of memory on a box but using a 32bit VM). | |
2682 // Thus, we need to make sure we're using a julong for intermediate | |
2683 // calculations. | |
2684 julong initHeapSize; | |
2685 julong total_memory = os::physical_memory(); | |
2686 | |
2687 if (total_memory < (julong)256*M) { | |
2688 jio_fprintf(defaultStream::error_stream(), | |
2689 "You need at least 256mb of memory to use -XX:+AggressiveHeap\n"); | |
2690 vm_exit(1); | |
2691 } | |
2692 | |
2693 // The heap size is half of available memory, or (at most) | |
2694 // all of possible memory less 160mb (leaving room for the OS | |
2695 // when using ISM). This is the maximum; because adaptive sizing | |
2696 // is turned on below, the actual space used may be smaller. | |
2697 | |
2698 initHeapSize = MIN2(total_memory / (julong)2, | |
2699 total_memory - (julong)160*M); | |
2700 | |
2701 // Make sure that if we have a lot of memory we cap the 32 bit | |
2702 // process space. The 64bit VM version of this function is a nop. | |
2703 initHeapSize = os::allocatable_physical_memory(initHeapSize); | |
2704 | |
2705 if (FLAG_IS_DEFAULT(MaxHeapSize)) { | |
2706 FLAG_SET_CMDLINE(uintx, MaxHeapSize, initHeapSize); | |
1064 | 2707 FLAG_SET_CMDLINE(uintx, InitialHeapSize, initHeapSize); |
0 | 2708 // Currently the minimum size and the initial heap sizes are the same. |
1064 | 2709 set_min_heap_size(initHeapSize); |
0 | 2710 } |
2711 if (FLAG_IS_DEFAULT(NewSize)) { | |
2712 // Make the young generation 3/8ths of the total heap. | |
2713 FLAG_SET_CMDLINE(uintx, NewSize, | |
2714 ((julong)MaxHeapSize / (julong)8) * (julong)3); | |
2715 FLAG_SET_CMDLINE(uintx, MaxNewSize, NewSize); | |
2716 } | |
2717 | |
6917
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
2718 #ifndef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD. |
0 | 2719 FLAG_SET_DEFAULT(UseLargePages, true); |
6917
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
2720 #endif |
0 | 2721 |
2722 // Increase some data structure sizes for efficiency | |
2723 FLAG_SET_CMDLINE(uintx, BaseFootPrintEstimate, MaxHeapSize); | |
2724 FLAG_SET_CMDLINE(bool, ResizeTLAB, false); | |
2725 FLAG_SET_CMDLINE(uintx, TLABSize, 256*K); | |
2726 | |
2727 // See the OldPLABSize comment below, but replace 'after promotion' | |
2728 // with 'after copying'. YoungPLABSize is the size of the survivor | |
2729 // space per-gc-thread buffers. The default is 4kw. | |
2730 FLAG_SET_CMDLINE(uintx, YoungPLABSize, 256*K); // Note: this is in words | |
2731 | |
2732 // OldPLABSize is the size of the buffers in the old gen that | |
2733 // UseParallelGC uses to promote live data that doesn't fit in the | |
2734 // survivor spaces. At any given time, there's one for each gc thread. | |
2735 // The default size is 1kw. These buffers are rarely used, since the | |
2736 // survivor spaces are usually big enough. For specjbb, however, there | |
2737 // are occasions when there's lots of live data in the young gen | |
2738 // and we end up promoting some of it. We don't have a definite | |
2739 // explanation for why bumping OldPLABSize helps, but the theory | |
2740 // is that a bigger PLAB results in retaining something like the | |
2741 // original allocation order after promotion, which improves mutator | |
2742 // locality. A minor effect may be that larger PLABs reduce the | |
2743 // number of PLAB allocation events during gc. The value of 8kw | |
2744 // was arrived at by experimenting with specjbb. | |
2745 FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K); // Note: this is in words | |
2746 | |
2747 // Enable parallel GC and adaptive generation sizing | |
2748 FLAG_SET_CMDLINE(bool, UseParallelGC, true); | |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
2749 FLAG_SET_DEFAULT(ParallelGCThreads, |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
2750 Abstract_VM_Version::parallel_worker_threads()); |
0 | 2751 |
2752 // Encourage steady state memory management | |
2753 FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100); | |
2754 | |
2755 // This appears to improve mutator locality | |
2756 FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); | |
2757 | |
2758 // Get around early Solaris scheduling bug | |
2759 // (affinity vs other jobs on system) | |
2760 // but disallow DR and offlining (5008695). | |
2761 FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true); | |
2762 | |
2763 } else if (match_option(option, "-XX:+NeverTenure", &tail)) { | |
2764 // The last option must always win. | |
2765 FLAG_SET_CMDLINE(bool, AlwaysTenure, false); | |
2766 FLAG_SET_CMDLINE(bool, NeverTenure, true); | |
2767 } else if (match_option(option, "-XX:+AlwaysTenure", &tail)) { | |
2768 // The last option must always win. | |
2769 FLAG_SET_CMDLINE(bool, NeverTenure, false); | |
2770 FLAG_SET_CMDLINE(bool, AlwaysTenure, true); | |
2771 } else if (match_option(option, "-XX:+CMSPermGenSweepingEnabled", &tail) || | |
2772 match_option(option, "-XX:-CMSPermGenSweepingEnabled", &tail)) { | |
2773 jio_fprintf(defaultStream::error_stream(), | |
2774 "Please use CMSClassUnloadingEnabled in place of " | |
2775 "CMSPermGenSweepingEnabled in the future\n"); | |
2776 } else if (match_option(option, "-XX:+UseGCTimeLimit", &tail)) { | |
2777 FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, true); | |
2778 jio_fprintf(defaultStream::error_stream(), | |
2779 "Please use -XX:+UseGCOverheadLimit in place of " | |
2780 "-XX:+UseGCTimeLimit in the future\n"); | |
2781 } else if (match_option(option, "-XX:-UseGCTimeLimit", &tail)) { | |
2782 FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, false); | |
2783 jio_fprintf(defaultStream::error_stream(), | |
2784 "Please use -XX:-UseGCOverheadLimit in place of " | |
2785 "-XX:-UseGCTimeLimit in the future\n"); | |
2786 // The TLE options are for compatibility with 1.3 and will be | |
2787 // removed without notice in a future release. These options | |
2788 // are not to be documented. | |
2789 } else if (match_option(option, "-XX:MaxTLERatio=", &tail)) { | |
2790 // No longer used. | |
2791 } else if (match_option(option, "-XX:+ResizeTLE", &tail)) { | |
2792 FLAG_SET_CMDLINE(bool, ResizeTLAB, true); | |
2793 } else if (match_option(option, "-XX:-ResizeTLE", &tail)) { | |
2794 FLAG_SET_CMDLINE(bool, ResizeTLAB, false); | |
2795 } else if (match_option(option, "-XX:+PrintTLE", &tail)) { | |
2796 FLAG_SET_CMDLINE(bool, PrintTLAB, true); | |
2797 } else if (match_option(option, "-XX:-PrintTLE", &tail)) { | |
2798 FLAG_SET_CMDLINE(bool, PrintTLAB, false); | |
2799 } else if (match_option(option, "-XX:TLEFragmentationRatio=", &tail)) { | |
2800 // No longer used. | |
2801 } else if (match_option(option, "-XX:TLESize=", &tail)) { | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2802 julong long_tlab_size = 0; |
0 | 2803 ArgsRange errcode = parse_memory_size(tail, &long_tlab_size, 1); |
2804 if (errcode != arg_in_range) { | |
2805 jio_fprintf(defaultStream::error_stream(), | |
2806 "Invalid TLAB size: %s\n", option->optionString); | |
2807 describe_range_error(errcode); | |
2808 return JNI_EINVAL; | |
2809 } | |
2810 FLAG_SET_CMDLINE(uintx, TLABSize, long_tlab_size); | |
2811 } else if (match_option(option, "-XX:TLEThreadRatio=", &tail)) { | |
2812 // No longer used. | |
2813 } else if (match_option(option, "-XX:+UseTLE", &tail)) { | |
2814 FLAG_SET_CMDLINE(bool, UseTLAB, true); | |
2815 } else if (match_option(option, "-XX:-UseTLE", &tail)) { | |
2816 FLAG_SET_CMDLINE(bool, UseTLAB, false); | |
2817 SOLARIS_ONLY( | |
2818 } else if (match_option(option, "-XX:+UsePermISM", &tail)) { | |
2819 warning("-XX:+UsePermISM is obsolete."); | |
2820 FLAG_SET_CMDLINE(bool, UseISM, true); | |
2821 } else if (match_option(option, "-XX:-UsePermISM", &tail)) { | |
2822 FLAG_SET_CMDLINE(bool, UseISM, false); | |
2823 ) | |
2824 } else if (match_option(option, "-XX:+DisplayVMOutputToStderr", &tail)) { | |
2825 FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, false); | |
2826 FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, true); | |
2827 } else if (match_option(option, "-XX:+DisplayVMOutputToStdout", &tail)) { | |
2828 FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, false); | |
2829 FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, true); | |
2830 } else if (match_option(option, "-XX:+ExtendedDTraceProbes", &tail)) { | |
4006 | 2831 #if defined(DTRACE_ENABLED) |
0 | 2832 FLAG_SET_CMDLINE(bool, ExtendedDTraceProbes, true); |
2833 FLAG_SET_CMDLINE(bool, DTraceMethodProbes, true); | |
2834 FLAG_SET_CMDLINE(bool, DTraceAllocProbes, true); | |
2835 FLAG_SET_CMDLINE(bool, DTraceMonitorProbes, true); | |
4006 | 2836 #else // defined(DTRACE_ENABLED) |
0 | 2837 jio_fprintf(defaultStream::error_stream(), |
4006 | 2838 "ExtendedDTraceProbes flag is not applicable for this configuration\n"); |
0 | 2839 return JNI_EINVAL; |
4006 | 2840 #endif // defined(DTRACE_ENABLED) |
0 | 2841 #ifdef ASSERT |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2842 } else if (match_option(option, "-XX:+FullGCALot", &tail)) { |
0 | 2843 FLAG_SET_CMDLINE(bool, FullGCALot, true); |
2844 // disable scavenge before parallel mark-compact | |
2845 FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); | |
2846 #endif | |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2847 } else if (match_option(option, "-XX:CMSParPromoteBlocksToClaim=", &tail)) { |
0 | 2848 julong cms_blocks_to_claim = (julong)atol(tail); |
2849 FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); | |
2850 jio_fprintf(defaultStream::error_stream(), | |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2851 "Please use -XX:OldPLABSize in place of " |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2852 "-XX:CMSParPromoteBlocksToClaim in the future\n"); |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2853 } else if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) { |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2854 julong cms_blocks_to_claim = (julong)atol(tail); |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2855 FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2856 jio_fprintf(defaultStream::error_stream(), |
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2857 "Please use -XX:OldPLABSize in place of " |
0 | 2858 "-XX:ParCMSPromoteBlocksToClaim in the future\n"); |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2859 } else if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) { |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2860 julong old_plab_size = 0; |
0 | 2861 ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1); |
2862 if (errcode != arg_in_range) { | |
2863 jio_fprintf(defaultStream::error_stream(), | |
2864 "Invalid old PLAB size: %s\n", option->optionString); | |
2865 describe_range_error(errcode); | |
2866 return JNI_EINVAL; | |
2867 } | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2868 FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size); |
0 | 2869 jio_fprintf(defaultStream::error_stream(), |
2870 "Please use -XX:OldPLABSize in place of " | |
2871 "-XX:ParallelGCOldGenAllocBufferSize in the future\n"); | |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2872 } else if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) { |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2873 julong young_plab_size = 0; |
0 | 2874 ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1); |
2875 if (errcode != arg_in_range) { | |
2876 jio_fprintf(defaultStream::error_stream(), | |
2877 "Invalid young PLAB size: %s\n", option->optionString); | |
2878 describe_range_error(errcode); | |
2879 return JNI_EINVAL; | |
2880 } | |
489
2494ab195856
6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
swamyv
parents:
483
diff
changeset
|
2881 FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size); |
0 | 2882 jio_fprintf(defaultStream::error_stream(), |
2883 "Please use -XX:YoungPLABSize in place of " | |
2884 "-XX:ParallelGCToSpaceAllocBufferSize in the future\n"); | |
1284 | 2885 } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) || |
2886 match_option(option, "-XX:G1MarkStackSize=", &tail)) { | |
2887 julong stack_size = 0; | |
2888 ArgsRange errcode = parse_memory_size(tail, &stack_size, 1); | |
2889 if (errcode != arg_in_range) { | |
2890 jio_fprintf(defaultStream::error_stream(), | |
2891 "Invalid mark stack size: %s\n", option->optionString); | |
2892 describe_range_error(errcode); | |
2893 return JNI_EINVAL; | |
2894 } | |
2895 FLAG_SET_CMDLINE(uintx, MarkStackSize, stack_size); | |
2896 } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) { | |
2897 julong max_stack_size = 0; | |
2898 ArgsRange errcode = parse_memory_size(tail, &max_stack_size, 1); | |
2899 if (errcode != arg_in_range) { | |
2900 jio_fprintf(defaultStream::error_stream(), | |
2901 "Invalid maximum mark stack size: %s\n", | |
2902 option->optionString); | |
2903 describe_range_error(errcode); | |
2904 return JNI_EINVAL; | |
2905 } | |
2906 FLAG_SET_CMDLINE(uintx, MarkStackSizeMax, max_stack_size); | |
2907 } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) || | |
2908 match_option(option, "-XX:ParallelCMSThreads=", &tail)) { | |
2909 uintx conc_threads = 0; | |
2910 if (!parse_uintx(tail, &conc_threads, 1)) { | |
2911 jio_fprintf(defaultStream::error_stream(), | |
2912 "Invalid concurrent threads: %s\n", option->optionString); | |
2913 return JNI_EINVAL; | |
2914 } | |
2915 FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); | |
6199
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2916 } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2917 julong max_direct_memory_size = 0; |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2918 ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0); |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2919 if (errcode != arg_in_range) { |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2920 jio_fprintf(defaultStream::error_stream(), |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2921 "Invalid maximum direct memory size: %s\n", |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2922 option->optionString); |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2923 describe_range_error(errcode); |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2924 return JNI_EINVAL; |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2925 } |
3f1ab0c19c30
7179383: MaxDirectMemorySize argument parsing is broken for values >2G
dholmes
parents:
6198
diff
changeset
|
2926 FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size); |
6878
85916677fc22
7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents:
6857
diff
changeset
|
2927 } else if (match_option(option, "-XX:+UseVMInterruptibleIO", &tail)) { |
85916677fc22
7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents:
6857
diff
changeset
|
2928 // NOTE! In JDK 9, the UseVMInterruptibleIO flag will completely go |
85916677fc22
7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents:
6857
diff
changeset
|
2929 // away and will cause VM initialization failures! |
85916677fc22
7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents:
6857
diff
changeset
|
2930 warning("-XX:+UseVMInterruptibleIO is obsolete and will be removed in a future release."); |
85916677fc22
7188233: UseVMInterruptibleIO flag deprecate for JDK8
coleenp
parents:
6857
diff
changeset
|
2931 FLAG_SET_CMDLINE(bool, UseVMInterruptibleIO, true); |
1145
e018e6884bd8
6631166: CMS: better heuristics when combatting fragmentation
ysr
parents:
1074
diff
changeset
|
2932 } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx |
0 | 2933 // Skip -XX:Flags= since that case has already been handled |
2934 if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { | |
2935 if (!process_argument(tail, args->ignoreUnrecognized, origin)) { | |
2936 return JNI_EINVAL; | |
2937 } | |
2938 } | |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2939 } |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2940 #ifdef GRAAL |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2941 else if (match_option(option, "-G:", &tail)) { // -G:XXX |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
2942 // Option for the graal compiler. |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1356
diff
changeset
|
2943 if (PrintVMOptions) { |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
2944 tty->print_cr("graal option %s", tail); |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1356
diff
changeset
|
2945 } |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2873
diff
changeset
|
2946 Arguments::add_graal_arg(tail); |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1356
diff
changeset
|
2947 |
0 | 2948 // Unknown option |
4559
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2949 } |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2950 #endif |
723df37192d6
Make it possible again to build a real client libjvm, drop the UseGraal flag.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4350
diff
changeset
|
2951 else if (is_bad_option(option, args->ignoreUnrecognized)) { |
0 | 2952 return JNI_ERR; |
2953 } | |
2954 } | |
3767
2a241e764894
6941923: RFE: Handling large log files produced by long running Java Applications
minqi
parents:
3349
diff
changeset
|
2955 |
449
171e581e8161
6554406: Change switch UseVMInterruptibleIO default to false (sol)
xlu
parents:
420
diff
changeset
|
2956 // Change the default value for flags which have different default values |
171e581e8161
6554406: Change switch UseVMInterruptibleIO default to false (sol)
xlu
parents:
420
diff
changeset
|
2957 // when working with older JDKs. |
1679
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2958 #ifdef LINUX |
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2959 if (JDK_Version::current().compare_major(6) <= 0 && |
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2960 FLAG_IS_DEFAULT(UseLinuxPosixThreadCPUClocks)) { |
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2961 FLAG_SET_DEFAULT(UseLinuxPosixThreadCPUClocks, false); |
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2962 } |
3d90023429ec
6888526: Linux getCurrentThreadCpuTime is drastically slower than Windows
aph
parents:
1628
diff
changeset
|
2963 #endif // LINUX |
0 | 2964 return JNI_OK; |
2965 } | |
2966 | |
2967 jint Arguments::finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required) { | |
2968 // This must be done after all -D arguments have been processed. | |
2969 scp_p->expand_endorsed(); | |
2970 | |
2971 if (scp_assembly_required || scp_p->get_endorsed() != NULL) { | |
2972 // Assemble the bootclasspath elements into the final path. | |
2973 Arguments::set_sysclasspath(scp_p->combined_path()); | |
2974 } | |
2975 | |
2976 // This must be done after all arguments have been processed. | |
2977 // java_compiler() true means set to "NONE" or empty. | |
2978 if (java_compiler() && !xdebug_mode()) { | |
2979 // For backwards compatibility, we switch to interpreted mode if | |
2980 // -Djava.compiler="NONE" or "" is specified AND "-Xdebug" was | |
2981 // not specified. | |
2982 set_mode_flags(_int); | |
2983 } | |
2984 if (CompileThreshold == 0) { | |
2985 set_mode_flags(_int); | |
2986 } | |
2987 | |
2988 #ifndef COMPILER2 | |
2989 // Don't degrade server performance for footprint | |
2990 if (FLAG_IS_DEFAULT(UseLargePages) && | |
2991 MaxHeapSize < LargePageHeapSizeThreshold) { | |
2992 // No need for large granularity pages w/small heaps. | |
2993 // Note that large pages are enabled/disabled for both the | |
2994 // Java heap and the code cache. | |
2995 FLAG_SET_DEFAULT(UseLargePages, false); | |
2996 SOLARIS_ONLY(FLAG_SET_DEFAULT(UseMPSS, false)); | |
2997 SOLARIS_ONLY(FLAG_SET_DEFAULT(UseISM, false)); | |
2998 } | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
2999 |
1251
576e77447e3c
6923002: assert(false,"this call site should not be polymorphic")
kvn
parents:
1188
diff
changeset
|
3000 // Tiered compilation is undefined with C1. |
576e77447e3c
6923002: assert(false,"this call site should not be polymorphic")
kvn
parents:
1188
diff
changeset
|
3001 TieredCompilation = false; |
0 | 3002 #else |
3003 if (!FLAG_IS_DEFAULT(OptoLoopAlignment) && FLAG_IS_DEFAULT(MaxLoopPad)) { | |
3004 FLAG_SET_DEFAULT(MaxLoopPad, OptoLoopAlignment-1); | |
3005 } | |
3006 #endif | |
3007 | |
1681
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3008 // If we are running in a headless jre, force java.awt.headless property |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3009 // to be true unless the property has already been set. |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3010 // Also allow the OS environment variable JAVA_AWT_HEADLESS to set headless state. |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3011 if (os::is_headless_jre()) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3012 const char* headless = Arguments::get_property("java.awt.headless"); |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3013 if (headless == NULL) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3014 char envbuffer[128]; |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3015 if (!os::getenv("JAVA_AWT_HEADLESS", envbuffer, sizeof(envbuffer))) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3016 if (!add_property("java.awt.headless=true")) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3017 return JNI_ENOMEM; |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3018 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3019 } else { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3020 char buffer[256]; |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3021 strcpy(buffer, "java.awt.headless="); |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3022 strcat(buffer, envbuffer); |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3023 if (!add_property(buffer)) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3024 return JNI_ENOMEM; |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3025 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3026 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3027 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3028 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3029 |
0 | 3030 if (!check_vm_args_consistency()) { |
3031 return JNI_ERR; | |
3032 } | |
3033 | |
3034 return JNI_OK; | |
3035 } | |
3036 | |
3037 jint Arguments::parse_java_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) { | |
3038 return parse_options_environment_variable("_JAVA_OPTIONS", scp_p, | |
3039 scp_assembly_required_p); | |
3040 } | |
3041 | |
3042 jint Arguments::parse_java_tool_options_environment_variable(SysClassPath* scp_p, bool* scp_assembly_required_p) { | |
3043 return parse_options_environment_variable("JAVA_TOOL_OPTIONS", scp_p, | |
3044 scp_assembly_required_p); | |
3045 } | |
3046 | |
3047 jint Arguments::parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p) { | |
3048 const int N_MAX_OPTIONS = 64; | |
3049 const int OPTION_BUFFER_SIZE = 1024; | |
3050 char buffer[OPTION_BUFFER_SIZE]; | |
3051 | |
3052 // The variable will be ignored if it exceeds the length of the buffer. | |
3053 // Don't check this variable if user has special privileges | |
3054 // (e.g. unix su command). | |
3055 if (os::getenv(name, buffer, sizeof(buffer)) && | |
3056 !os::have_special_privileges()) { | |
3057 JavaVMOption options[N_MAX_OPTIONS]; // Construct option array | |
3058 jio_fprintf(defaultStream::error_stream(), | |
3059 "Picked up %s: %s\n", name, buffer); | |
3060 char* rd = buffer; // pointer to the input string (rd) | |
3061 int i; | |
3062 for (i = 0; i < N_MAX_OPTIONS;) { // repeat for all options in the input string | |
3063 while (isspace(*rd)) rd++; // skip whitespace | |
3064 if (*rd == 0) break; // we re done when the input string is read completely | |
3065 | |
3066 // The output, option string, overwrites the input string. | |
3067 // Because of quoting, the pointer to the option string (wrt) may lag the pointer to | |
3068 // input string (rd). | |
3069 char* wrt = rd; | |
3070 | |
3071 options[i++].optionString = wrt; // Fill in option | |
3072 while (*rd != 0 && !isspace(*rd)) { // unquoted strings terminate with a space or NULL | |
3073 if (*rd == '\'' || *rd == '"') { // handle a quoted string | |
3074 int quote = *rd; // matching quote to look for | |
3075 rd++; // don't copy open quote | |
3076 while (*rd != quote) { // include everything (even spaces) up until quote | |
3077 if (*rd == 0) { // string termination means unmatched string | |
3078 jio_fprintf(defaultStream::error_stream(), | |
3079 "Unmatched quote in %s\n", name); | |
3080 return JNI_ERR; | |
3081 } | |
3082 *wrt++ = *rd++; // copy to option string | |
3083 } | |
3084 rd++; // don't copy close quote | |
3085 } else { | |
3086 *wrt++ = *rd++; // copy to option string | |
3087 } | |
3088 } | |
3089 // Need to check if we're done before writing a NULL, | |
3090 // because the write could be to the byte that rd is pointing to. | |
3091 if (*rd++ == 0) { | |
3092 *wrt = 0; | |
3093 break; | |
3094 } | |
3095 *wrt = 0; // Zero terminate option | |
3096 } | |
3097 // Construct JavaVMInitArgs structure and parse as if it was part of the command line | |
3098 JavaVMInitArgs vm_args; | |
3099 vm_args.version = JNI_VERSION_1_2; | |
3100 vm_args.options = options; | |
3101 vm_args.nOptions = i; | |
564 | 3102 vm_args.ignoreUnrecognized = IgnoreUnrecognizedVMOptions; |
0 | 3103 |
3104 if (PrintVMOptions) { | |
3105 const char* tail; | |
3106 for (int i = 0; i < vm_args.nOptions; i++) { | |
3107 const JavaVMOption *option = vm_args.options + i; | |
3108 if (match_option(option, "-XX:", &tail)) { | |
3109 logOption(tail); | |
3110 } | |
3111 } | |
3112 } | |
3113 | |
3114 return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, ENVIRON_VAR)); | |
3115 } | |
3116 return JNI_OK; | |
3117 } | |
3118 | |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3119 void Arguments::set_shared_spaces_flags() { |
2378 | 3120 const bool must_share = DumpSharedSpaces || RequireSharedSpaces; |
3121 const bool might_share = must_share || UseSharedSpaces; | |
3122 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3123 // CompressedOops cannot be used with CDS. The offsets of oopmaps and |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3124 // static fields are incorrect in the archive. With some more clever |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3125 // initialization, this restriction can probably be lifted. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3126 // ??? UseLargePages might be okay now |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3127 const bool cannot_share = UseCompressedOops || |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3128 (UseLargePages && FLAG_IS_CMDLINE(UseLargePages)); |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3129 if (cannot_share) { |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3130 if (must_share) { |
6736
11fb740ce98f
7196103: NPG: Unable to allocate bit map for parallel garbage collection for the requested heap size
coleenp
parents:
6725
diff
changeset
|
3131 warning("disabling large pages %s" |
2378 | 3132 "because of %s", "" LP64_ONLY("and compressed oops "), |
3133 DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on"); | |
3134 FLAG_SET_CMDLINE(bool, UseLargePages, false); | |
3135 LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedOops, false)); | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3136 LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedKlassPointers, false)); |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3137 } else { |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3138 // Prefer compressed oops and large pages to class data sharing |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3139 if (UseSharedSpaces && Verbose) { |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3140 warning("turning off use of shared archive because of large pages%s", |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3141 "" LP64_ONLY(" and/or compressed oops")); |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3142 } |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3143 no_shared_spaces(); |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3144 } |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3145 } else if (UseLargePages && might_share) { |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3146 // Disable large pages to allow shared spaces. This is sub-optimal, since |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3147 // there may not even be a shared archive to use. |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3148 FLAG_SET_DEFAULT(UseLargePages, false); |
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3149 } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3150 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3151 // Add 2M to any size for SharedReadOnlySize to get around the JPRT setting |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3152 if (DumpSharedSpaces && !FLAG_IS_DEFAULT(SharedReadOnlySize)) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3153 SharedReadOnlySize = 14*M; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3154 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3155 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3156 if (DumpSharedSpaces) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3157 if (RequireSharedSpaces) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3158 warning("cannot dump shared archive while using shared archive"); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3159 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3160 UseSharedSpaces = false; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3161 } |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3162 } |
1891
9de67bf4244d
6996136: VM crash in src/share/vm/runtime/virtualspace.cpp:424
iveresov
parents:
1890
diff
changeset
|
3163 |
3797
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3164 // Disable options not supported in this release, with a warning if they |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3165 // were explicitly requested on the command-line |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3166 #define UNSUPPORTED_OPTION(opt, description) \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3167 do { \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3168 if (opt) { \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3169 if (FLAG_IS_CMDLINE(opt)) { \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3170 warning(description " is disabled in this release."); \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3171 } \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3172 FLAG_SET_DEFAULT(opt, false); \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3173 } \ |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3174 } while(0) |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3175 |
0 | 3176 // Parse entry point called from JNI_CreateJavaVM |
3177 | |
3178 jint Arguments::parse(const JavaVMInitArgs* args) { | |
3179 | |
3180 // Sharing support | |
3181 // Construct the path to the archive | |
3182 char jvm_path[JVM_MAXPATHLEN]; | |
3183 os::jvm_path(jvm_path, sizeof(jvm_path)); | |
3184 char *end = strrchr(jvm_path, *os::file_separator()); | |
3185 if (end != NULL) *end = '\0'; | |
3186 char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + | |
6197 | 3187 strlen(os::file_separator()) + 20, mtInternal); |
0 | 3188 if (shared_archive_path == NULL) return JNI_ENOMEM; |
3189 strcpy(shared_archive_path, jvm_path); | |
3190 strcat(shared_archive_path, os::file_separator()); | |
3191 strcat(shared_archive_path, "classes"); | |
3192 DEBUG_ONLY(strcat(shared_archive_path, "_g");) | |
3193 strcat(shared_archive_path, ".jsa"); | |
3194 SharedArchivePath = shared_archive_path; | |
3195 | |
3196 // Remaining part of option string | |
3197 const char* tail; | |
3198 | |
3199 // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. | |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3200 const char* hotspotrc = ".hotspotrc"; |
0 | 3201 bool settings_file_specified = false; |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3202 bool needs_hotspotrc_warning = false; |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3203 |
564 | 3204 const char* flags_file; |
0 | 3205 int index; |
3206 for (index = 0; index < args->nOptions; index++) { | |
3207 const JavaVMOption *option = args->options + index; | |
3208 if (match_option(option, "-XX:Flags=", &tail)) { | |
564 | 3209 flags_file = tail; |
0 | 3210 settings_file_specified = true; |
3211 } | |
3212 if (match_option(option, "-XX:+PrintVMOptions", &tail)) { | |
3213 PrintVMOptions = true; | |
3214 } | |
253
b0fe4deeb9fb
6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents:
196
diff
changeset
|
3215 if (match_option(option, "-XX:-PrintVMOptions", &tail)) { |
b0fe4deeb9fb
6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents:
196
diff
changeset
|
3216 PrintVMOptions = false; |
b0fe4deeb9fb
6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.")
kvn
parents:
196
diff
changeset
|
3217 } |
564 | 3218 if (match_option(option, "-XX:+IgnoreUnrecognizedVMOptions", &tail)) { |
3219 IgnoreUnrecognizedVMOptions = true; | |
3220 } | |
3221 if (match_option(option, "-XX:-IgnoreUnrecognizedVMOptions", &tail)) { | |
3222 IgnoreUnrecognizedVMOptions = false; | |
3223 } | |
1150 | 3224 if (match_option(option, "-XX:+PrintFlagsInitial", &tail)) { |
4773 | 3225 CommandLineFlags::printFlags(tty, false); |
1150 | 3226 vm_exit(0); |
3227 } | |
6197 | 3228 if (match_option(option, "-XX:NativeMemoryTracking", &tail)) { |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3229 #if INCLUDE_NMT |
6197 | 3230 MemTracker::init_tracking_options(tail); |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3231 #else |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3232 warning("Native Memory Tracking is not supported in this VM"); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3233 #endif |
6197 | 3234 } |
3235 | |
1768
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3236 |
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3237 #ifndef PRODUCT |
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3238 if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) { |
4773 | 3239 CommandLineFlags::printFlags(tty, true); |
1768
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3240 vm_exit(0); |
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3241 } |
6ee479178066
6979444: add command line option to print command line flags descriptions
ikrylov
parents:
1745
diff
changeset
|
3242 #endif |
564 | 3243 } |
3244 | |
3245 if (IgnoreUnrecognizedVMOptions) { | |
3246 // uncast const to modify the flag args->ignoreUnrecognized | |
3247 *(jboolean*)(&args->ignoreUnrecognized) = true; | |
3248 } | |
3249 | |
3250 // Parse specified settings file | |
3251 if (settings_file_specified) { | |
3252 if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) { | |
3253 return JNI_EINVAL; | |
3254 } | |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3255 } else { |
6150
1e76463170b3
7110720: Issue with vm config file loadingIssue with vm config file loading
kamg
parents:
4780
diff
changeset
|
3256 #ifdef ASSERT |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3257 // Parse default .hotspotrc settings file |
0 | 3258 if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) { |
3259 return JNI_EINVAL; | |
3260 } | |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3261 #else |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3262 struct stat buf; |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3263 if (os::stat(hotspotrc, &buf) == 0) { |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3264 needs_hotspotrc_warning = true; |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3265 } |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3266 #endif |
0 | 3267 } |
3268 | |
3269 if (PrintVMOptions) { | |
3270 for (index = 0; index < args->nOptions; index++) { | |
3271 const JavaVMOption *option = args->options + index; | |
3272 if (match_option(option, "-XX:", &tail)) { | |
3273 logOption(tail); | |
3274 } | |
3275 } | |
3276 } | |
3277 | |
3278 // Parse JavaVMInitArgs structure passed in, as well as JAVA_TOOL_OPTIONS and _JAVA_OPTIONS | |
3279 jint result = parse_vm_init_args(args); | |
3280 if (result != JNI_OK) { | |
3281 return result; | |
3282 } | |
3283 | |
6196
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3284 // Delay warning until here so that we've had a chance to process |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3285 // the -XX:-PrintWarnings flag |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3286 if (needs_hotspotrc_warning) { |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3287 warning("%s file is present but has been ignored. " |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3288 "Run with -XX:Flags=%s to load the file.", |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3289 hotspotrc, hotspotrc); |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3290 } |
3759236eea14
7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used
kamg
parents:
6158
diff
changeset
|
3291 |
6055
35e504cb49a6
7167625: Adjustments for SE-Embedded build process
collins
parents:
6017
diff
changeset
|
3292 #if (defined JAVASE_EMBEDDED || defined ARM) |
3797
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3293 UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3294 #endif |
eb94b7226b7a
7061192: option handling adjustments for oracle and embedded builds
jcoomes
parents:
3769
diff
changeset
|
3295 |
6917
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
3296 #ifdef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD. |
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
3297 UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages"); |
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
3298 #endif |
e81fbc04a942
7191817: -XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
coleenp
parents:
6916
diff
changeset
|
3299 |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3300 #if !INCLUDE_ALTERNATE_GCS |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3301 if (UseParallelGC) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3302 warning("Parallel GC is not supported in this VM. Using Serial GC."); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3303 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3304 if (UseParallelOldGC) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3305 warning("Parallel Old GC is not supported in this VM. Using Serial GC."); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3306 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3307 if (UseConcMarkSweepGC) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3308 warning("Concurrent Mark Sweep GC is not supported in this VM. Using Serial GC."); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3309 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3310 if (UseParNewGC) { |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3311 warning("Par New GC is not supported in this VM. Using Serial GC."); |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3312 } |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3313 #endif // INCLUDE_ALTERNATE_GCS |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3314 |
0 | 3315 #ifndef PRODUCT |
3316 if (TraceBytecodesAt != 0) { | |
3317 TraceBytecodes = true; | |
3318 } | |
3319 if (CountCompiledCalls) { | |
3320 if (UseCounterDecay) { | |
3321 warning("UseCounterDecay disabled because CountCalls is set"); | |
3322 UseCounterDecay = false; | |
3323 } | |
3324 } | |
3325 #endif // PRODUCT | |
3326 | |
2416
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3327 // JSR 292 is not supported before 1.7 |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3328 if (!JDK_Version::is_gte_jdk17x_version()) { |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3329 if (EnableInvokeDynamic) { |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3330 if (!FLAG_IS_DEFAULT(EnableInvokeDynamic)) { |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3331 warning("JSR 292 is not supported before 1.7. Disabling support."); |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3332 } |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3333 EnableInvokeDynamic = false; |
710 | 3334 } |
3335 } | |
2416
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3336 |
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3337 if (EnableInvokeDynamic && ScavengeRootsInCode == 0) { |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
932
diff
changeset
|
3338 if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) { |
2416
38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
twisti
parents:
2378
diff
changeset
|
3339 warning("forcing ScavengeRootsInCode non-zero because EnableInvokeDynamic is true"); |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
932
diff
changeset
|
3340 } |
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
932
diff
changeset
|
3341 ScavengeRootsInCode = 1; |
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
932
diff
changeset
|
3342 } |
710 | 3343 |
0 | 3344 if (PrintGCDetails) { |
3345 // Turn on -verbose:gc options as well | |
3346 PrintGC = true; | |
3347 } | |
3348 | |
6064
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3349 if (!JDK_Version::is_gte_jdk18x_version()) { |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3350 // To avoid changing the log format for 7 updates this flag is only |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3351 // true by default in JDK8 and above. |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3352 if (FLAG_IS_DEFAULT(PrintGCCause)) { |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3353 FLAG_SET_DEFAULT(PrintGCCause, false); |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3354 } |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3355 } |
9d679effd28c
7166894: Add gc cause to GC logging for all collectors
brutisso
parents:
6017
diff
changeset
|
3356 |
1571
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
3357 // Set object alignment values. |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
3358 set_object_alignment(); |
2d127394260e
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents:
1506
diff
changeset
|
3359 |
0 | 3360 #ifdef SERIALGC |
1064 | 3361 force_serial_gc(); |
0 | 3362 #endif // SERIALGC |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3363 #if !INCLUDE_CDS |
0 | 3364 no_shared_spaces(); |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3365 #endif // INCLUDE_CDS |
0 | 3366 |
3367 // Set flags based on ergonomics. | |
3368 set_ergonomics_flags(); | |
3369 | |
2362
a2c2eac1ca62
7018056: large pages not always enabled by default
jcoomes
parents:
2302
diff
changeset
|
3370 set_shared_spaces_flags(); |
1135
e66fd840cb6b
6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents:
1131
diff
changeset
|
3371 |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3372 // Check the GC selections again. |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3373 if (!check_gc_consistency()) { |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3374 return JNI_EINVAL; |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3375 } |
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3376 |
1783 | 3377 if (TieredCompilation) { |
3378 set_tiered_flags(); | |
3379 } else { | |
3380 // Check if the policy is valid. Policies 0 and 1 are valid for non-tiered setup. | |
5176
af59b4dfc9e4
compilation queue changes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
5152
diff
changeset
|
3381 if (CompilationPolicyChoice >= 2 && CompilationPolicyChoice < 4) { |
1783 | 3382 vm_exit_during_initialization( |
3383 "Incompatible compilation policy selected", NULL); | |
3384 } | |
3385 } | |
3386 | |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3387 // Set heap size based on available physical memory |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3388 set_heap_size(); |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3389 |
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3390 #if INCLUDE_ALTERNATE_GCS |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3391 // Set per-collector flags |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3392 if (UseParallelGC || UseParallelOldGC) { |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3393 set_parallel_gc_flags(); |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3394 } else if (UseConcMarkSweepGC) { // should be done before ParNew check below |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3395 set_cms_and_parnew_gc_flags(); |
2368
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3396 } else if (UseParNewGC) { // skipped if CMS is set above |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3397 set_parnew_gc_flags(); |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3398 } else if (UseG1GC) { |
dde920245681
6896099: Integrate CMS heap ergo with default heap sizing ergo
ysr
parents:
2366
diff
changeset
|
3399 set_g1_gc_flags(); |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
3400 } |
6854
fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
jprovino
parents:
6818
diff
changeset
|
3401 #endif // INCLUDE_ALTERNATE_GCS |
10
28372612af5e
6362677: Change parallel GC collector default number of parallel GC threads.
jmasa
parents:
0
diff
changeset
|
3402 |
0 | 3403 #ifdef SERIALGC |
3404 assert(verify_serial_gc_flags(), "SerialGC unset"); | |
3405 #endif // SERIALGC | |
3406 | |
3407 // Set bytecode rewriting flags | |
3408 set_bytecode_flags(); | |
3409 | |
3410 // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled. | |
3411 set_aggressive_opts_flags(); | |
3412 | |
2239
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3413 // Turn off biased locking for locking debug mode flags, |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3414 // which are subtlely different from each other but neither works with |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3415 // biased locking. |
2331 | 3416 if (UseHeavyMonitors |
3417 #ifdef COMPILER1 | |
3418 || !UseFastLocking | |
3419 #endif // COMPILER1 | |
3420 ) { | |
2239
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3421 if (!FLAG_IS_DEFAULT(UseBiasedLocking) && UseBiasedLocking) { |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3422 // flag set to true on command line; warn the user that they |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3423 // can't enable biased locking here |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3424 warning("Biased Locking is not supported with locking debug flags" |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3425 "; ignoring UseBiasedLocking flag." ); |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3426 } |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3427 UseBiasedLocking = false; |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3428 } |
c08677f98289
6840152: JVM crashes when heavyweight monitors are used
coleenp
parents:
2176
diff
changeset
|
3429 |
0 | 3430 #ifdef CC_INTERP |
1131 | 3431 // Clear flags not supported by the C++ interpreter |
3432 FLAG_SET_DEFAULT(ProfileInterpreter, false); | |
0 | 3433 FLAG_SET_DEFAULT(UseBiasedLocking, false); |
1131 | 3434 LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedOops, false)); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6628
diff
changeset
|
3435 LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedKlassPointers, false)); |
1131 | 3436 #endif // CC_INTERP |
3437 | |
420
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3438 #ifdef COMPILER2 |
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3439 if (!UseBiasedLocking || EmitSync != 0) { |
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3440 UseOptoBiasInlining = false; |
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3441 } |
4777 | 3442 if (!EliminateLocks) { |
3443 EliminateNestedLocks = false; | |
3444 } | |
420
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3445 #endif |
a1980da045cc
6462850: generate biased locking code in C2 ideal graph
kvn
parents:
416
diff
changeset
|
3446 |
1155
4e6abf09f540
6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents:
1150
diff
changeset
|
3447 if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) { |
4e6abf09f540
6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents:
1150
diff
changeset
|
3448 warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output"); |
4e6abf09f540
6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents:
1150
diff
changeset
|
3449 DebugNonSafepoints = true; |
4e6abf09f540
6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents:
1150
diff
changeset
|
3450 } |
4e6abf09f540
6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents:
1150
diff
changeset
|
3451 |
1188
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3452 #ifndef PRODUCT |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3453 if (CompileTheWorld) { |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3454 // Force NmethodSweeper to sweep whole CodeCache each time. |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3455 if (FLAG_IS_DEFAULT(NmethodSweepFraction)) { |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3456 NmethodSweepFraction = 1; |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3457 } |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3458 } |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3459 #endif |
99af867dfa05
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
kvn
parents:
1161
diff
changeset
|
3460 |
0 | 3461 if (PrintCommandLineFlags) { |
4773 | 3462 CommandLineFlags::printSetFlags(tty); |
0 | 3463 } |
3464 | |
1681
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3465 // Apply CPU specific policy for the BiasedLocking |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3466 if (UseBiasedLocking) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3467 if (!VM_Version::use_biased_locking() && |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3468 !(FLAG_IS_CMDLINE(UseBiasedLocking))) { |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3469 UseBiasedLocking = false; |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3470 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3471 } |
126ea7725993
6953477: Increase portability and flexibility of building Hotspot
bobv
parents:
1679
diff
changeset
|
3472 |
2302
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3473 // set PauseAtExit if the gamma launcher was used and a debugger is attached |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3474 // but only if not already set on the commandline |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3475 if (Arguments::created_by_gamma_launcher() && os::is_debugger_attached()) { |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3476 bool set = false; |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3477 CommandLineFlags::wasSetOnCmdline("PauseAtExit", &set); |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3478 if (!set) { |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3479 FLAG_SET_DEFAULT(PauseAtExit, true); |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3480 } |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3481 } |
da091bb67459
7022037: Pause when exiting if debugger is attached on windows
sla
parents:
2243
diff
changeset
|
3482 |
0 | 3483 return JNI_OK; |
3484 } | |
3485 | |
3486 int Arguments::PropertyList_count(SystemProperty* pl) { | |
3487 int count = 0; | |
3488 while(pl != NULL) { | |
3489 count++; | |
3490 pl = pl->next(); | |
3491 } | |
3492 return count; | |
3493 } | |
3494 | |
3495 const char* Arguments::PropertyList_get_value(SystemProperty *pl, const char* key) { | |
3496 assert(key != NULL, "just checking"); | |
3497 SystemProperty* prop; | |
3498 for (prop = pl; prop != NULL; prop = prop->next()) { | |
3499 if (strcmp(key, prop->key()) == 0) return prop->value(); | |
3500 } | |
3501 return NULL; | |
3502 } | |
3503 | |
3504 const char* Arguments::PropertyList_get_key_at(SystemProperty *pl, int index) { | |
3505 int count = 0; | |
3506 const char* ret_val = NULL; | |
3507 | |
3508 while(pl != NULL) { | |
3509 if(count >= index) { | |
3510 ret_val = pl->key(); | |
3511 break; | |
3512 } | |
3513 count++; | |
3514 pl = pl->next(); | |
3515 } | |
3516 | |
3517 return ret_val; | |
3518 } | |
3519 | |
3520 char* Arguments::PropertyList_get_value_at(SystemProperty* pl, int index) { | |
3521 int count = 0; | |
3522 char* ret_val = NULL; | |
3523 | |
3524 while(pl != NULL) { | |
3525 if(count >= index) { | |
3526 ret_val = pl->value(); | |
3527 break; | |
3528 } | |
3529 count++; | |
3530 pl = pl->next(); | |
3531 } | |
3532 | |
3533 return ret_val; | |
3534 } | |
3535 | |
3536 void Arguments::PropertyList_add(SystemProperty** plist, SystemProperty *new_p) { | |
3537 SystemProperty* p = *plist; | |
3538 if (p == NULL) { | |
3539 *plist = new_p; | |
3540 } else { | |
3541 while (p->next() != NULL) { | |
3542 p = p->next(); | |
3543 } | |
3544 p->set_next(new_p); | |
3545 } | |
3546 } | |
3547 | |
3548 void Arguments::PropertyList_add(SystemProperty** plist, const char* k, char* v) { | |
3549 if (plist == NULL) | |
3550 return; | |
3551 | |
3552 SystemProperty* new_p = new SystemProperty(k, v, true); | |
3553 PropertyList_add(plist, new_p); | |
3554 } | |
3555 | |
3556 // This add maintains unique property key in the list. | |
691 | 3557 void Arguments::PropertyList_unique_add(SystemProperty** plist, const char* k, char* v, jboolean append) { |
0 | 3558 if (plist == NULL) |
3559 return; | |
3560 | |
3561 // If property key exist then update with new value. | |
3562 SystemProperty* prop; | |
3563 for (prop = *plist; prop != NULL; prop = prop->next()) { | |
3564 if (strcmp(k, prop->key()) == 0) { | |
691 | 3565 if (append) { |
3566 prop->append_value(v); | |
3567 } else { | |
3568 prop->set_value(v); | |
3569 } | |
0 | 3570 return; |
3571 } | |
3572 } | |
3573 | |
3574 PropertyList_add(plist, k, v); | |
3575 } | |
3576 | |
3577 #ifdef KERNEL | |
3578 char *Arguments::get_kernel_properties() { | |
3579 // Find properties starting with kernel and append them to string | |
3580 // We need to find out how long they are first because the URL's that they | |
3581 // might point to could get long. | |
3582 int length = 0; | |
3583 SystemProperty* prop; | |
3584 for (prop = _system_properties; prop != NULL; prop = prop->next()) { | |
3585 if (strncmp(prop->key(), "kernel.", 7 ) == 0) { | |
3586 length += (strlen(prop->key()) + strlen(prop->value()) + 5); // "-D =" | |
3587 } | |
3588 } | |
3589 // Add one for null terminator. | |
6197 | 3590 char *props = AllocateHeap(length + 1, mtInternal); |
0 | 3591 if (length != 0) { |
3592 int pos = 0; | |
3593 for (prop = _system_properties; prop != NULL; prop = prop->next()) { | |
3594 if (strncmp(prop->key(), "kernel.", 7 ) == 0) { | |
3595 jio_snprintf(&props[pos], length-pos, | |
3596 "-D%s=%s ", prop->key(), prop->value()); | |
3597 pos = strlen(props); | |
3598 } | |
3599 } | |
3600 } | |
3601 // null terminate props in case of null | |
3602 props[length] = '\0'; | |
3603 return props; | |
3604 } | |
3605 #endif // KERNEL | |
3606 | |
3607 // Copies src into buf, replacing "%%" with "%" and "%p" with pid | |
3608 // Returns true if all of the source pointed by src has been copied over to | |
3609 // the destination buffer pointed by buf. Otherwise, returns false. | |
3610 // Notes: | |
3611 // 1. If the length (buflen) of the destination buffer excluding the | |
3612 // NULL terminator character is not long enough for holding the expanded | |
3613 // pid characters, it also returns false instead of returning the partially | |
3614 // expanded one. | |
3615 // 2. The passed in "buflen" should be large enough to hold the null terminator. | |
3616 bool Arguments::copy_expand_pid(const char* src, size_t srclen, | |
3617 char* buf, size_t buflen) { | |
3618 const char* p = src; | |
3619 char* b = buf; | |
3620 const char* src_end = &src[srclen]; | |
3621 char* buf_end = &buf[buflen - 1]; | |
3622 | |
3623 while (p < src_end && b < buf_end) { | |
3624 if (*p == '%') { | |
3625 switch (*(++p)) { | |
3626 case '%': // "%%" ==> "%" | |
3627 *b++ = *p++; | |
3628 break; | |
3629 case 'p': { // "%p" ==> current process id | |
3630 // buf_end points to the character before the last character so | |
3631 // that we could write '\0' to the end of the buffer. | |
3632 size_t buf_sz = buf_end - b + 1; | |
3633 int ret = jio_snprintf(b, buf_sz, "%d", os::current_process_id()); | |
3634 | |
3635 // if jio_snprintf fails or the buffer is not long enough to hold | |
3636 // the expanded pid, returns false. | |
3637 if (ret < 0 || ret >= (int)buf_sz) { | |
3638 return false; | |
3639 } else { | |
3640 b += ret; | |
3641 assert(*b == '\0', "fail in copy_expand_pid"); | |
3642 if (p == src_end && b == buf_end + 1) { | |
3643 // reach the end of the buffer. | |
3644 return true; | |
3645 } | |
3646 } | |
3647 p++; | |
3648 break; | |
3649 } | |
3650 default : | |
3651 *b++ = '%'; | |
3652 } | |
3653 } else { | |
3654 *b++ = *p++; | |
3655 } | |
3656 } | |
3657 *b = '\0'; | |
3658 return (p == src_end); // return false if not all of the source was copied | |
3659 } |