hotspot/src/share/vm/runtime/arguments.cpp
changeset 22838 82c7497fbad4
parent 22836 e7e511228518
parent 21196 538177a5209a
child 22851 4c4b6a45be43
equal deleted inserted replaced
22837:feba5d4126b8 22838:82c7497fbad4
    26 #include "classfile/javaAssertions.hpp"
    26 #include "classfile/javaAssertions.hpp"
    27 #include "classfile/symbolTable.hpp"
    27 #include "classfile/symbolTable.hpp"
    28 #include "compiler/compilerOracle.hpp"
    28 #include "compiler/compilerOracle.hpp"
    29 #include "memory/allocation.inline.hpp"
    29 #include "memory/allocation.inline.hpp"
    30 #include "memory/cardTableRS.hpp"
    30 #include "memory/cardTableRS.hpp"
       
    31 #include "memory/genCollectedHeap.hpp"
    31 #include "memory/referenceProcessor.hpp"
    32 #include "memory/referenceProcessor.hpp"
    32 #include "memory/universe.inline.hpp"
    33 #include "memory/universe.inline.hpp"
    33 #include "oops/oop.inline.hpp"
    34 #include "oops/oop.inline.hpp"
    34 #include "prims/jvmtiExport.hpp"
    35 #include "prims/jvmtiExport.hpp"
    35 #include "runtime/arguments.hpp"
    36 #include "runtime/arguments.hpp"
    55 #ifdef TARGET_OS_FAMILY_bsd
    56 #ifdef TARGET_OS_FAMILY_bsd
    56 # include "os_bsd.inline.hpp"
    57 # include "os_bsd.inline.hpp"
    57 #endif
    58 #endif
    58 #if INCLUDE_ALL_GCS
    59 #if INCLUDE_ALL_GCS
    59 #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp"
    60 #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp"
       
    61 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
       
    62 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
    60 #endif // INCLUDE_ALL_GCS
    63 #endif // INCLUDE_ALL_GCS
    61 
    64 
    62 // Note: This is a special bug reporting site for the JVM
    65 // Note: This is a special bug reporting site for the JVM
    63 #define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
    66 #define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
    64 #define DEFAULT_JAVA_LAUNCHER  "generic"
    67 #define DEFAULT_JAVA_LAUNCHER  "generic"
    91 int     Arguments::_num_jvm_args                = 0;
    94 int     Arguments::_num_jvm_args                = 0;
    92 char*  Arguments::_java_command                 = NULL;
    95 char*  Arguments::_java_command                 = NULL;
    93 SystemProperty* Arguments::_system_properties   = NULL;
    96 SystemProperty* Arguments::_system_properties   = NULL;
    94 const char*  Arguments::_gc_log_filename        = NULL;
    97 const char*  Arguments::_gc_log_filename        = NULL;
    95 bool   Arguments::_has_profile                  = false;
    98 bool   Arguments::_has_profile                  = false;
       
    99 size_t Arguments::_conservative_max_heap_alignment = 0;
    96 uintx  Arguments::_min_heap_size                = 0;
   100 uintx  Arguments::_min_heap_size                = 0;
    97 Arguments::Mode Arguments::_mode                = _mixed;
   101 Arguments::Mode Arguments::_mode                = _mixed;
    98 bool   Arguments::_java_compiler                = false;
   102 bool   Arguments::_java_compiler                = false;
    99 bool   Arguments::_xdebug_mode                  = false;
   103 bool   Arguments::_xdebug_mode                  = false;
   100 const char*  Arguments::_java_vendor_url_bug    = DEFAULT_VENDOR_URL_BUG;
   104 const char*  Arguments::_java_vendor_url_bug    = DEFAULT_VENDOR_URL_BUG;
   622   default:
   626   default:
   623     ShouldNotReachHere();
   627     ShouldNotReachHere();
   624   }
   628   }
   625 }
   629 }
   626 
   630 
   627 static bool set_bool_flag(char* name, bool value, FlagValueOrigin origin) {
   631 static bool set_bool_flag(char* name, bool value, Flag::Flags origin) {
   628   return CommandLineFlags::boolAtPut(name, &value, origin);
   632   return CommandLineFlags::boolAtPut(name, &value, origin);
   629 }
   633 }
   630 
   634 
   631 static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
   635 static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) {
   632   double v;
   636   double v;
   633   if (sscanf(value, "%lf", &v) != 1) {
   637   if (sscanf(value, "%lf", &v) != 1) {
   634     return false;
   638     return false;
   635   }
   639   }
   636 
   640 
   638     return true;
   642     return true;
   639   }
   643   }
   640   return false;
   644   return false;
   641 }
   645 }
   642 
   646 
   643 static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
   647 static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) {
   644   julong v;
   648   julong v;
   645   intx intx_v;
   649   intx intx_v;
   646   bool is_neg = false;
   650   bool is_neg = false;
   647   // Check the sign first since atomull() parses only unsigned values.
   651   // Check the sign first since atomull() parses only unsigned values.
   648   if (*value == '-') {
   652   if (*value == '-') {
   671     return true;
   675     return true;
   672   }
   676   }
   673   return false;
   677   return false;
   674 }
   678 }
   675 
   679 
   676 static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) {
   680 static bool set_string_flag(char* name, const char* value, Flag::Flags origin) {
   677   if (!CommandLineFlags::ccstrAtPut(name, &value, origin))  return false;
   681   if (!CommandLineFlags::ccstrAtPut(name, &value, origin))  return false;
   678   // Contract:  CommandLineFlags always returns a pointer that needs freeing.
   682   // Contract:  CommandLineFlags always returns a pointer that needs freeing.
   679   FREE_C_HEAP_ARRAY(char, value, mtInternal);
   683   FREE_C_HEAP_ARRAY(char, value, mtInternal);
   680   return true;
   684   return true;
   681 }
   685 }
   682 
   686 
   683 static bool append_to_string_flag(char* name, const char* new_value, FlagValueOrigin origin) {
   687 static bool append_to_string_flag(char* name, const char* new_value, Flag::Flags origin) {
   684   const char* old_value = "";
   688   const char* old_value = "";
   685   if (!CommandLineFlags::ccstrAt(name, &old_value))  return false;
   689   if (!CommandLineFlags::ccstrAt(name, &old_value))  return false;
   686   size_t old_len = old_value != NULL ? strlen(old_value) : 0;
   690   size_t old_len = old_value != NULL ? strlen(old_value) : 0;
   687   size_t new_len = strlen(new_value);
   691   size_t new_len = strlen(new_value);
   688   const char* value;
   692   const char* value;
   706     FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal);
   710     FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal);
   707   }
   711   }
   708   return true;
   712   return true;
   709 }
   713 }
   710 
   714 
   711 bool Arguments::parse_argument(const char* arg, FlagValueOrigin origin) {
   715 bool Arguments::parse_argument(const char* arg, Flag::Flags origin) {
   712 
   716 
   713   // range of acceptable characters spelled out for portability reasons
   717   // range of acceptable characters spelled out for portability reasons
   714 #define NAME_RANGE  "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
   718 #define NAME_RANGE  "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
   715 #define BUFLEN 255
   719 #define BUFLEN 255
   716   char name[BUFLEN+1];
   720   char name[BUFLEN+1];
   847     st->print_cr("");
   851     st->print_cr("");
   848   }
   852   }
   849 }
   853 }
   850 
   854 
   851 bool Arguments::process_argument(const char* arg,
   855 bool Arguments::process_argument(const char* arg,
   852     jboolean ignore_unrecognized, FlagValueOrigin origin) {
   856     jboolean ignore_unrecognized, Flag::Flags origin) {
   853 
   857 
   854   JDK_Version since = JDK_Version();
   858   JDK_Version since = JDK_Version();
   855 
   859 
   856   if (parse_argument(arg, origin) || ignore_unrecognized) {
   860   if (parse_argument(arg, origin) || ignore_unrecognized) {
   857     return true;
   861     return true;
   901     Flag* fuzzy_matched = Flag::fuzzy_match((const char*)argname, arg_len, true);
   905     Flag* fuzzy_matched = Flag::fuzzy_match((const char*)argname, arg_len, true);
   902     if (fuzzy_matched != NULL) {
   906     if (fuzzy_matched != NULL) {
   903       jio_fprintf(defaultStream::error_stream(),
   907       jio_fprintf(defaultStream::error_stream(),
   904                   "Did you mean '%s%s%s'?\n",
   908                   "Did you mean '%s%s%s'?\n",
   905                   (fuzzy_matched->is_bool()) ? "(+/-)" : "",
   909                   (fuzzy_matched->is_bool()) ? "(+/-)" : "",
   906                   fuzzy_matched->name,
   910                   fuzzy_matched->_name,
   907                   (fuzzy_matched->is_bool()) ? "" : "=<value>");
   911                   (fuzzy_matched->is_bool()) ? "" : "=<value>");
   908     }
   912     }
   909   }
   913   }
   910 
   914 
   911   // allow for commandline "commenting out" options like -XX:#+Verbose
   915   // allow for commandline "commenting out" options like -XX:#+Verbose
   949       if (c == '\n' || (!in_quote && isspace(c))) {
   953       if (c == '\n' || (!in_quote && isspace(c))) {
   950         // token ends at newline, or at unquoted whitespace
   954         // token ends at newline, or at unquoted whitespace
   951         // this allows a way to include spaces in string-valued options
   955         // this allows a way to include spaces in string-valued options
   952         token[pos] = '\0';
   956         token[pos] = '\0';
   953         logOption(token);
   957         logOption(token);
   954         result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
   958         result &= process_argument(token, ignore_unrecognized, Flag::CONFIG_FILE);
   955         build_jvm_flags(token);
   959         build_jvm_flags(token);
   956         pos = 0;
   960         pos = 0;
   957         in_white_space = true;
   961         in_white_space = true;
   958         in_quote = false;
   962         in_quote = false;
   959       } else if (!in_quote && (c == '\'' || c == '"')) {
   963       } else if (!in_quote && (c == '\'' || c == '"')) {
   967     }
   971     }
   968     c = getc(stream);
   972     c = getc(stream);
   969   }
   973   }
   970   if (pos > 0) {
   974   if (pos > 0) {
   971     token[pos] = '\0';
   975     token[pos] = '\0';
   972     result &= process_argument(token, ignore_unrecognized, CONFIG_FILE);
   976     result &= process_argument(token, ignore_unrecognized, Flag::CONFIG_FILE);
   973     build_jvm_flags(token);
   977     build_jvm_flags(token);
   974   }
   978   }
   975   fclose(stream);
   979   fclose(stream);
   976   return result;
   980   return result;
   977 }
   981 }
  1097     }
  1101     }
  1098     break;
  1102     break;
  1099   }
  1103   }
  1100 }
  1104 }
  1101 
  1105 
       
  1106 #if defined(COMPILER2) || defined(_LP64) || !INCLUDE_CDS
  1102 // Conflict: required to use shared spaces (-Xshare:on), but
  1107 // Conflict: required to use shared spaces (-Xshare:on), but
  1103 // incompatible command line options were chosen.
  1108 // incompatible command line options were chosen.
  1104 
  1109 
  1105 static void no_shared_spaces() {
  1110 static void no_shared_spaces() {
  1106   if (RequireSharedSpaces) {
  1111   if (RequireSharedSpaces) {
  1109     vm_exit_during_initialization("Unable to use shared archive.", NULL);
  1114     vm_exit_during_initialization("Unable to use shared archive.", NULL);
  1110   } else {
  1115   } else {
  1111     FLAG_SET_DEFAULT(UseSharedSpaces, false);
  1116     FLAG_SET_DEFAULT(UseSharedSpaces, false);
  1112   }
  1117   }
  1113 }
  1118 }
       
  1119 #endif
  1114 
  1120 
  1115 void Arguments::set_tiered_flags() {
  1121 void Arguments::set_tiered_flags() {
  1116   // With tiered, set default policy to AdvancedThresholdPolicy, which is 3.
  1122   // With tiered, set default policy to AdvancedThresholdPolicy, which is 3.
  1117   if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) {
  1123   if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) {
  1118     FLAG_SET_DEFAULT(CompilationPolicyChoice, 3);
  1124     FLAG_SET_DEFAULT(CompilationPolicyChoice, 3);
  1126     FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 5);
  1132     FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 5);
  1127   }
  1133   }
  1128   if (!UseInterpreter) { // -Xcomp
  1134   if (!UseInterpreter) { // -Xcomp
  1129     Tier3InvokeNotifyFreqLog = 0;
  1135     Tier3InvokeNotifyFreqLog = 0;
  1130     Tier4InvocationThreshold = 0;
  1136     Tier4InvocationThreshold = 0;
       
  1137   }
       
  1138   if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
       
  1139     FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M));
  1131   }
  1140   }
  1132 }
  1141 }
  1133 
  1142 
  1134 #if INCLUDE_ALL_GCS
  1143 #if INCLUDE_ALL_GCS
  1135 static void disable_adaptive_size_policy(const char* collector_name) {
  1144 static void disable_adaptive_size_policy(const char* collector_name) {
  1392     return false;
  1401     return false;
  1393   }
  1402   }
  1394   return true;
  1403   return true;
  1395 }
  1404 }
  1396 
  1405 
  1397 inline uintx max_heap_for_compressed_oops() {
  1406 uintx Arguments::max_heap_for_compressed_oops() {
  1398   // Avoid sign flip.
  1407   // Avoid sign flip.
  1399   assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
  1408   assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
  1400   LP64_ONLY(return OopEncodingHeapMax - os::vm_page_size());
  1409   // We need to fit both the NULL page and the heap into the memory budget, while
       
  1410   // keeping alignment constraints of the heap. To guarantee the latter, as the
       
  1411   // NULL page is located before the heap, we pad the NULL page to the conservative
       
  1412   // maximum alignment that the GC may ever impose upon the heap.
       
  1413   size_t displacement_due_to_null_page = align_size_up_(os::vm_page_size(),
       
  1414     Arguments::conservative_max_heap_alignment());
       
  1415 
       
  1416   LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page);
  1401   NOT_LP64(ShouldNotReachHere(); return 0);
  1417   NOT_LP64(ShouldNotReachHere(); return 0);
  1402 }
  1418 }
  1403 
  1419 
  1404 bool Arguments::should_auto_select_low_pause_collector() {
  1420 bool Arguments::should_auto_select_low_pause_collector() {
  1405   if (UseAutoGCSelectPolicy &&
  1421   if (UseAutoGCSelectPolicy &&
  1440 #endif //  _WIN64
  1456 #endif //  _WIN64
  1441   } else {
  1457   } else {
  1442     if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) {
  1458     if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) {
  1443       warning("Max heap size too large for Compressed Oops");
  1459       warning("Max heap size too large for Compressed Oops");
  1444       FLAG_SET_DEFAULT(UseCompressedOops, false);
  1460       FLAG_SET_DEFAULT(UseCompressedOops, false);
  1445       FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
  1461       FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
  1446     }
  1462     }
  1447   }
  1463   }
  1448 #endif // _LP64
  1464 #endif // _LP64
  1449 #endif // ZERO
  1465 #endif // ZERO
  1450 }
  1466 }
  1453 // NOTE: set_use_compressed_klass_ptrs() must be called after calling
  1469 // NOTE: set_use_compressed_klass_ptrs() must be called after calling
  1454 // set_use_compressed_oops().
  1470 // set_use_compressed_oops().
  1455 void Arguments::set_use_compressed_klass_ptrs() {
  1471 void Arguments::set_use_compressed_klass_ptrs() {
  1456 #ifndef ZERO
  1472 #ifndef ZERO
  1457 #ifdef _LP64
  1473 #ifdef _LP64
  1458   // UseCompressedOops must be on for UseCompressedKlassPointers to be on.
  1474   // UseCompressedOops must be on for UseCompressedClassPointers to be on.
  1459   if (!UseCompressedOops) {
  1475   if (!UseCompressedOops) {
  1460     if (UseCompressedKlassPointers) {
  1476     if (UseCompressedClassPointers) {
  1461       warning("UseCompressedKlassPointers requires UseCompressedOops");
  1477       warning("UseCompressedClassPointers requires UseCompressedOops");
  1462     }
  1478     }
  1463     FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
  1479     FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
  1464   } else {
  1480   } else {
  1465     // Turn on UseCompressedKlassPointers too
  1481     // Turn on UseCompressedClassPointers too
  1466     if (FLAG_IS_DEFAULT(UseCompressedKlassPointers)) {
  1482     if (FLAG_IS_DEFAULT(UseCompressedClassPointers)) {
  1467       FLAG_SET_ERGO(bool, UseCompressedKlassPointers, true);
  1483       FLAG_SET_ERGO(bool, UseCompressedClassPointers, true);
  1468     }
  1484     }
  1469     // Check the ClassMetaspaceSize to make sure we use compressed klass ptrs.
  1485     // Check the CompressedClassSpaceSize to make sure we use compressed klass ptrs.
  1470     if (UseCompressedKlassPointers) {
  1486     if (UseCompressedClassPointers) {
  1471       if (ClassMetaspaceSize > KlassEncodingMetaspaceMax) {
  1487       if (CompressedClassSpaceSize > KlassEncodingMetaspaceMax) {
  1472         warning("Class metaspace size is too large for UseCompressedKlassPointers");
  1488         warning("CompressedClassSpaceSize is too large for UseCompressedClassPointers");
  1473         FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
  1489         FLAG_SET_DEFAULT(UseCompressedClassPointers, false);
  1474       }
  1490       }
  1475     }
  1491     }
  1476   }
  1492   }
  1477 #endif // _LP64
  1493 #endif // _LP64
  1478 #endif // !ZERO
  1494 #endif // !ZERO
       
  1495 }
       
  1496 
       
  1497 void Arguments::set_conservative_max_heap_alignment() {
       
  1498   // The conservative maximum required alignment for the heap is the maximum of
       
  1499   // the alignments imposed by several sources: any requirements from the heap
       
  1500   // itself, the collector policy and the maximum page size we may run the VM
       
  1501   // with.
       
  1502   size_t heap_alignment = GenCollectedHeap::conservative_max_heap_alignment();
       
  1503 #if INCLUDE_ALL_GCS
       
  1504   if (UseParallelGC) {
       
  1505     heap_alignment = ParallelScavengeHeap::conservative_max_heap_alignment();
       
  1506   } else if (UseG1GC) {
       
  1507     heap_alignment = G1CollectedHeap::conservative_max_heap_alignment();
       
  1508   }
       
  1509 #endif // INCLUDE_ALL_GCS
       
  1510   _conservative_max_heap_alignment = MAX3(heap_alignment, os::max_page_size(),
       
  1511     CollectorPolicy::compute_max_alignment());
  1479 }
  1512 }
  1480 
  1513 
  1481 void Arguments::set_ergonomics_flags() {
  1514 void Arguments::set_ergonomics_flags() {
  1482 
  1515 
  1483   if (os::is_server_class_machine()) {
  1516   if (os::is_server_class_machine()) {
  1493         FLAG_SET_ERGO(bool, UseConcMarkSweepGC, true);
  1526         FLAG_SET_ERGO(bool, UseConcMarkSweepGC, true);
  1494       } else {
  1527       } else {
  1495         FLAG_SET_ERGO(bool, UseParallelGC, true);
  1528         FLAG_SET_ERGO(bool, UseParallelGC, true);
  1496       }
  1529       }
  1497     }
  1530     }
  1498     // Shared spaces work fine with other GCs but causes bytecode rewriting
  1531   }
  1499     // to be disabled, which hurts interpreter performance and decreases
  1532 #ifdef COMPILER2
  1500     // server performance.   On server class machines, keep the default
  1533   // Shared spaces work fine with other GCs but causes bytecode rewriting
  1501     // off unless it is asked for.  Future work: either add bytecode rewriting
  1534   // to be disabled, which hurts interpreter performance and decreases
  1502     // at link time, or rewrite bytecodes in non-shared methods.
  1535   // server performance.  When -server is specified, keep the default off
  1503     if (!DumpSharedSpaces && !RequireSharedSpaces &&
  1536   // unless it is asked for.  Future work: either add bytecode rewriting
  1504         (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
  1537   // at link time, or rewrite bytecodes in non-shared methods.
  1505       no_shared_spaces();
  1538   if (!DumpSharedSpaces && !RequireSharedSpaces &&
  1506     }
  1539       (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
  1507   }
  1540     no_shared_spaces();
       
  1541   }
       
  1542 #endif
       
  1543 
       
  1544   set_conservative_max_heap_alignment();
  1508 
  1545 
  1509 #ifndef ZERO
  1546 #ifndef ZERO
  1510 #ifdef _LP64
  1547 #ifdef _LP64
  1511   set_use_compressed_oops();
  1548   set_use_compressed_oops();
  1512 
  1549 
  1606     result = MIN2(result, max_allocatable / MaxVirtMemFraction);
  1643     result = MIN2(result, max_allocatable / MaxVirtMemFraction);
  1607   }
  1644   }
  1608   return result;
  1645   return result;
  1609 }
  1646 }
  1610 
  1647 
  1611 void Arguments::set_heap_base_min_address() {
       
  1612   if (FLAG_IS_DEFAULT(HeapBaseMinAddress) && UseG1GC && HeapBaseMinAddress < 1*G) {
       
  1613     // By default HeapBaseMinAddress is 2G on all platforms except Solaris x86.
       
  1614     // G1 currently needs a lot of C-heap, so on Solaris we have to give G1
       
  1615     // some extra space for the C-heap compared to other collectors.
       
  1616     // Use FLAG_SET_DEFAULT here rather than FLAG_SET_ERGO to make sure that
       
  1617     // code that checks for default values work correctly.
       
  1618     FLAG_SET_DEFAULT(HeapBaseMinAddress, 1*G);
       
  1619   }
       
  1620 }
       
  1621 
       
  1622 void Arguments::set_heap_size() {
  1648 void Arguments::set_heap_size() {
  1623   if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) {
  1649   if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) {
  1624     // Deprecated flag
  1650     // Deprecated flag
  1625     FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction);
  1651     FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction);
  1626   }
  1652   }
  1851   if (UseGCLogFileRotation) {
  1877   if (UseGCLogFileRotation) {
  1852     if ((Arguments::gc_log_filename() == NULL) ||
  1878     if ((Arguments::gc_log_filename() == NULL) ||
  1853         (NumberOfGCLogFiles == 0)  ||
  1879         (NumberOfGCLogFiles == 0)  ||
  1854         (GCLogFileSize == 0)) {
  1880         (GCLogFileSize == 0)) {
  1855       jio_fprintf(defaultStream::output_stream(),
  1881       jio_fprintf(defaultStream::output_stream(),
  1856                   "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>\n"
  1882                   "To enable GC log rotation, use -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> -XX:GCLogFileSize=<num_of_size>[k|K|m|M|g|G]\n"
  1857                   "where num_of_file > 0 and num_of_size > 0\n"
  1883                   "where num_of_file > 0 and num_of_size > 0\n"
  1858                   "GC log rotation is turned off\n");
  1884                   "GC log rotation is turned off\n");
  1859       UseGCLogFileRotation = false;
  1885       UseGCLogFileRotation = false;
  1860     }
  1886     }
  1861   }
  1887   }
  1863   if (UseGCLogFileRotation && GCLogFileSize < 8*K) {
  1889   if (UseGCLogFileRotation && GCLogFileSize < 8*K) {
  1864         FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
  1890         FLAG_SET_CMDLINE(uintx, GCLogFileSize, 8*K);
  1865         jio_fprintf(defaultStream::output_stream(),
  1891         jio_fprintf(defaultStream::output_stream(),
  1866                     "GCLogFileSize changed to minimum 8K\n");
  1892                     "GCLogFileSize changed to minimum 8K\n");
  1867   }
  1893   }
       
  1894 }
       
  1895 
       
  1896 // This function is called for -Xloggc:<filename>, it can be used
       
  1897 // to check if a given file name(or string) conforms to the following
       
  1898 // specification:
       
  1899 // A valid string only contains "[A-Z][a-z][0-9].-_%[p|t]"
       
  1900 // %p and %t only allowed once. We only limit usage of filename not path
       
  1901 bool is_filename_valid(const char *file_name) {
       
  1902   const char* p = file_name;
       
  1903   char file_sep = os::file_separator()[0];
       
  1904   const char* cp;
       
  1905   // skip prefix path
       
  1906   for (cp = file_name; *cp != '\0'; cp++) {
       
  1907     if (*cp == '/' || *cp == file_sep) {
       
  1908       p = cp + 1;
       
  1909     }
       
  1910   }
       
  1911 
       
  1912   int count_p = 0;
       
  1913   int count_t = 0;
       
  1914   while (*p != '\0') {
       
  1915     if ((*p >= '0' && *p <= '9') ||
       
  1916         (*p >= 'A' && *p <= 'Z') ||
       
  1917         (*p >= 'a' && *p <= 'z') ||
       
  1918          *p == '-'               ||
       
  1919          *p == '_'               ||
       
  1920          *p == '.') {
       
  1921        p++;
       
  1922        continue;
       
  1923     }
       
  1924     if (*p == '%') {
       
  1925       if(*(p + 1) == 'p') {
       
  1926         p += 2;
       
  1927         count_p ++;
       
  1928         continue;
       
  1929       }
       
  1930       if (*(p + 1) == 't') {
       
  1931         p += 2;
       
  1932         count_t ++;
       
  1933         continue;
       
  1934       }
       
  1935     }
       
  1936     return false;
       
  1937   }
       
  1938   return count_p < 2 && count_t < 2;
  1868 }
  1939 }
  1869 
  1940 
  1870 // Check consistency of GC selection
  1941 // Check consistency of GC selection
  1871 bool Arguments::check_gc_consistency() {
  1942 bool Arguments::check_gc_consistency() {
  1872   check_gclog_consistency();
  1943   check_gclog_consistency();
  1887     jio_fprintf(defaultStream::error_stream(),
  1958     jio_fprintf(defaultStream::error_stream(),
  1888                 "Conflicting collector combinations in option list; "
  1959                 "Conflicting collector combinations in option list; "
  1889                 "please refer to the release notes for the combinations "
  1960                 "please refer to the release notes for the combinations "
  1890                 "allowed\n");
  1961                 "allowed\n");
  1891     status = false;
  1962     status = false;
  1892   } else if (ReservedCodeCacheSize > 2*G) {
       
  1893     // Code cache size larger than MAXINT is not supported.
       
  1894     jio_fprintf(defaultStream::error_stream(),
       
  1895                 "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
       
  1896                 (2*G)/M);
       
  1897     status = false;
       
  1898   }
  1963   }
  1899   return status;
  1964   return status;
  1900 }
  1965 }
  1901 
  1966 
  1902 void Arguments::check_deprecated_gcs() {
  1967 void Arguments::check_deprecated_gcs() {
  1923             "and will likely be removed in future release");
  1988             "and will likely be removed in future release");
  1924   }
  1989   }
  1925   if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) {
  1990   if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) {
  1926     warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. "
  1991     warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. "
  1927         "Use MaxRAMFraction instead.");
  1992         "Use MaxRAMFraction instead.");
       
  1993   }
       
  1994   if (FLAG_IS_CMDLINE(UseCMSCompactAtFullCollection)) {
       
  1995     warning("UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.");
       
  1996   }
       
  1997   if (FLAG_IS_CMDLINE(CMSFullGCsBeforeCompaction)) {
       
  1998     warning("CMSFullGCsBeforeCompaction is deprecated and will likely be removed in a future release.");
       
  1999   }
       
  2000   if (FLAG_IS_CMDLINE(UseCMSCollectionPassing)) {
       
  2001     warning("UseCMSCollectionPassing is deprecated and will likely be removed in a future release.");
  1928   }
  2002   }
  1929 }
  2003 }
  1930 
  2004 
  1931 // Check stack pages settings
  2005 // Check stack pages settings
  1932 bool Arguments::check_stack_pages()
  2006 bool Arguments::check_stack_pages()
  1974 
  2048 
  1975   // Divide by bucket size to prevent a large size from causing rollover when
  2049   // Divide by bucket size to prevent a large size from causing rollover when
  1976   // calculating amount of memory needed to be allocated for the String table.
  2050   // calculating amount of memory needed to be allocated for the String table.
  1977   status = status && verify_interval(StringTableSize, minimumStringTableSize,
  2051   status = status && verify_interval(StringTableSize, minimumStringTableSize,
  1978     (max_uintx / StringTable::bucket_size()), "StringTable size");
  2052     (max_uintx / StringTable::bucket_size()), "StringTable size");
       
  2053 
       
  2054   status = status && verify_interval(SymbolTableSize, minimumSymbolTableSize,
       
  2055     (max_uintx / SymbolTable::bucket_size()), "SymbolTable size");
  1979 
  2056 
  1980   if (MinHeapFreeRatio > MaxHeapFreeRatio) {
  2057   if (MinHeapFreeRatio > MaxHeapFreeRatio) {
  1981     jio_fprintf(defaultStream::error_stream(),
  2058     jio_fprintf(defaultStream::error_stream(),
  1982                 "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
  2059                 "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
  1983                 "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
  2060                 "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
  2160   status = status && verify_interval(TLABWasteTargetPercent,
  2237   status = status && verify_interval(TLABWasteTargetPercent,
  2161                                      1, 100, "TLABWasteTargetPercent");
  2238                                      1, 100, "TLABWasteTargetPercent");
  2162 
  2239 
  2163   status = status && verify_object_alignment();
  2240   status = status && verify_object_alignment();
  2164 
  2241 
  2165   status = status && verify_interval(ClassMetaspaceSize, 1*M, 3*G,
  2242   status = status && verify_interval(CompressedClassSpaceSize, 1*M, 3*G,
  2166                                       "ClassMetaspaceSize");
  2243                                       "CompressedClassSpaceSize");
  2167 
  2244 
  2168   status = status && verify_interval(MarkStackSizeMax,
  2245   status = status && verify_interval(MarkStackSizeMax,
  2169                                   1, (max_jint - 1), "MarkStackSizeMax");
  2246                                   1, (max_jint - 1), "MarkStackSizeMax");
  2170   status = status && verify_interval(NUMAChunkResizeWeight, 0, 100, "NUMAChunkResizeWeight");
  2247   status = status && verify_interval(NUMAChunkResizeWeight, 0, 100, "NUMAChunkResizeWeight");
  2171 
  2248 
  2231   // 8K is well beyond the reasonable HW cache line size, even with the
  2308   // 8K is well beyond the reasonable HW cache line size, even with the
  2232   // aggressive prefetching, while still leaving the room for segregating
  2309   // aggressive prefetching, while still leaving the room for segregating
  2233   // among the distinct pages.
  2310   // among the distinct pages.
  2234   if (ContendedPaddingWidth < 0 || ContendedPaddingWidth > 8192) {
  2311   if (ContendedPaddingWidth < 0 || ContendedPaddingWidth > 8192) {
  2235     jio_fprintf(defaultStream::error_stream(),
  2312     jio_fprintf(defaultStream::error_stream(),
  2236                 "ContendedPaddingWidth=" INTX_FORMAT " must be the between %d and %d\n",
  2313                 "ContendedPaddingWidth=" INTX_FORMAT " must be in between %d and %d\n",
  2237                 ContendedPaddingWidth, 0, 8192);
  2314                 ContendedPaddingWidth, 0, 8192);
  2238     status = false;
  2315     status = false;
  2239   }
  2316   }
  2240 
  2317 
  2241   // Need to enforce the padding not to break the existing field alignments.
  2318   // Need to enforce the padding not to break the existing field alignments.
  2242   // It is sufficient to check against the largest type size.
  2319   // It is sufficient to check against the largest type size.
  2243   if ((ContendedPaddingWidth % BytesPerLong) != 0) {
  2320   if ((ContendedPaddingWidth % BytesPerLong) != 0) {
  2244     jio_fprintf(defaultStream::error_stream(),
  2321     jio_fprintf(defaultStream::error_stream(),
  2245                 "ContendedPaddingWidth=" INTX_FORMAT " must be the multiple of %d\n",
  2322                 "ContendedPaddingWidth=" INTX_FORMAT " must be a multiple of %d\n",
  2246                 ContendedPaddingWidth, BytesPerLong);
  2323                 ContendedPaddingWidth, BytesPerLong);
  2247     status = false;
  2324     status = false;
  2248   }
  2325   }
  2249 
  2326 
  2250   // Check lower bounds of the code cache
  2327   // Check lower bounds of the code cache
  2270     jio_fprintf(defaultStream::error_stream(),
  2347     jio_fprintf(defaultStream::error_stream(),
  2271                 "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
  2348                 "Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
  2272                 (2*G)/M);
  2349                 (2*G)/M);
  2273     status = false;
  2350     status = false;
  2274   }
  2351   }
       
  2352 
       
  2353   status &= verify_interval(NmethodSweepFraction, 1, ReservedCodeCacheSize/K, "NmethodSweepFraction");
       
  2354   status &= verify_interval(NmethodSweepActivity, 0, 2000, "NmethodSweepActivity");
       
  2355 
  2275   return status;
  2356   return status;
  2276 }
  2357 }
  2277 
  2358 
  2278 bool Arguments::is_bad_option(const JavaVMOption* option, jboolean ignore,
  2359 bool Arguments::is_bad_option(const JavaVMOption* option, jboolean ignore,
  2279   const char* option_type) {
  2360   const char* option_type) {
  2371   if (result != JNI_OK) {
  2452   if (result != JNI_OK) {
  2372     return result;
  2453     return result;
  2373   }
  2454   }
  2374 
  2455 
  2375   // Parse JavaVMInitArgs structure passed in
  2456   // Parse JavaVMInitArgs structure passed in
  2376   result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, COMMAND_LINE);
  2457   result = parse_each_vm_init_arg(args, &scp, &scp_assembly_required, Flag::COMMAND_LINE);
  2377   if (result != JNI_OK) {
  2458   if (result != JNI_OK) {
  2378     return result;
  2459     return result;
  2379   }
       
  2380 
       
  2381   if (AggressiveOpts) {
       
  2382     // Insert alt-rt.jar between user-specified bootclasspath
       
  2383     // prefix and the default bootclasspath.  os::set_boot_path()
       
  2384     // uses meta_index_dir as the default bootclasspath directory.
       
  2385     const char* altclasses_jar = "alt-rt.jar";
       
  2386     size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 +
       
  2387                                  strlen(altclasses_jar);
       
  2388     char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal);
       
  2389     strcpy(altclasses_path, get_meta_index_dir());
       
  2390     strcat(altclasses_path, altclasses_jar);
       
  2391     scp.add_suffix_to_prefix(altclasses_path);
       
  2392     scp_assembly_required = true;
       
  2393     FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal);
       
  2394   }
  2460   }
  2395 
  2461 
  2396   // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
  2462   // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
  2397   result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
  2463   result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
  2398   if (result != JNI_OK) {
  2464   if (result != JNI_OK) {
  2458 }
  2524 }
  2459 
  2525 
  2460 jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
  2526 jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
  2461                                        SysClassPath* scp_p,
  2527                                        SysClassPath* scp_p,
  2462                                        bool* scp_assembly_required_p,
  2528                                        bool* scp_assembly_required_p,
  2463                                        FlagValueOrigin origin) {
  2529                                        Flag::Flags origin) {
  2464   // Remaining part of option string
  2530   // Remaining part of option string
  2465   const char* tail;
  2531   const char* tail;
  2466 
  2532 
  2467   // iterate over arguments
  2533   // iterate over arguments
  2468   for (int index = 0; index < args->nOptions; index++) {
  2534   for (int index = 0; index < args->nOptions; index++) {
  2595     // -Xbatch
  2661     // -Xbatch
  2596     } else if (match_option(option, "-Xbatch", &tail)) {
  2662     } else if (match_option(option, "-Xbatch", &tail)) {
  2597       FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
  2663       FLAG_SET_CMDLINE(bool, BackgroundCompilation, false);
  2598     // -Xmn for compatibility with other JVM vendors
  2664     // -Xmn for compatibility with other JVM vendors
  2599     } else if (match_option(option, "-Xmn", &tail)) {
  2665     } else if (match_option(option, "-Xmn", &tail)) {
  2600       julong long_initial_eden_size = 0;
  2666       julong long_initial_young_size = 0;
  2601       ArgsRange errcode = parse_memory_size(tail, &long_initial_eden_size, 1);
  2667       ArgsRange errcode = parse_memory_size(tail, &long_initial_young_size, 1);
  2602       if (errcode != arg_in_range) {
  2668       if (errcode != arg_in_range) {
  2603         jio_fprintf(defaultStream::error_stream(),
  2669         jio_fprintf(defaultStream::error_stream(),
  2604                     "Invalid initial eden size: %s\n", option->optionString);
  2670                     "Invalid initial young generation size: %s\n", option->optionString);
  2605         describe_range_error(errcode);
  2671         describe_range_error(errcode);
  2606         return JNI_EINVAL;
  2672         return JNI_EINVAL;
  2607       }
  2673       }
  2608       FLAG_SET_CMDLINE(uintx, MaxNewSize, (uintx)long_initial_eden_size);
  2674       FLAG_SET_CMDLINE(uintx, MaxNewSize, (uintx)long_initial_young_size);
  2609       FLAG_SET_CMDLINE(uintx, NewSize, (uintx)long_initial_eden_size);
  2675       FLAG_SET_CMDLINE(uintx, NewSize, (uintx)long_initial_young_size);
  2610     // -Xms
  2676     // -Xms
  2611     } else if (match_option(option, "-Xms", &tail)) {
  2677     } else if (match_option(option, "-Xms", &tail)) {
  2612       julong long_initial_heap_size = 0;
  2678       julong long_initial_heap_size = 0;
  2613       // an initial heap size of 0 means automatically determine
  2679       // an initial heap size of 0 means automatically determine
  2614       ArgsRange errcode = parse_memory_size(tail, &long_initial_heap_size, 0);
  2680       ArgsRange errcode = parse_memory_size(tail, &long_initial_heap_size, 0);
  2632         return JNI_EINVAL;
  2698         return JNI_EINVAL;
  2633       }
  2699       }
  2634       FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size);
  2700       FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size);
  2635     // Xmaxf
  2701     // Xmaxf
  2636     } else if (match_option(option, "-Xmaxf", &tail)) {
  2702     } else if (match_option(option, "-Xmaxf", &tail)) {
  2637       int maxf = (int)(atof(tail) * 100);
  2703       char* err;
  2638       if (maxf < 0 || maxf > 100) {
  2704       int maxf = (int)(strtod(tail, &err) * 100);
       
  2705       if (*err != '\0' || maxf < 0 || maxf > 100) {
  2639         jio_fprintf(defaultStream::error_stream(),
  2706         jio_fprintf(defaultStream::error_stream(),
  2640                     "Bad max heap free percentage size: %s\n",
  2707                     "Bad max heap free percentage size: %s\n",
  2641                     option->optionString);
  2708                     option->optionString);
  2642         return JNI_EINVAL;
  2709         return JNI_EINVAL;
  2643       } else {
  2710       } else {
  2644         FLAG_SET_CMDLINE(uintx, MaxHeapFreeRatio, maxf);
  2711         FLAG_SET_CMDLINE(uintx, MaxHeapFreeRatio, maxf);
  2645       }
  2712       }
  2646     // Xminf
  2713     // Xminf
  2647     } else if (match_option(option, "-Xminf", &tail)) {
  2714     } else if (match_option(option, "-Xminf", &tail)) {
  2648       int minf = (int)(atof(tail) * 100);
  2715       char* err;
  2649       if (minf < 0 || minf > 100) {
  2716       int minf = (int)(strtod(tail, &err) * 100);
       
  2717       if (*err != '\0' || minf < 0 || minf > 100) {
  2650         jio_fprintf(defaultStream::error_stream(),
  2718         jio_fprintf(defaultStream::error_stream(),
  2651                     "Bad min heap free percentage size: %s\n",
  2719                     "Bad min heap free percentage size: %s\n",
  2652                     option->optionString);
  2720                     option->optionString);
  2653         return JNI_EINVAL;
  2721         return JNI_EINVAL;
  2654       } else {
  2722       } else {
  2818     } else if (match_option(option, "-Xloggc:", &tail)) {
  2886     } else if (match_option(option, "-Xloggc:", &tail)) {
  2819       // Redirect GC output to the file. -Xloggc:<filename>
  2887       // Redirect GC output to the file. -Xloggc:<filename>
  2820       // ostream_init_log(), when called will use this filename
  2888       // ostream_init_log(), when called will use this filename
  2821       // to initialize a fileStream.
  2889       // to initialize a fileStream.
  2822       _gc_log_filename = strdup(tail);
  2890       _gc_log_filename = strdup(tail);
       
  2891      if (!is_filename_valid(_gc_log_filename)) {
       
  2892        jio_fprintf(defaultStream::output_stream(),
       
  2893                   "Invalid file name for use with -Xloggc: Filename can only contain the "
       
  2894                   "characters [A-Z][a-z][0-9]-_.%%[p|t] but it has been %s\n"
       
  2895                   "Note %%p or %%t can only be used once\n", _gc_log_filename);
       
  2896         return JNI_EINVAL;
       
  2897       }
  2823       FLAG_SET_CMDLINE(bool, PrintGC, true);
  2898       FLAG_SET_CMDLINE(bool, PrintGC, true);
  2824       FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
  2899       FLAG_SET_CMDLINE(bool, PrintGCTimeStamps, true);
  2825 
  2900 
  2826     // JNI hooks
  2901     // JNI hooks
  2827     } else if (match_option(option, "-Xcheck", &tail)) {
  2902     } else if (match_option(option, "-Xcheck", &tail)) {
  3274           logOption(tail);
  3349           logOption(tail);
  3275         }
  3350         }
  3276       }
  3351       }
  3277     }
  3352     }
  3278 
  3353 
  3279     return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, ENVIRON_VAR));
  3354     return(parse_each_vm_init_arg(&vm_args, scp_p, scp_assembly_required_p, Flag::ENVIRON_VAR));
  3280   }
  3355   }
  3281   return JNI_OK;
  3356   return JNI_OK;
  3282 }
  3357 }
  3283 
  3358 
  3284 void Arguments::set_shared_spaces_flags() {
  3359 void Arguments::set_shared_spaces_flags() {
  3286     if (RequireSharedSpaces) {
  3361     if (RequireSharedSpaces) {
  3287       warning("cannot dump shared archive while using shared archive");
  3362       warning("cannot dump shared archive while using shared archive");
  3288     }
  3363     }
  3289     UseSharedSpaces = false;
  3364     UseSharedSpaces = false;
  3290 #ifdef _LP64
  3365 #ifdef _LP64
  3291     if (!UseCompressedOops || !UseCompressedKlassPointers) {
  3366     if (!UseCompressedOops || !UseCompressedClassPointers) {
  3292       vm_exit_during_initialization(
  3367       vm_exit_during_initialization(
  3293         "Cannot dump shared archive when UseCompressedOops or UseCompressedKlassPointers is off.", NULL);
  3368         "Cannot dump shared archive when UseCompressedOops or UseCompressedClassPointers is off.", NULL);
  3294     }
  3369     }
  3295   } else {
  3370   } else {
  3296     // UseCompressedOops and UseCompressedKlassPointers must be on for UseSharedSpaces.
  3371     // UseCompressedOops and UseCompressedClassPointers must be on for UseSharedSpaces.
  3297     if (!UseCompressedOops || !UseCompressedKlassPointers) {
  3372     if (!UseCompressedOops || !UseCompressedClassPointers) {
  3298       no_shared_spaces();
  3373       no_shared_spaces();
  3299     }
  3374     }
  3300 #endif
  3375 #endif
  3301   }
  3376   }
  3302 }
  3377 }
  3338     }
  3413     }
  3339   }
  3414   }
  3340   return shared_archive_path;
  3415   return shared_archive_path;
  3341 }
  3416 }
  3342 
  3417 
       
  3418 #ifndef PRODUCT
       
  3419 // Determine whether LogVMOutput should be implicitly turned on.
       
  3420 static bool use_vm_log() {
       
  3421   if (LogCompilation || !FLAG_IS_DEFAULT(LogFile) ||
       
  3422       PrintCompilation || PrintInlining || PrintDependencies || PrintNativeNMethods ||
       
  3423       PrintDebugInfo || PrintRelocations || PrintNMethods || PrintExceptionHandlers ||
       
  3424       PrintAssembly || TraceDeoptimization || TraceDependencies ||
       
  3425       (VerifyDependencies && FLAG_IS_CMDLINE(VerifyDependencies))) {
       
  3426     return true;
       
  3427   }
       
  3428 
       
  3429 #ifdef COMPILER1
       
  3430   if (PrintC1Statistics) {
       
  3431     return true;
       
  3432   }
       
  3433 #endif // COMPILER1
       
  3434 
       
  3435 #ifdef COMPILER2
       
  3436   if (PrintOptoAssembly || PrintOptoStatistics) {
       
  3437     return true;
       
  3438   }
       
  3439 #endif // COMPILER2
       
  3440 
       
  3441   return false;
       
  3442 }
       
  3443 #endif // PRODUCT
       
  3444 
  3343 // Parse entry point called from JNI_CreateJavaVM
  3445 // Parse entry point called from JNI_CreateJavaVM
  3344 
  3446 
  3345 jint Arguments::parse(const JavaVMInitArgs* args) {
  3447 jint Arguments::parse(const JavaVMInitArgs* args) {
  3346 
  3448 
  3347   // Remaining part of option string
  3449   // Remaining part of option string
  3518     FLAG_SET_DEFAULT(PrintSharedSpaces, false);
  3620     FLAG_SET_DEFAULT(PrintSharedSpaces, false);
  3519   }
  3621   }
  3520   no_shared_spaces();
  3622   no_shared_spaces();
  3521 #endif // INCLUDE_CDS
  3623 #endif // INCLUDE_CDS
  3522 
  3624 
       
  3625   return JNI_OK;
       
  3626 }
       
  3627 
       
  3628 jint Arguments::apply_ergo() {
       
  3629 
  3523   // Set flags based on ergonomics.
  3630   // Set flags based on ergonomics.
  3524   set_ergonomics_flags();
  3631   set_ergonomics_flags();
  3525 
  3632 
  3526   set_shared_spaces_flags();
  3633   set_shared_spaces_flags();
  3527 
  3634 
  3537     if (CompilationPolicyChoice >= 2) {
  3644     if (CompilationPolicyChoice >= 2) {
  3538       vm_exit_during_initialization(
  3645       vm_exit_during_initialization(
  3539         "Incompatible compilation policy selected", NULL);
  3646         "Incompatible compilation policy selected", NULL);
  3540     }
  3647     }
  3541   }
  3648   }
  3542 
       
  3543   set_heap_base_min_address();
       
  3544 
  3649 
  3545   // Set heap size based on available physical memory
  3650   // Set heap size based on available physical memory
  3546   set_heap_size();
  3651   set_heap_size();
  3547 
  3652 
  3548 #if INCLUDE_ALL_GCS
  3653 #if INCLUDE_ALL_GCS
  3566     }
  3671     }
  3567   }
  3672   }
  3568 #else // INCLUDE_ALL_GCS
  3673 #else // INCLUDE_ALL_GCS
  3569   assert(verify_serial_gc_flags(), "SerialGC unset");
  3674   assert(verify_serial_gc_flags(), "SerialGC unset");
  3570 #endif // INCLUDE_ALL_GCS
  3675 #endif // INCLUDE_ALL_GCS
       
  3676 
       
  3677   // Initialize Metaspace flags and alignments.
       
  3678   Metaspace::ergo_initialize();
  3571 
  3679 
  3572   // Set bytecode rewriting flags
  3680   // Set bytecode rewriting flags
  3573   set_bytecode_flags();
  3681   set_bytecode_flags();
  3574 
  3682 
  3575   // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled.
  3683   // Set flags if Aggressive optimization flags (-XX:+AggressiveOpts) enabled.
  3595 #ifdef ZERO
  3703 #ifdef ZERO
  3596   // Clear flags not supported on zero.
  3704   // Clear flags not supported on zero.
  3597   FLAG_SET_DEFAULT(ProfileInterpreter, false);
  3705   FLAG_SET_DEFAULT(ProfileInterpreter, false);
  3598   FLAG_SET_DEFAULT(UseBiasedLocking, false);
  3706   FLAG_SET_DEFAULT(UseBiasedLocking, false);
  3599   LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedOops, false));
  3707   LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedOops, false));
  3600   LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedKlassPointers, false));
  3708   LP64_ONLY(FLAG_SET_DEFAULT(UseCompressedClassPointers, false));
  3601 #endif // CC_INTERP
  3709 #endif // CC_INTERP
  3602 
  3710 
  3603 #ifdef COMPILER2
  3711 #ifdef COMPILER2
  3604   if (!UseBiasedLocking || EmitSync != 0) {
  3712   if (!UseBiasedLocking || EmitSync != 0) {
  3605     UseOptoBiasInlining = false;
  3713     UseOptoBiasInlining = false;
  3617 #endif
  3725 #endif
  3618   if (IncrementalInline && FLAG_IS_DEFAULT(MaxNodeLimit)) {
  3726   if (IncrementalInline && FLAG_IS_DEFAULT(MaxNodeLimit)) {
  3619     // incremental inlining: bump MaxNodeLimit
  3727     // incremental inlining: bump MaxNodeLimit
  3620     FLAG_SET_DEFAULT(MaxNodeLimit, (intx)75000);
  3728     FLAG_SET_DEFAULT(MaxNodeLimit, (intx)75000);
  3621   }
  3729   }
       
  3730   if (!UseTypeSpeculation && FLAG_IS_DEFAULT(TypeProfileLevel)) {
       
  3731     // nothing to use the profiling, turn if off
       
  3732     FLAG_SET_DEFAULT(TypeProfileLevel, 0);
       
  3733   }
       
  3734   if (UseTypeSpeculation && FLAG_IS_DEFAULT(ReplaceInParentMaps)) {
       
  3735     // Doing the replace in parent maps helps speculation
       
  3736     FLAG_SET_DEFAULT(ReplaceInParentMaps, true);
       
  3737   }
       
  3738 #ifndef X86
       
  3739   // Only on x86 for now
       
  3740   FLAG_SET_DEFAULT(TypeProfileLevel, 0);
       
  3741 #endif
  3622 #endif
  3742 #endif
  3623 
  3743 
  3624   if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
  3744   if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
  3625     warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output");
  3745     warning("PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output");
  3626     DebugNonSafepoints = true;
  3746     DebugNonSafepoints = true;
       
  3747   }
       
  3748 
       
  3749   if (FLAG_IS_CMDLINE(CompressedClassSpaceSize) && !UseCompressedClassPointers) {
       
  3750     warning("Setting CompressedClassSpaceSize has no effect when compressed class pointers are not used");
  3627   }
  3751   }
  3628 
  3752 
  3629 #ifndef PRODUCT
  3753 #ifndef PRODUCT
  3630   if (CompileTheWorld) {
  3754   if (CompileTheWorld) {
  3631     // Force NmethodSweeper to sweep whole CodeCache each time.
  3755     // Force NmethodSweeper to sweep whole CodeCache each time.
  3632     if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
  3756     if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
  3633       NmethodSweepFraction = 1;
  3757       NmethodSweepFraction = 1;
  3634     }
  3758     }
  3635   }
  3759   }
  3636 #endif
  3760 
       
  3761   if (!LogVMOutput && FLAG_IS_DEFAULT(LogVMOutput)) {
       
  3762     if (use_vm_log()) {
       
  3763       LogVMOutput = true;
       
  3764     }
       
  3765   }
       
  3766 #endif // PRODUCT
  3637 
  3767 
  3638   if (PrintCommandLineFlags) {
  3768   if (PrintCommandLineFlags) {
  3639     CommandLineFlags::printSetFlags(tty);
  3769     CommandLineFlags::printSetFlags(tty);
  3640   }
  3770   }
  3641 
  3771