annotate src/share/vm/runtime/arguments.cpp @ 7062:8c5333c80cfd

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