提交 00c51f7a 编写于 作者: J jcoomes

7018056: large pages not always enabled by default

Reviewed-by: phh, kvn
上级 76f2e04b
...@@ -242,6 +242,7 @@ static ObsoleteFlag obsolete_jvm_flags[] = { ...@@ -242,6 +242,7 @@ static ObsoleteFlag obsolete_jvm_flags[] = {
JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) }, JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) },
{ "MaxLiveObjectEvacuationRatio", { "MaxLiveObjectEvacuationRatio",
JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) }, JDK_Version::jdk_update(6,24), JDK_Version::jdk(8) },
{ "ForceSharedSpaces", JDK_Version::jdk_update(6,25), JDK_Version::jdk(8) },
{ NULL, JDK_Version(0), JDK_Version(0) } { NULL, JDK_Version(0), JDK_Version(0) }
}; };
...@@ -1003,28 +1004,6 @@ static void no_shared_spaces() { ...@@ -1003,28 +1004,6 @@ static void no_shared_spaces() {
} }
} }
void Arguments::check_compressed_oops_compat() {
#ifdef _LP64
assert(UseCompressedOops, "Precondition");
// Is it on by default or set on ergonomically
bool is_on_by_default = FLAG_IS_DEFAULT(UseCompressedOops) || FLAG_IS_ERGO(UseCompressedOops);
// If dumping an archive or forcing its use, disable compressed oops if possible
if (DumpSharedSpaces || RequireSharedSpaces) {
if (is_on_by_default) {
FLAG_SET_DEFAULT(UseCompressedOops, false);
return;
} else {
vm_exit_during_initialization(
"Class Data Sharing is not supported with compressed oops yet", NULL);
}
} else if (UseSharedSpaces) {
// UseSharedSpaces is on by default. With compressed oops, we turn it off.
FLAG_SET_DEFAULT(UseSharedSpaces, false);
}
#endif
}
void Arguments::set_tiered_flags() { void Arguments::set_tiered_flags() {
if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) { if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) {
FLAG_SET_DEFAULT(CompilationPolicyChoice, 2); FLAG_SET_DEFAULT(CompilationPolicyChoice, 2);
...@@ -1382,7 +1361,7 @@ bool Arguments::should_auto_select_low_pause_collector() { ...@@ -1382,7 +1361,7 @@ bool Arguments::should_auto_select_low_pause_collector() {
void Arguments::set_ergonomics_flags() { void Arguments::set_ergonomics_flags() {
// Parallel GC is not compatible with sharing. If one specifies // Parallel GC is not compatible with sharing. If one specifies
// that they want sharing explicitly, do not set ergonomics flags. // that they want sharing explicitly, do not set ergonomics flags.
if (DumpSharedSpaces || ForceSharedSpaces) { if (DumpSharedSpaces || RequireSharedSpaces) {
return; return;
} }
...@@ -1845,33 +1824,6 @@ bool Arguments::check_vm_args_consistency() { ...@@ -1845,33 +1824,6 @@ bool Arguments::check_vm_args_consistency() {
status = status && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit"); status = status && verify_percentage(GCHeapFreeLimit, "GCHeapFreeLimit");
// Check whether user-specified sharing option conflicts with GC or page size.
// Both sharing and large pages are enabled by default on some platforms;
// large pages override sharing only if explicitly set on the command line.
const bool cannot_share = UseConcMarkSweepGC || CMSIncrementalMode ||
UseG1GC || UseParNewGC || UseParallelGC || UseParallelOldGC ||
UseLargePages && FLAG_IS_CMDLINE(UseLargePages);
if (cannot_share) {
// Either force sharing on by forcing the other options off, or
// force sharing off.
if (DumpSharedSpaces || ForceSharedSpaces) {
jio_fprintf(defaultStream::error_stream(),
"Using Serial GC and default page size because of %s\n",
ForceSharedSpaces ? "-Xshare:on" : "-Xshare:dump");
force_serial_gc();
FLAG_SET_DEFAULT(UseLargePages, false);
} else {
if (UseSharedSpaces && Verbose) {
jio_fprintf(defaultStream::error_stream(),
"Turning off use of shared archive because of "
"choice of garbage collector or large pages\n");
}
no_shared_spaces();
}
} else if (UseLargePages && (UseSharedSpaces || DumpSharedSpaces)) {
FLAG_SET_DEFAULT(UseLargePages, false);
}
status = status && check_gc_consistency(); status = status && check_gc_consistency();
status = status && check_stack_pages(); status = status && check_stack_pages();
...@@ -2412,9 +2364,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, ...@@ -2412,9 +2364,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
} else if (match_option(option, "-Xshare:on", &tail)) { } else if (match_option(option, "-Xshare:on", &tail)) {
FLAG_SET_CMDLINE(bool, UseSharedSpaces, true); FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
FLAG_SET_CMDLINE(bool, RequireSharedSpaces, true); FLAG_SET_CMDLINE(bool, RequireSharedSpaces, true);
#ifdef TIERED
FLAG_SET_CMDLINE(bool, ForceSharedSpaces, true);
#endif // TIERED
// -Xshare:auto // -Xshare:auto
} else if (match_option(option, "-Xshare:auto", &tail)) { } else if (match_option(option, "-Xshare:auto", &tail)) {
FLAG_SET_CMDLINE(bool, UseSharedSpaces, true); FLAG_SET_CMDLINE(bool, UseSharedSpaces, true);
...@@ -2915,6 +2864,36 @@ jint Arguments::parse_options_environment_variable(const char* name, SysClassPat ...@@ -2915,6 +2864,36 @@ jint Arguments::parse_options_environment_variable(const char* name, SysClassPat
return JNI_OK; return JNI_OK;
} }
void Arguments::set_shared_spaces_flags() {
// Check whether class data sharing settings conflict with GC, compressed oops
// or page size, and fix them up. Explicit sharing options override other
// settings.
const bool cannot_share = UseConcMarkSweepGC || CMSIncrementalMode ||
UseG1GC || UseParNewGC || UseParallelGC || UseParallelOldGC ||
UseCompressedOops || UseLargePages && FLAG_IS_CMDLINE(UseLargePages);
const bool must_share = DumpSharedSpaces || RequireSharedSpaces;
const bool might_share = must_share || UseSharedSpaces;
if (cannot_share) {
if (must_share) {
warning("selecting serial gc and disabling large pages %s"
"because of %s", "" LP64_ONLY("and compressed oops "),
DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on");
force_serial_gc();
FLAG_SET_CMDLINE(bool, UseLargePages, false);
LP64_ONLY(FLAG_SET_CMDLINE(bool, UseCompressedOops, false));
} else {
if (UseSharedSpaces && Verbose) {
warning("turning off use of shared archive because of "
"choice of garbage collector or large pages");
}
no_shared_spaces();
}
} else if (UseLargePages && might_share) {
// Disable large pages to allow shared spaces. This is sub-optimal, since
// there may not even be a shared archive to use.
FLAG_SET_DEFAULT(UseLargePages, false);
}
}
// Parse entry point called from JNI_CreateJavaVM // Parse entry point called from JNI_CreateJavaVM
...@@ -3062,9 +3041,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) { ...@@ -3062,9 +3041,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
// Set flags based on ergonomics. // Set flags based on ergonomics.
set_ergonomics_flags(); set_ergonomics_flags();
if (UseCompressedOops) { set_shared_spaces_flags();
check_compressed_oops_compat();
}
// Check the GC selections again. // Check the GC selections again.
if (!check_gc_consistency()) { if (!check_gc_consistency()) {
......
...@@ -301,8 +301,6 @@ class Arguments : AllStatic { ...@@ -301,8 +301,6 @@ class Arguments : AllStatic {
// Tiered // Tiered
static void set_tiered_flags(); static void set_tiered_flags();
// Check compressed oops compatibility with other flags
static void check_compressed_oops_compat();
// CMS/ParNew garbage collectors // CMS/ParNew garbage collectors
static void set_parnew_gc_flags(); static void set_parnew_gc_flags();
static void set_cms_and_parnew_gc_flags(); static void set_cms_and_parnew_gc_flags();
...@@ -312,6 +310,7 @@ class Arguments : AllStatic { ...@@ -312,6 +310,7 @@ class Arguments : AllStatic {
static void set_g1_gc_flags(); static void set_g1_gc_flags();
// GC ergonomics // GC ergonomics
static void set_ergonomics_flags(); static void set_ergonomics_flags();
static void set_shared_spaces_flags();
// Setup heap size // Setup heap size
static void set_heap_size(); static void set_heap_size();
// Based on automatic selection criteria, should the // Based on automatic selection criteria, should the
......
...@@ -3656,9 +3656,6 @@ class CommandLineFlags { ...@@ -3656,9 +3656,6 @@ class CommandLineFlags {
product(bool, RequireSharedSpaces, false, \ product(bool, RequireSharedSpaces, false, \
"Require shared spaces in the permanent generation") \ "Require shared spaces in the permanent generation") \
\ \
product(bool, ForceSharedSpaces, false, \
"Require shared spaces in the permanent generation") \
\
product(bool, DumpSharedSpaces, false, \ product(bool, DumpSharedSpaces, false, \
"Special mode: JVM reads a class list, loads classes, builds " \ "Special mode: JVM reads a class list, loads classes, builds " \
"shared spaces, and dumps the shared spaces to a file to be " \ "shared spaces, and dumps the shared spaces to a file to be " \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册