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