< prev index next >

src/hotspot/share/runtime/arguments.cpp

Print this page

  37 #include "gc/shared/gcConfig.hpp"
  38 #include "gc/shared/stringdedup/stringDedup.hpp"
  39 #include "gc/shared/tlab_globals.hpp"
  40 #include "jvm.h"
  41 #include "logging/log.hpp"
  42 #include "logging/logConfiguration.hpp"
  43 #include "logging/logStream.hpp"
  44 #include "logging/logTag.hpp"
  45 #include "memory/allocation.inline.hpp"
  46 #include "nmt/nmtCommon.hpp"
  47 #include "oops/compressedKlass.hpp"
  48 #include "oops/instanceKlass.hpp"
  49 #include "oops/objLayout.hpp"
  50 #include "oops/oop.inline.hpp"
  51 #include "prims/jvmtiAgentList.hpp"
  52 #include "prims/jvmtiExport.hpp"
  53 #include "runtime/arguments.hpp"
  54 #include "runtime/flags/jvmFlag.hpp"
  55 #include "runtime/flags/jvmFlagAccess.hpp"
  56 #include "runtime/flags/jvmFlagLimit.hpp"

  57 #include "runtime/globals_extension.hpp"
  58 #include "runtime/java.hpp"
  59 #include "runtime/os.hpp"
  60 #include "runtime/safepoint.hpp"
  61 #include "runtime/safepointMechanism.hpp"
  62 #include "runtime/synchronizer.hpp"
  63 #include "runtime/vm_version.hpp"
  64 #include "services/management.hpp"
  65 #include "utilities/align.hpp"
  66 #include "utilities/debug.hpp"
  67 #include "utilities/defaultStream.hpp"
  68 #include "utilities/macros.hpp"
  69 #include "utilities/parseInteger.hpp"
  70 #include "utilities/powerOfTwo.hpp"
  71 #include "utilities/stringUtils.hpp"
  72 #include "utilities/systemMemoryBarrier.hpp"
  73 #if INCLUDE_JFR
  74 #include "jfr/jfr.hpp"
  75 #endif
  76 


  77 static const char _default_java_launcher[] = "generic";
  78 
  79 #define DEFAULT_JAVA_LAUNCHER _default_java_launcher
  80 
  81 char*  Arguments::_jvm_flags_file               = nullptr;
  82 char** Arguments::_jvm_flags_array              = nullptr;
  83 int    Arguments::_num_jvm_flags                = 0;
  84 char** Arguments::_jvm_args_array               = nullptr;
  85 int    Arguments::_num_jvm_args                 = 0;
  86 unsigned int Arguments::_addmods_count          = 0;
  87 char*  Arguments::_java_command                 = nullptr;
  88 SystemProperty* Arguments::_system_properties   = nullptr;
  89 size_t Arguments::_conservative_max_heap_alignment = 0;
  90 Arguments::Mode Arguments::_mode                = _mixed;
  91 const char*  Arguments::_java_vendor_url_bug    = nullptr;
  92 const char*  Arguments::_sun_java_launcher      = DEFAULT_JAVA_LAUNCHER;
  93 bool   Arguments::_executing_unit_tests         = false;
  94 
  95 // These parameters are reset in method parse_vm_init_args()
  96 bool   Arguments::_AlwaysCompileLoopMethods     = AlwaysCompileLoopMethods;

