annotate src/share/vm/runtime/arguments.cpp @ 2368:dde920245681

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