comparison src/share/vm/runtime/arguments.cpp @ 6152:958bb4b7be49

Merge
author asaha
date Tue, 10 Apr 2012 10:42:34 -0700
parents 1e76463170b3 ad412114302a
children 84e198dc2474
comparison
equal deleted inserted replaced
6151:e778c29768e6 6152:958bb4b7be49
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;