annotate src/share/vm/runtime/arguments.cpp @ 10185:d50cc62e94ff

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