2623 
2624 #ifndef COMPILER2
2625   // Don't degrade server performance for footprint
2626   if (FLAG_IS_DEFAULT(UseLargePages) &&
2627       MaxHeapSize < LargePageHeapSizeThreshold) {
2628     // No need for large granularity pages w/small heaps.
2629     // Note that large pages are enabled/disabled for both the
2630     // Java heap and the code cache.
2631     FLAG_SET_DEFAULT(UseLargePages, false);
2632   }
2633 
2634   UNSUPPORTED_OPTION(ProfileInterpreter);
2635 #endif // !COMPILER2
2636 
2637   // Parse the CompilationMode flag
2638   if (!CompilationModeFlag::initialize()) {
2639     return JNI_ERR;
2640   }
2641 
2642   // Called after ClassLoader::lookup_vm_options() but before class loading begins.
2643   // TODO: Obtain and pass correct preview mode flag value here.
2644   ClassLoader::set_preview_mode(false);
2645 
2646   if (!check_vm_args_consistency()) {
2647     return JNI_ERR;
2648   }
2649 
2650 
2651 #ifndef CAN_SHOW_REGISTERS_ON_ASSERT
2652   UNSUPPORTED_OPTION(ShowRegistersOnAssert);
2653 #endif // CAN_SHOW_REGISTERS_ON_ASSERT
2654 
2655   return JNI_OK;
2656 }
2657 
2658 // Helper class for controlling the lifetime of JavaVMInitArgs
2659 // objects.  The contents of the JavaVMInitArgs are guaranteed to be
2660 // deleted on the destruction of the ScopedVMInitArgs object.
2661 class ScopedVMInitArgs : public StackObj {
2662  private:
2663   JavaVMInitArgs _args;
2664   char*          _container_name;

3495     FLAG_SET_DEFAULT(StressSecondarySupers, false);
3496     FLAG_SET_DEFAULT(VerifySecondarySupers, false);
3497   }
3498 
3499 #ifdef ZERO
3500   // Clear flags not supported on zero.
3501   FLAG_SET_DEFAULT(ProfileInterpreter, false);
3502 #endif // ZERO
3503 
3504   if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
3505     warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output");
3506     DebugNonSafepoints = true;
3507   }
3508 
3509   // Treat the odd case where local verification is enabled but remote
3510   // verification is not as if both were enabled.
3511   if (BytecodeVerificationLocal && !BytecodeVerificationRemote) {
3512     log_info(verification)("Turning on remote verification because local verification is on");
3513     FLAG_SET_DEFAULT(BytecodeVerificationRemote, true);
3514   }




































































