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