hotspot/src/share/vm/runtime/arguments.cpp
changeset 44203 d2d435372329
parent 43972 1ade39b8381b
parent 43607 015723e36620
child 44470 d10b1eca0b45
child 46367 6e532778cb35
equal deleted inserted replaced
44080:56713dcfe871 44203:d2d435372329
   373 // - All expired options should be removed from the table.
   373 // - All expired options should be removed from the table.
   374 static SpecialFlag const special_jvm_flags[] = {
   374 static SpecialFlag const special_jvm_flags[] = {
   375   // -------------- Deprecated Flags --------------
   375   // -------------- Deprecated Flags --------------
   376   // --- Non-alias flags - sorted by obsolete_in then expired_in:
   376   // --- Non-alias flags - sorted by obsolete_in then expired_in:
   377   { "MaxGCMinorPauseMillis",        JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() },
   377   { "MaxGCMinorPauseMillis",        JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() },
   378   { "AutoGCSelectPauseMillis",      JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   379   { "UseAutoGCSelectPolicy",        JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   380   { "UseParNewGC",                  JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   381   { "ExplicitGCInvokesConcurrentAndUnloadsClasses", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   382   { "ConvertSleepToYield",          JDK_Version::jdk(9), JDK_Version::jdk(10),     JDK_Version::jdk(11) },
       
   383   { "ConvertYieldToSleep",          JDK_Version::jdk(9), JDK_Version::jdk(10),     JDK_Version::jdk(11) },
       
   384 
   378 
   385   // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in:
   379   // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in:
   386   { "DefaultMaxRAMFraction",        JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() },
   380   { "DefaultMaxRAMFraction",        JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() },
   387   { "CreateMinidumpOnCrash",        JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() },
   381   { "CreateMinidumpOnCrash",        JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() },
   388   { "CMSMarkStackSizeMax",          JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   389   { "CMSMarkStackSize",             JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   390   { "G1MarkStackSize",              JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   391   { "ParallelMarkingThreads",       JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   392   { "ParallelCMSThreads",           JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) },
       
   393 
   382 
   394   // -------------- Obsolete Flags - sorted by expired_in --------------
   383   // -------------- Obsolete Flags - sorted by expired_in --------------
   395   { "UseOldInlining",                JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
   384   { "ConvertSleepToYield",           JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
   396   { "SafepointPollOffset",           JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
   385   { "ConvertYieldToSleep",           JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
   397   { "UseBoundThreads",               JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
   386   { "MinSleepInterval",              JDK_Version::jdk(9),      JDK_Version::jdk(10), JDK_Version::jdk(11) },
   398   { "DefaultThreadPriority",         JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
   387   { "PermSize",                      JDK_Version::undefined(), JDK_Version::jdk(8),  JDK_Version::undefined() },
   399   { "NoYieldsInMicrolock",           JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
   388   { "MaxPermSize",                   JDK_Version::undefined(), JDK_Version::jdk(8),  JDK_Version::undefined() },
   400   { "BackEdgeThreshold",             JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   401   { "UseNewReflection",              JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   402   { "ReflectionWrapResolutionErrors",JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   403   { "VerifyReflectionBytecodes",     JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   404   { "AutoShutdownNMT",               JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   405   { "NmethodSweepFraction",          JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   406   { "NmethodSweepCheckInterval",     JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   407   { "CodeCacheMinimumFreeSpace",     JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   408 #ifndef ZERO
       
   409   { "UseFastAccessorMethods",        JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   410   { "UseFastEmptyMethods",           JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   411 #endif // ZERO
       
   412   { "UseCompilerSafepoints",         JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   413   { "AdaptiveSizePausePolicy",       JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   414   { "ParallelGCRetainPLAB",          JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   415   { "ThreadSafetyMargin",            JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   416   { "LazyBootClassLoader",           JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   417   { "StarvationMonitorInterval",     JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   418   { "PreInflateSpin",                JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   419   { "JNIDetachReleasesMonitors",     JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   420   { "UseAltSigs",                    JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   421   { "SegmentedHeapDumpThreshold",    JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   422   { "PrintOopAddress",               JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) },
       
   423   { "PermSize",                      JDK_Version::undefined(), JDK_Version::jdk(8), JDK_Version::jdk(10) },
       
   424   { "MaxPermSize",                   JDK_Version::undefined(), JDK_Version::jdk(8), JDK_Version::jdk(10) },
       
   425 
   389 
   426 #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
   390 #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
   427   { "dep > obs",                    JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() },
   391   { "dep > obs",                    JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() },
   428   { "dep > exp ",                   JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(8) },
   392   { "dep > exp ",                   JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(8) },
   429   { "obs > exp ",                   JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(8) },
   393   { "obs > exp ",                   JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(8) },
   442   const char* real_name;
   406   const char* real_name;
   443 } AliasedFlag;
   407 } AliasedFlag;
   444 
   408 
   445 static AliasedFlag const aliased_jvm_flags[] = {
   409 static AliasedFlag const aliased_jvm_flags[] = {
   446   { "DefaultMaxRAMFraction",    "MaxRAMFraction"    },
   410   { "DefaultMaxRAMFraction",    "MaxRAMFraction"    },
   447   { "CMSMarkStackSizeMax",      "MarkStackSizeMax"  },
       
   448   { "CMSMarkStackSize",         "MarkStackSize"     },
       
   449   { "G1MarkStackSize",          "MarkStackSize"     },
       
   450   { "ParallelMarkingThreads",   "ConcGCThreads"     },
       
   451   { "ParallelCMSThreads",       "ConcGCThreads"     },
       
   452   { "CreateMinidumpOnCrash",    "CreateCoredumpOnCrash" },
   411   { "CreateMinidumpOnCrash",    "CreateCoredumpOnCrash" },
   453   { NULL, NULL}
   412   { NULL, NULL}
   454 };
   413 };
   455 
   414 
   456 // NOTE: A compatibility request will be necessary for each alias to be removed.
   415 // NOTE: A compatibility request will be necessary for each alias to be removed.
  1545 
  1504 
  1546 void Arguments::set_parnew_gc_flags() {
  1505 void Arguments::set_parnew_gc_flags() {
  1547   assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC,
  1506   assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC,
  1548          "control point invariant");
  1507          "control point invariant");
  1549   assert(UseConcMarkSweepGC, "CMS is expected to be on here");
  1508   assert(UseConcMarkSweepGC, "CMS is expected to be on here");
  1550   assert(UseParNewGC, "ParNew should always be used with CMS");
       
  1551 
  1509 
  1552   if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
  1510   if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
  1553     FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads());
  1511     FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads());
  1554     assert(ParallelGCThreads > 0, "We should always have at least one thread by default");
  1512     assert(ParallelGCThreads > 0, "We should always have at least one thread by default");
  1555   } else if (ParallelGCThreads == 0) {
  1513   } else if (ParallelGCThreads == 0) {
  1586 // further optimization and tuning efforts, and would almost
  1544 // further optimization and tuning efforts, and would almost
  1587 // certainly gain from analysis of platform and environment.
  1545 // certainly gain from analysis of platform and environment.
  1588 void Arguments::set_cms_and_parnew_gc_flags() {
  1546 void Arguments::set_cms_and_parnew_gc_flags() {
  1589   assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error");
  1547   assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC, "Error");
  1590   assert(UseConcMarkSweepGC, "CMS is expected to be on here");
  1548   assert(UseConcMarkSweepGC, "CMS is expected to be on here");
  1591   assert(UseParNewGC, "ParNew should always be used with CMS");
       
  1592 
  1549 
  1593   // Turn off AdaptiveSizePolicy by default for cms until it is complete.
  1550   // Turn off AdaptiveSizePolicy by default for cms until it is complete.
  1594   disable_adaptive_size_policy("UseConcMarkSweepGC");
  1551   disable_adaptive_size_policy("UseConcMarkSweepGC");
  1595 
  1552 
  1596   set_parnew_gc_flags();
  1553   set_parnew_gc_flags();
  1726 
  1683 
  1727   LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page);
  1684   LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page);
  1728   NOT_LP64(ShouldNotReachHere(); return 0);
  1685   NOT_LP64(ShouldNotReachHere(); return 0);
  1729 }
  1686 }
  1730 
  1687 
  1731 bool Arguments::should_auto_select_low_pause_collector() {
       
  1732   if (UseAutoGCSelectPolicy &&
       
  1733       !FLAG_IS_DEFAULT(MaxGCPauseMillis) &&
       
  1734       (MaxGCPauseMillis <= AutoGCSelectPauseMillis)) {
       
  1735     log_trace(gc)("Automatic selection of the low pause collector based on pause goal of %d (ms)", (int) MaxGCPauseMillis);
       
  1736     return true;
       
  1737   }
       
  1738   return false;
       
  1739 }
       
  1740 
       
  1741 void Arguments::set_use_compressed_oops() {
  1688 void Arguments::set_use_compressed_oops() {
  1742 #ifndef ZERO
  1689 #ifndef ZERO
  1743 #ifdef _LP64
  1690 #ifdef _LP64
  1744   // MaxHeapSize is not set up properly at this point, but
  1691   // MaxHeapSize is not set up properly at this point, but
  1745   // the only value that can override MaxHeapSize if we are
  1692   // the only value that can override MaxHeapSize if we are
  1839 #endif //TIERED
  1786 #endif //TIERED
  1840 
  1787 
  1841 void Arguments::select_gc_ergonomically() {
  1788 void Arguments::select_gc_ergonomically() {
  1842 #if INCLUDE_ALL_GCS
  1789 #if INCLUDE_ALL_GCS
  1843   if (os::is_server_class_machine()) {
  1790   if (os::is_server_class_machine()) {
  1844     if (!UseAutoGCSelectPolicy) {
  1791     FLAG_SET_ERGO_IF_DEFAULT(bool, UseG1GC, true);
  1845        FLAG_SET_ERGO_IF_DEFAULT(bool, UseG1GC, true);
       
  1846     } else {
       
  1847       if (should_auto_select_low_pause_collector()) {
       
  1848         FLAG_SET_ERGO_IF_DEFAULT(bool, UseConcMarkSweepGC, true);
       
  1849         FLAG_SET_ERGO_IF_DEFAULT(bool, UseParNewGC, true);
       
  1850       } else {
       
  1851         FLAG_SET_ERGO_IF_DEFAULT(bool, UseParallelGC, true);
       
  1852       }
       
  1853     }
       
  1854   } else {
  1792   } else {
  1855     FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
  1793     FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
  1856   }
  1794   }
  1857 #else
  1795 #else
  1858   UNSUPPORTED_OPTION(UseG1GC);
  1796   UNSUPPORTED_OPTION(UseG1GC);
  1859   UNSUPPORTED_OPTION(UseParallelGC);
  1797   UNSUPPORTED_OPTION(UseParallelGC);
  1860   UNSUPPORTED_OPTION(UseParallelOldGC);
  1798   UNSUPPORTED_OPTION(UseParallelOldGC);
  1861   UNSUPPORTED_OPTION(UseConcMarkSweepGC);
  1799   UNSUPPORTED_OPTION(UseConcMarkSweepGC);
  1862   UNSUPPORTED_OPTION(UseParNewGC);
       
  1863   FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
  1800   FLAG_SET_ERGO_IF_DEFAULT(bool, UseSerialGC, true);
  1864 #endif // INCLUDE_ALL_GCS
  1801 #endif // INCLUDE_ALL_GCS
  1865 }
  1802 }
  1866 
  1803 
  1867 void Arguments::select_gc() {
  1804 void Arguments::select_gc() {
  2076 
  2013 
  2077   // If class unloading is disabled, also disable concurrent class unloading.
  2014   // If class unloading is disabled, also disable concurrent class unloading.
  2078   if (!ClassUnloading) {
  2015   if (!ClassUnloading) {
  2079     FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false);
  2016     FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false);
  2080     FLAG_SET_CMDLINE(bool, ClassUnloadingWithConcurrentMark, false);
  2017     FLAG_SET_CMDLINE(bool, ClassUnloadingWithConcurrentMark, false);
  2081     FLAG_SET_CMDLINE(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false);
       
  2082   }
  2018   }
  2083 #endif // INCLUDE_ALL_GCS
  2019 #endif // INCLUDE_ALL_GCS
  2084 }
  2020 }
  2085 
  2021 
  2086 julong Arguments::limit_by_allocatable_memory(julong limit) {
  2022 julong Arguments::limit_by_allocatable_memory(julong limit) {
  2428   if (i > 1) {
  2364   if (i > 1) {
  2429     jio_fprintf(defaultStream::error_stream(),
  2365     jio_fprintf(defaultStream::error_stream(),
  2430                 "Conflicting collector combinations in option list; "
  2366                 "Conflicting collector combinations in option list; "
  2431                 "please refer to the release notes for the combinations "
  2367                 "please refer to the release notes for the combinations "
  2432                 "allowed\n");
  2368                 "allowed\n");
  2433     return false;
       
  2434   }
       
  2435 
       
  2436   if (UseConcMarkSweepGC && !UseParNewGC) {
       
  2437     jio_fprintf(defaultStream::error_stream(),
       
  2438         "It is not possible to combine the DefNew young collector with the CMS collector.\n");
       
  2439     return false;
       
  2440   }
       
  2441 
       
  2442   if (UseParNewGC && !UseConcMarkSweepGC) {
       
  2443     jio_fprintf(defaultStream::error_stream(),
       
  2444         "It is not possible to combine the ParNew young collector with any collector other than CMS.\n");
       
  2445     return false;
  2369     return false;
  2446   }
  2370   }
  2447 
  2371 
  2448   return true;
  2372   return true;
  2449 }
  2373 }
  3729         }
  3653         }
  3730       }
  3654       }
  3731     }
  3655     }
  3732   }
  3656   }
  3733 
  3657 
  3734   if (UseConcMarkSweepGC && FLAG_IS_DEFAULT(UseParNewGC) && !UseParNewGC) {
       
  3735     // CMS can only be used with ParNew
       
  3736     FLAG_SET_ERGO(bool, UseParNewGC, true);
       
  3737   }
       
  3738 
       
  3739   if (!check_vm_args_consistency()) {
  3658   if (!check_vm_args_consistency()) {
  3740     return JNI_ERR;
  3659     return JNI_ERR;
  3741   }
  3660   }
  3742 
  3661 
  3743 #if INCLUDE_JVMCI
  3662 #if INCLUDE_JVMCI