annotate src/share/vm/runtime/arguments.cpp @ 1721:413ad0331a0c

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