3515 
3516 #ifndef PRODUCT
3517   if (!LogVMOutput && FLAG_IS_DEFAULT(LogVMOutput)) {
3518     if (use_vm_log()) {
3519       LogVMOutput = true;
3520     }
3521   }
3522 #endif // PRODUCT
3523 
3524   if (PrintCommandLineFlags) {
3525     JVMFlag::printSetFlags(tty);
3526   }
3527 
3528 #ifdef COMPILER2
3529   if (!FLAG_IS_DEFAULT(EnableVectorSupport) && !EnableVectorSupport) {
3530     if (!FLAG_IS_DEFAULT(EnableVectorReboxing) && EnableVectorReboxing) {
3531       warning("Disabling EnableVectorReboxing since EnableVectorSupport is turned off.");
3532     }
3533     FLAG_SET_DEFAULT(EnableVectorReboxing, false);
3534 

  37 #include "gc/shared/gcConfig.hpp"
  38 #include "gc/shared/stringdedup/stringDedup.hpp"
  39 #include "gc/shared/tlab_globals.hpp"
  40 #include "jvm.h"
  41 #include "logging/log.hpp"
  42 #include "logging/logConfiguration.hpp"
  43 #include "logging/logStream.hpp"
  44 #include "logging/logTag.hpp"
  45 #include "memory/allocation.inline.hpp"
  46 #include "nmt/nmtCommon.hpp"
  47 #include "oops/compressedKlass.hpp"
  48 #include "oops/instanceKlass.hpp"
  49 #include "oops/objLayout.hpp"
  50 #include "oops/oop.inline.hpp"
  51 #include "prims/jvmtiAgentList.hpp"
  52 #include "prims/jvmtiExport.hpp"
  53 #include "runtime/arguments.hpp"
  54 #include "runtime/flags/jvmFlag.hpp"
  55 #include "runtime/flags/jvmFlagAccess.hpp"
  56 #include "runtime/flags/jvmFlagLimit.hpp"
  57 #include "runtime/globals.hpp"
  58 #include "runtime/globals_extension.hpp"
  59 #include "runtime/java.hpp"
  60 #include "runtime/os.hpp"
  61 #include "runtime/safepoint.hpp"
  62 #include "runtime/safepointMechanism.hpp"
  63 #include "runtime/synchronizer.hpp"
  64 #include "runtime/vm_version.hpp"
  65 #include "services/management.hpp"
  66 #include "utilities/align.hpp"
  67 #include "utilities/debug.hpp"
  68 #include "utilities/defaultStream.hpp"
  69 #include "utilities/macros.hpp"
  70 #include "utilities/parseInteger.hpp"
  71 #include "utilities/powerOfTwo.hpp"
  72 #include "utilities/stringUtils.hpp"
  73 #include "utilities/systemMemoryBarrier.hpp"
  74 #if INCLUDE_JFR
  75 #include "jfr/jfr.hpp"
  76 #endif
  77 
  78 #include <string.h>
  79 
  80 static const char _default_java_launcher[] = "generic";
  81 
  82 #define DEFAULT_JAVA_LAUNCHER _default_java_launcher
  83 
  84 char*  Arguments::_jvm_flags_file               = nullptr;
  85 char** Arguments::_jvm_flags_array              = nullptr;
  86 int    Arguments::_num_jvm_flags                = 0;
  87 char** Arguments::_jvm_args_array               = nullptr;
  88 int    Arguments::_num_jvm_args                 = 0;
  89 unsigned int Arguments::_addmods_count          = 0;
  90 char*  Arguments::_java_command                 = nullptr;
  91 SystemProperty* Arguments::_system_properties   = nullptr;
  92 size_t Arguments::_conservative_max_heap_alignment = 0;
  93 Arguments::Mode Arguments::_mode                = _mixed;
  94 const char*  Arguments::_java_vendor_url_bug    = nullptr;
  95 const char*  Arguments::_sun_java_launcher      = DEFAULT_JAVA_LAUNCHER;
  96 bool   Arguments::_executing_unit_tests         = false;
  97 
  98 // These parameters are reset in method parse_vm_init_args()
  99 bool   Arguments::_AlwaysCompileLoopMethods     = AlwaysCompileLoopMethods;

2626 
2627 #ifndef COMPILER2
2628   // Don't degrade server performance for footprint
2629   if (FLAG_IS_DEFAULT(UseLargePages) &&
2630       MaxHeapSize < LargePageHeapSizeThreshold) {
2631     // No need for large granularity pages w/small heaps.
2632     // Note that large pages are enabled/disabled for both the
2633     // Java heap and the code cache.
2634     FLAG_SET_DEFAULT(UseLargePages, false);
2635   }
2636 
2637   UNSUPPORTED_OPTION(ProfileInterpreter);
2638 #endif // !COMPILER2
2639 
2640   // Parse the CompilationMode flag
2641   if (!CompilationModeFlag::initialize()) {
2642     return JNI_ERR;
2643   }
2644 
2645   // Called after ClassLoader::lookup_vm_options() but before class loading begins.
2646   ClassLoader::set_preview_mode(is_valhalla_enabled());

2647 
2648   if (!check_vm_args_consistency()) {
2649     return JNI_ERR;
2650   }
2651 
2652 
2653 #ifndef CAN_SHOW_REGISTERS_ON_ASSERT
2654   UNSUPPORTED_OPTION(ShowRegistersOnAssert);
2655 #endif // CAN_SHOW_REGISTERS_ON_ASSERT
2656 
2657   return JNI_OK;
2658 }
2659 
2660 // Helper class for controlling the lifetime of JavaVMInitArgs
2661 // objects.  The contents of the JavaVMInitArgs are guaranteed to be
2662 // deleted on the destruction of the ScopedVMInitArgs object.
2663 class ScopedVMInitArgs : public StackObj {
2664  private:
2665   JavaVMInitArgs _args;
2666   char*          _container_name;

3497     FLAG_SET_DEFAULT(StressSecondarySupers, false);
3498     FLAG_SET_DEFAULT(VerifySecondarySupers, false);
3499   }
3500 
3501 #ifdef ZERO
3502   // Clear flags not supported on zero.
3503   FLAG_SET_DEFAULT(ProfileInterpreter, false);
3504 #endif // ZERO
3505 
3506   if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
3507     warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output");
3508     DebugNonSafepoints = true;
3509   }
3510 
3511   // Treat the odd case where local verification is enabled but remote
3512   // verification is not as if both were enabled.
3513   if (BytecodeVerificationLocal && !BytecodeVerificationRemote) {
3514     log_info(verification)("Turning on remote verification because local verification is on");
3515     FLAG_SET_DEFAULT(BytecodeVerificationRemote, true);
3516   }
3517   if (!is_valhalla_enabled()) {
3518 #define WARN_IF_NOT_DEFAULT_FLAG(flag)                                                                       \
3519     if (!FLAG_IS_DEFAULT(flag)) {                                                                            \
3520       warning("Preview-specific flag \"%s\" has no effect when --enable-preview is not specified.", #flag);  \
3521     }
3522 
3523 #define DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(flag)  \
3524     WARN_IF_NOT_DEFAULT_FLAG(flag)                  \
3525     FLAG_SET_DEFAULT(flag, false);
3526 
3527     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(InlineTypePassFieldsAsArgs);
3528     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(InlineTypeReturnedAsFields);
3529     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseArrayFlattening);
3530     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseFieldFlattening);
3531     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseNullFreeNonAtomicValueFlattening);
3532     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseNullableAtomicValueFlattening);
3533     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseNullFreeAtomicValueFlattening);
3534     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseNullableNonAtomicValueFlattening);
3535     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseAcmpFastPath);
3536     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(PrintInlineLayout);
3537     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(PrintFlatArrayLayout);
3538     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(IgnoreAssertUnsetFields);
3539     WARN_IF_NOT_DEFAULT_FLAG(FlatArrayElementMaxOops);
3540     WARN_IF_NOT_DEFAULT_FLAG(ForceNonTearable);
3541 #ifdef ASSERT
3542     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(StressCallingConvention);
3543     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(PreloadClasses);
3544     WARN_IF_NOT_DEFAULT_FLAG(PrintInlineKlassFields);
3545 #endif
3546 #ifdef COMPILER1
3547     DEBUG_ONLY(DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(C1UseDelayedFlattenedFieldReads);)
3548 #endif
3549 #ifdef COMPILER2
3550     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseArrayLoadStoreProfile);
3551     DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT(UseACmpProfile);
3552 #endif
3553 #undef DISABLE_FLAG_AND_WARN_IF_NOT_DEFAULT
3554 #undef WARN_IF_NOT_DEFAULT_FLAG
3555   } else {
3556 #define DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(flag, fallback)                                        \
3557     if (!FLAG_IS_DEFAULT(flag) && !UseArrayFlattening && !UseFieldFlattening) {                       \
3558       warning("Flattening flag \"%s\" has no effect when all flattening modes are disabled.", #flag); \
3559       FLAG_SET_DEFAULT(flag, fallback);                                                               \
3560     }
3561 
3562     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(UseNullFreeNonAtomicValueFlattening, false);
3563     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(UseNullableAtomicValueFlattening, false);
3564     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(UseNullFreeAtomicValueFlattening, false);
3565     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(UseNullableNonAtomicValueFlattening, false);
3566     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(FlatArrayElementMaxOops, 0);
3567     DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING(FlatteningBudget, 0);
3568 #undef DISABLE_FLAG_AND_WARN_IF_NO_FLATTENING
3569     if (is_interpreter_only() && !CDSConfig::is_dumping_archive() && !UseSharedSpaces) {
3570       // Disable calling convention optimizations if inline types are not supported.
3571       // Also these aren't useful in -Xint. However, don't disable them when dumping or using
3572       // the CDS archive, as the values must match between dumptime and runtime.
3573       FLAG_SET_DEFAULT(InlineTypePassFieldsAsArgs, false);
3574       FLAG_SET_DEFAULT(InlineTypeReturnedAsFields, false);
3575     }
3576     if (!UseNullFreeNonAtomicValueFlattening &&
3577         !UseNullableAtomicValueFlattening &&
3578         !UseNullFreeAtomicValueFlattening &&
3579         !UseNullableNonAtomicValueFlattening) {
3580       // Flattening is disabled
3581       FLAG_SET_DEFAULT(UseArrayFlattening, false);
3582       FLAG_SET_DEFAULT(UseFieldFlattening, false);
3583     }
3584   }
3585 
3586 #ifndef PRODUCT
3587   if (!LogVMOutput && FLAG_IS_DEFAULT(LogVMOutput)) {
3588     if (use_vm_log()) {
3589       LogVMOutput = true;
3590     }
3591   }
3592 #endif // PRODUCT
3593 
3594   if (PrintCommandLineFlags) {
3595     JVMFlag::printSetFlags(tty);
3596   }
3597 
3598 #ifdef COMPILER2
3599   if (!FLAG_IS_DEFAULT(EnableVectorSupport) && !EnableVectorSupport) {
3600     if (!FLAG_IS_DEFAULT(EnableVectorReboxing) && EnableVectorReboxing) {
3601       warning("Disabling EnableVectorReboxing since EnableVectorSupport is turned off.");
3602     }
3603     FLAG_SET_DEFAULT(EnableVectorReboxing, false);
3604 
< prev index next >