src/share/vm/runtime/arguments.cpp

Print this page

        

*** 50,60 **** --- 50,63 ---- # include "os_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" #endif + #include "memory/genCollectedHeap.hpp" #if INCLUDE_ALL_GCS + #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" + #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" #endif // INCLUDE_ALL_GCS // Note: This is a special bug reporting site for the JVM #define DEFAULT_VENDOR_URL_BUG "http://bugreport.sun.com/bugreport/crash.jsp"
*** 67,76 **** --- 70,80 ---- char* Arguments::_java_command = NULL; SystemProperty* Arguments::_system_properties = NULL; const char* Arguments::_gc_log_filename = NULL; bool Arguments::_has_profile = false; bool Arguments::_has_alloc_profile = false; + size_t Arguments::_max_heap_alignment = 0; uintx Arguments::_min_heap_size = 0; Arguments::Mode Arguments::_mode = _mixed; bool Arguments::_java_compiler = false; bool Arguments::_xdebug_mode = false; const char* Arguments::_java_vendor_url_bug = DEFAULT_VENDOR_URL_BUG;
*** 1352,1367 **** return false; } return true; } ! inline uintx max_heap_for_compressed_oops() { // Avoid sign flip. ! if (OopEncodingHeapMax < ClassMetaspaceSize + os::vm_page_size()) { return 0; } ! LP64_ONLY(return OopEncodingHeapMax - ClassMetaspaceSize - os::vm_page_size()); NOT_LP64(ShouldNotReachHere(); return 0); } bool Arguments::should_auto_select_low_pause_collector() { if (UseAutoGCSelectPolicy && --- 1356,1391 ---- return false; } return true; } ! bool Arguments::apply_ergonomics_on_classmetaspacesize() { ! return FLAG_IS_DEFAULT(ClassMetaspaceSize); ! } ! ! size_t Arguments::max_heap_for_compressed_oops() { ! // determine the maximum heap size that allows compressed oops. Use the theoretical ! // maximum (OopEncodingHeapMax) and subtract the sizes of other areas that need ! // to be below that maximum. Use a conservative estimate on the alignment returned ! // by max_heap_alignment() to calculate these estimates for the other areas. ! // We need to apply the alignment on all areas separately to make sure that later, ! // when aligning the final heap size up, all sizes fit below the absolute maximum. ! ! // the absolute theoretical maximum ! size_t max_total_heap = OopEncodingHeapMax; ! ! size_t max_class_metaspace_size = ClassMetaspaceSize; ! if (apply_ergonomics_on_classmetaspacesize()) { ! max_class_metaspace_size = MAX2(max_class_metaspace_size, ErgoClassMetaspaceSize); ! } ! size_t aligned_metaspace_size = align_size_up_(max_class_metaspace_size, max_heap_alignment()); ! size_t aligned_page_size = align_size_up_(os::vm_page_size(), max_heap_alignment()); // Avoid sign flip. ! if (max_total_heap < aligned_metaspace_size + aligned_page_size) { return 0; } ! LP64_ONLY(return max_total_heap - aligned_metaspace_size - aligned_page_size); NOT_LP64(ShouldNotReachHere(); return 0); } bool Arguments::should_auto_select_low_pause_collector() { if (UseAutoGCSelectPolicy &&
*** 1409,1418 **** --- 1433,1459 ---- } #endif // _LP64 #endif // ZERO } + void Arguments::set_max_heap_alignment() { + size_t gc_alignment; + #if INCLUDE_ALL_GCS + if (UseParallelGC) { + gc_alignment = ParallelScavengeHeap::max_heap_alignment(); + } else if (UseG1GC) { + gc_alignment = G1CollectedHeap::max_heap_alignment(); + } else { + #endif // INCLUDE_ALL_GCS + gc_alignment = GenCollectedHeap::max_heap_alignment(); + #if INCLUDE_ALL_GCS + } + #endif // INCLUDE_ALL_GCS + _max_heap_alignment = MAX3(gc_alignment, os::max_page_size(), + CollectorPolicy::compute_max_alignment()); + } + void Arguments::set_ergonomics_flags() { if (os::is_server_class_machine()) { // If no other collector is requested explicitly, // let the VM select the collector based on
*** 1436,1445 **** --- 1477,1488 ---- if (!DumpSharedSpaces && !RequireSharedSpaces) { no_shared_spaces(); } } + set_max_heap_alignment(); + #ifndef ZERO #ifdef _LP64 set_use_compressed_oops(); // UseCompressedOops must be on for UseCompressedKlassPointers to be on. if (!UseCompressedOops) {
*** 1456,1472 **** // expanded, since it cannot be expanded. if (UseCompressedKlassPointers) { if (ClassMetaspaceSize > KlassEncodingMetaspaceMax) { warning("Class metaspace size is too large for UseCompressedKlassPointers"); FLAG_SET_DEFAULT(UseCompressedKlassPointers, false); ! } else if (FLAG_IS_DEFAULT(ClassMetaspaceSize)) { // 100,000 classes seems like a good size, so 100M assumes around 1K // per klass. The vtable and oopMap is embedded so we don't have a fixed // size per klass. Eventually, this will be parameterized because it // would also be useful to determine the optimal size of the // systemDictionary. ! FLAG_SET_ERGO(uintx, ClassMetaspaceSize, 100*M); } } } // Also checks that certain machines are slower with compressed oops // in vm_version initialization code. --- 1499,1515 ---- // expanded, since it cannot be expanded. if (UseCompressedKlassPointers) { if (ClassMetaspaceSize > KlassEncodingMetaspaceMax) { warning("Class metaspace size is too large for UseCompressedKlassPointers"); FLAG_SET_DEFAULT(UseCompressedKlassPointers, false); ! } else if (apply_ergonomics_on_classmetaspacesize()) { // 100,000 classes seems like a good size, so 100M assumes around 1K // per klass. The vtable and oopMap is embedded so we don't have a fixed // size per klass. Eventually, this will be parameterized because it // would also be useful to determine the optimal size of the // systemDictionary. ! FLAG_SET_ERGO(uintx, ClassMetaspaceSize, ErgoClassMetaspaceSize); } } } // Also checks that certain machines are slower with compressed oops // in vm_version initialization code.
*** 3358,3367 **** --- 3401,3415 ---- FLAG_SET_DEFAULT(PrintSharedSpaces, false); } no_shared_spaces(); #endif // INCLUDE_CDS + // We need to initialize large page support here because ergonomics takes some + // decisions depending on large page support and the calculated large page size. + // Ergonomics may turn off large page support off later again. + os::large_page_init(); + // Set flags based on ergonomics. set_ergonomics_flags(); set_shared_spaces_flags();