annotate src/share/vm/runtime/arguments.cpp @ 1091:6aa7255741f3

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