1 /* |
1 /* |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
99 SystemProperty *Arguments::_java_class_path = NULL; |
99 SystemProperty *Arguments::_java_class_path = NULL; |
100 SystemProperty *Arguments::_sun_boot_class_path = NULL; |
100 SystemProperty *Arguments::_sun_boot_class_path = NULL; |
101 |
101 |
102 char* Arguments::_meta_index_path = NULL; |
102 char* Arguments::_meta_index_path = NULL; |
103 char* Arguments::_meta_index_dir = NULL; |
103 char* Arguments::_meta_index_dir = NULL; |
104 |
|
105 static bool force_client_mode = false; |
|
106 |
104 |
107 // Check if head of 'option' matches 'name', and sets 'tail' remaining part of option string |
105 // Check if head of 'option' matches 'name', and sets 'tail' remaining part of option string |
108 |
106 |
109 static bool match_option(const JavaVMOption *option, const char* name, |
107 static bool match_option(const JavaVMOption *option, const char* name, |
110 const char** tail) { |
108 const char** tail) { |
816 since.to_string(version, sizeof(version)); |
814 since.to_string(version, sizeof(version)); |
817 warning("ignoring option %s; support was removed in %s", argname, version); |
815 warning("ignoring option %s; support was removed in %s", argname, version); |
818 return true; |
816 return true; |
819 } |
817 } |
820 |
818 |
821 jio_fprintf(defaultStream::error_stream(), |
819 // For locked flags, report a custom error message if available. |
822 "Unrecognized VM option '%s'\n", argname); |
820 // Otherwise, report the standard unrecognized VM option. |
|
821 |
|
822 Flag* locked_flag = Flag::find_flag((char*)argname, strlen(argname), true); |
|
823 if (locked_flag != NULL) { |
|
824 char locked_message_buf[BUFLEN]; |
|
825 locked_flag->get_locked_message(locked_message_buf, BUFLEN); |
|
826 if (strlen(locked_message_buf) == 0) { |
|
827 jio_fprintf(defaultStream::error_stream(), |
|
828 "Unrecognized VM option '%s'\n", argname); |
|
829 } else { |
|
830 jio_fprintf(defaultStream::error_stream(), "%s", locked_message_buf); |
|
831 } |
|
832 } |
|
833 |
823 // allow for commandline "commenting out" options like -XX:#+Verbose |
834 // allow for commandline "commenting out" options like -XX:#+Verbose |
824 return arg[0] == '#'; |
835 return arg[0] == '#'; |
825 } |
836 } |
826 |
837 |
827 bool Arguments::process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized) { |
838 bool Arguments::process_settings_file(const char* file_name, bool should_exist, jboolean ignore_unrecognized) { |
1038 FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 2); |
1049 FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 2); |
1039 } |
1050 } |
1040 } |
1051 } |
1041 |
1052 |
1042 #ifndef KERNEL |
1053 #ifndef KERNEL |
|
1054 static void disable_adaptive_size_policy(const char* collector_name) { |
|
1055 if (UseAdaptiveSizePolicy) { |
|
1056 if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { |
|
1057 warning("disabling UseAdaptiveSizePolicy; it is incompatible with %s.", |
|
1058 collector_name); |
|
1059 } |
|
1060 FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); |
|
1061 } |
|
1062 } |
|
1063 |
1043 // If the user has chosen ParallelGCThreads > 0, we set UseParNewGC |
1064 // If the user has chosen ParallelGCThreads > 0, we set UseParNewGC |
1044 // if it's not explictly set or unset. If the user has chosen |
1065 // if it's not explictly set or unset. If the user has chosen |
1045 // UseParNewGC and not explicitly set ParallelGCThreads we |
1066 // UseParNewGC and not explicitly set ParallelGCThreads we |
1046 // set it, unless this is a single cpu machine. |
1067 // set it, unless this is a single cpu machine. |
1047 void Arguments::set_parnew_gc_flags() { |
1068 void Arguments::set_parnew_gc_flags() { |
1048 assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC, |
1069 assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC, |
1049 "control point invariant"); |
1070 "control point invariant"); |
1050 assert(UseParNewGC, "Error"); |
1071 assert(UseParNewGC, "Error"); |
1051 |
1072 |
1052 // Turn off AdaptiveSizePolicy by default for parnew until it is |
1073 // Turn off AdaptiveSizePolicy for parnew until it is complete. |
1053 // complete. |
1074 disable_adaptive_size_policy("UseParNewGC"); |
1054 if (FLAG_IS_DEFAULT(UseAdaptiveSizePolicy)) { |
|
1055 FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); |
|
1056 } |
|
1057 |
1075 |
1058 if (ParallelGCThreads == 0) { |
1076 if (ParallelGCThreads == 0) { |
1059 FLAG_SET_DEFAULT(ParallelGCThreads, |
1077 FLAG_SET_DEFAULT(ParallelGCThreads, |
1060 Abstract_VM_Version::parallel_worker_threads()); |
1078 Abstract_VM_Version::parallel_worker_threads()); |
1061 if (ParallelGCThreads == 1) { |
1079 if (ParallelGCThreads == 1) { |
1108 // unless explicitly forbidden. |
1126 // unless explicitly forbidden. |
1109 if (FLAG_IS_DEFAULT(UseParNewGC)) { |
1127 if (FLAG_IS_DEFAULT(UseParNewGC)) { |
1110 FLAG_SET_ERGO(bool, UseParNewGC, true); |
1128 FLAG_SET_ERGO(bool, UseParNewGC, true); |
1111 } |
1129 } |
1112 |
1130 |
1113 // Turn off AdaptiveSizePolicy by default for cms until it is |
1131 // Turn off AdaptiveSizePolicy for CMS until it is complete. |
1114 // complete. |
1132 disable_adaptive_size_policy("UseConcMarkSweepGC"); |
1115 if (FLAG_IS_DEFAULT(UseAdaptiveSizePolicy)) { |
|
1116 FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); |
|
1117 } |
|
1118 |
1133 |
1119 // In either case, adjust ParallelGCThreads and/or UseParNewGC |
1134 // In either case, adjust ParallelGCThreads and/or UseParNewGC |
1120 // as needed. |
1135 // as needed. |
1121 if (UseParNewGC) { |
1136 if (UseParNewGC) { |
1122 set_parnew_gc_flags(); |
1137 set_parnew_gc_flags(); |
1339 // that they want sharing explicitly, do not set ergonomics flags. |
1354 // that they want sharing explicitly, do not set ergonomics flags. |
1340 if (DumpSharedSpaces || RequireSharedSpaces) { |
1355 if (DumpSharedSpaces || RequireSharedSpaces) { |
1341 return; |
1356 return; |
1342 } |
1357 } |
1343 |
1358 |
1344 if (os::is_server_class_machine() && !force_client_mode ) { |
1359 if (os::is_server_class_machine()) { |
1345 // If no other collector is requested explicitly, |
1360 // If no other collector is requested explicitly, |
1346 // let the VM select the collector based on |
1361 // let the VM select the collector based on |
1347 // machine class and automatic selection policy. |
1362 // machine class and automatic selection policy. |
1348 if (!UseSerialGC && |
1363 if (!UseSerialGC && |
1349 !UseConcMarkSweepGC && |
1364 !UseConcMarkSweepGC && |
1364 #ifdef _LP64 |
1379 #ifdef _LP64 |
1365 // Check that UseCompressedOops can be set with the max heap size allocated |
1380 // Check that UseCompressedOops can be set with the max heap size allocated |
1366 // by ergonomics. |
1381 // by ergonomics. |
1367 if (MaxHeapSize <= max_heap_for_compressed_oops()) { |
1382 if (MaxHeapSize <= max_heap_for_compressed_oops()) { |
1368 #if !defined(COMPILER1) || defined(TIERED) |
1383 #if !defined(COMPILER1) || defined(TIERED) |
1369 // disable UseCompressedOops by default on MacOS X until 7118647 is fixed |
|
1370 #ifndef __APPLE__ |
|
1371 if (FLAG_IS_DEFAULT(UseCompressedOops)) { |
1384 if (FLAG_IS_DEFAULT(UseCompressedOops)) { |
1372 FLAG_SET_ERGO(bool, UseCompressedOops, true); |
1385 FLAG_SET_ERGO(bool, UseCompressedOops, true); |
1373 } |
1386 } |
1374 #endif // !__APPLE__ |
|
1375 #endif |
1387 #endif |
1376 #ifdef _WIN64 |
1388 #ifdef _WIN64 |
1377 if (UseLargePages && UseCompressedOops) { |
1389 if (UseLargePages && UseCompressedOops) { |
1378 // Cannot allocate guard pages for implicit checks in indexed addressing |
1390 // Cannot allocate guard pages for implicit checks in indexed addressing |
1379 // mode, when large pages are specified on windows. |
1391 // mode, when large pages are specified on windows. |
1394 #endif // !ZERO |
1406 #endif // !ZERO |
1395 } |
1407 } |
1396 |
1408 |
1397 void Arguments::set_parallel_gc_flags() { |
1409 void Arguments::set_parallel_gc_flags() { |
1398 assert(UseParallelGC || UseParallelOldGC, "Error"); |
1410 assert(UseParallelGC || UseParallelOldGC, "Error"); |
1399 // If parallel old was requested, automatically enable parallel scavenge. |
1411 // Enable ParallelOld unless it was explicitly disabled (cmd line or rc file). |
1400 if (UseParallelOldGC && !UseParallelGC && FLAG_IS_DEFAULT(UseParallelGC)) { |
1412 if (FLAG_IS_DEFAULT(UseParallelOldGC)) { |
1401 FLAG_SET_DEFAULT(UseParallelGC, true); |
1413 FLAG_SET_DEFAULT(UseParallelOldGC, true); |
1402 } |
1414 } |
|
1415 FLAG_SET_DEFAULT(UseParallelGC, true); |
1403 |
1416 |
1404 // If no heap maximum was requested explicitly, use some reasonable fraction |
1417 // If no heap maximum was requested explicitly, use some reasonable fraction |
1405 // of the physical memory, up to a maximum of 1GB. |
1418 // of the physical memory, up to a maximum of 1GB. |
1406 if (UseParallelGC) { |
1419 if (UseParallelGC) { |
1407 FLAG_SET_DEFAULT(ParallelGCThreads, |
1420 FLAG_SET_DEFAULT(ParallelGCThreads, |
2046 strcpy(altclasses_path, get_meta_index_dir()); |
2059 strcpy(altclasses_path, get_meta_index_dir()); |
2047 strcat(altclasses_path, altclasses_jar); |
2060 strcat(altclasses_path, altclasses_jar); |
2048 scp.add_suffix_to_prefix(altclasses_path); |
2061 scp.add_suffix_to_prefix(altclasses_path); |
2049 scp_assembly_required = true; |
2062 scp_assembly_required = true; |
2050 FREE_C_HEAP_ARRAY(char, altclasses_path); |
2063 FREE_C_HEAP_ARRAY(char, altclasses_path); |
|
2064 } |
|
2065 |
|
2066 if (WhiteBoxAPI) { |
|
2067 // Append wb.jar to bootclasspath if enabled |
|
2068 const char* wb_jar = "wb.jar"; |
|
2069 size_t wb_path_len = strlen(get_meta_index_dir()) + 1 + |
|
2070 strlen(wb_jar); |
|
2071 char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len); |
|
2072 strcpy(wb_path, get_meta_index_dir()); |
|
2073 strcat(wb_path, wb_jar); |
|
2074 scp.add_suffix(wb_path); |
|
2075 scp_assembly_required = true; |
|
2076 FREE_C_HEAP_ARRAY(char, wb_path); |
2051 } |
2077 } |
2052 |
2078 |
2053 // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) |
2079 // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) |
2054 result = parse_java_options_environment_variable(&scp, &scp_assembly_required); |
2080 result = parse_java_options_environment_variable(&scp, &scp_assembly_required); |
2055 if (result != JNI_OK) { |
2081 if (result != JNI_OK) { |
2507 // original allocation order after promotion, which improves mutator |
2533 // original allocation order after promotion, which improves mutator |
2508 // locality. A minor effect may be that larger PLABs reduce the |
2534 // locality. A minor effect may be that larger PLABs reduce the |
2509 // number of PLAB allocation events during gc. The value of 8kw |
2535 // number of PLAB allocation events during gc. The value of 8kw |
2510 // was arrived at by experimenting with specjbb. |
2536 // was arrived at by experimenting with specjbb. |
2511 FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K); // Note: this is in words |
2537 FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K); // Note: this is in words |
2512 |
|
2513 // CompilationPolicyChoice=0 causes the server compiler to adopt |
|
2514 // a more conservative which-method-do-I-compile policy when one |
|
2515 // of the counters maintained by the interpreter trips. The |
|
2516 // result is reduced startup time and improved specjbb and |
|
2517 // alacrity performance. Zero is the default, but we set it |
|
2518 // explicitly here in case the default changes. |
|
2519 // See runtime/compilationPolicy.*. |
|
2520 FLAG_SET_CMDLINE(intx, CompilationPolicyChoice, 0); |
|
2521 |
2538 |
2522 // Enable parallel GC and adaptive generation sizing |
2539 // Enable parallel GC and adaptive generation sizing |
2523 FLAG_SET_CMDLINE(bool, UseParallelGC, true); |
2540 FLAG_SET_CMDLINE(bool, UseParallelGC, true); |
2524 FLAG_SET_DEFAULT(ParallelGCThreads, |
2541 FLAG_SET_DEFAULT(ParallelGCThreads, |
2525 Abstract_VM_Version::parallel_worker_threads()); |
2542 Abstract_VM_Version::parallel_worker_threads()); |
2933 |
2950 |
2934 // Sharing support |
2951 // Sharing support |
2935 // Construct the path to the archive |
2952 // Construct the path to the archive |
2936 char jvm_path[JVM_MAXPATHLEN]; |
2953 char jvm_path[JVM_MAXPATHLEN]; |
2937 os::jvm_path(jvm_path, sizeof(jvm_path)); |
2954 os::jvm_path(jvm_path, sizeof(jvm_path)); |
2938 #ifdef TIERED |
|
2939 if (strstr(jvm_path, "client") != NULL) { |
|
2940 force_client_mode = true; |
|
2941 } |
|
2942 #endif // TIERED |
|
2943 char *end = strrchr(jvm_path, *os::file_separator()); |
2955 char *end = strrchr(jvm_path, *os::file_separator()); |
2944 if (end != NULL) *end = '\0'; |
2956 if (end != NULL) *end = '\0'; |
2945 char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + |
2957 char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + |
2946 strlen(os::file_separator()) + 20); |
2958 strlen(os::file_separator()) + 20); |
2947 if (shared_archive_path == NULL) return JNI_ENOMEM; |
2959 if (shared_archive_path == NULL) return JNI_ENOMEM; |