--- old/src/share/vm/runtime/arguments.cpp 2016-03-21 13:54:04.772476795 +0100 +++ new/src/share/vm/runtime/arguments.cpp 2016-03-21 13:54:04.573468439 +0100 @@ -66,15 +66,15 @@ #define DEFAULT_VENDOR_URL_BUG "http://bugreport.java.com/bugreport/crash.jsp" #define DEFAULT_JAVA_LAUNCHER "generic" -#define UNSUPPORTED_GC_OPTION(gc) \ -do { \ - if (gc) { \ - if (FLAG_IS_CMDLINE(gc)) { \ - warning(#gc " is not supported in this VM. Using Serial GC."); \ - } \ - FLAG_SET_DEFAULT(gc, false); \ - } \ -} while(0) +#define UNSUPPORTED_GC_OPTION(gc) \ + do { \ + if (gc) { \ + if (FLAG_IS_CMDLINE(gc)) { \ + warning("-XX:+" #gc " not supported in this VM"); \ + } \ + FLAG_SET_DEFAULT(gc, false); \ + } \ + } while(0) char* Arguments::_jvm_flags_file = NULL; char** Arguments::_jvm_flags_array = NULL; @@ -1834,26 +1834,45 @@ CollectorPolicy::compute_heap_alignment()); } +bool Arguments::gc_selected() { +#if INCLUDE_ALL_GCS + return UseSerialGC || UseParallelGC || UseParallelOldGC || UseConcMarkSweepGC || UseG1GC; +#else + return UseSerialGC; +#endif // INCLUDE_ALL_GCS +} + void Arguments::select_gc_ergonomically() { +#if INCLUDE_ALL_GCS if (os::is_server_class_machine()) { if (should_auto_select_low_pause_collector()) { - FLAG_SET_ERGO(bool, UseConcMarkSweepGC, true); + FLAG_SET_ERGO_IF_DEFAULT(bool, UseConcMarkSweepGC, true); } else { #if defined(JAVASE_EMBEDDED) - FLAG_SET_ERGO(bool, UseParallelGC, true); + FLAG_SET_ERGO_IF_DEFAULT(bool, UseParallelGC, true); #else - FLAG_SET_ERGO(bool, UseG1GC, true); + FLAG_SET_ERGO_IF_DEFAULT(bool, UseG1GC, true); #endif } } else { - FLAG_SET_ERGO(bool, UseSerialGC, true); + FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true); } +#else + UNSUPPORTED_GC_OPTION(UseG1GC); + UNSUPPORTED_GC_OPTION(UseParallelGC); + UNSUPPORTED_GC_OPTION(UseParallelOldGC); + UNSUPPORTED_GC_OPTION(UseConcMarkSweepGC); + UNSUPPORTED_GC_OPTION(UseParNewGC); + FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true); +#endif // INCLUDE_ALL_GCS } void Arguments::select_gc() { if (!gc_selected()) { select_gc_ergonomically(); - guarantee(gc_selected(), "No GC selected"); + if (!gc_selected()) { + vm_exit_during_initialization("Garbage collector not selected (default collector explicitly disabled)", NULL); + } } } @@ -1978,16 +1997,6 @@ log_trace(gc)("ConcGCThreads: %u", ConcGCThreads); } -#if !INCLUDE_ALL_GCS -#ifdef ASSERT -static bool verify_serial_gc_flags() { - return (UseSerialGC && - !(UseParNewGC || (UseConcMarkSweepGC) || UseG1GC || - UseParallelGC || UseParallelOldGC)); -} -#endif // ASSERT -#endif // INCLUDE_ALL_GCS - void Arguments::set_gc_specific_flags() { #if INCLUDE_ALL_GCS // Set per-collector flags @@ -2009,8 +2018,6 @@ // Keeping the heap 100% free is hard ;-) so limit it to 99%. FLAG_SET_ERGO(uintx, MinHeapFreeRatio, 99); } -#else // INCLUDE_ALL_GCS - assert(verify_serial_gc_flags(), "SerialGC unset"); #endif // INCLUDE_ALL_GCS } @@ -3786,17 +3793,6 @@ } } -#if !INCLUDE_ALL_GCS -static void force_serial_gc() { - FLAG_SET_DEFAULT(UseSerialGC, true); - UNSUPPORTED_GC_OPTION(UseG1GC); - UNSUPPORTED_GC_OPTION(UseParallelGC); - UNSUPPORTED_GC_OPTION(UseParallelOldGC); - UNSUPPORTED_GC_OPTION(UseConcMarkSweepGC); - UNSUPPORTED_GC_OPTION(UseParNewGC); -} -#endif // INCLUDE_ALL_GCS - // Sharing support // Construct the path to the archive static char* get_shared_archive_path() { @@ -4191,9 +4187,6 @@ // Set object alignment values. set_object_alignment(); -#if !INCLUDE_ALL_GCS - force_serial_gc(); -#endif // INCLUDE_ALL_GCS #if !INCLUDE_CDS if (DumpSharedSpaces || RequireSharedSpaces) { jio_fprintf(defaultStream::error_stream(),