src/share/vm/runtime/arguments.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
bug_8003424.4 Cdiff src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
Print this page
*** 1391,1404 ****
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 &&
--- 1391,1402 ----
return true;
}
inline uintx max_heap_for_compressed_oops() {
// Avoid sign flip.
! assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
! LP64_ONLY(return OopEncodingHeapMax - os::vm_page_size());
NOT_LP64(ShouldNotReachHere(); return 0);
}
bool Arguments::should_auto_select_low_pause_collector() {
if (UseAutoGCSelectPolicy &&
*** 1446,1455 ****
--- 1444,1482 ----
}
#endif // _LP64
#endif // ZERO
}
+
+ // NOTE: set_use_compressed_klass_ptrs() must be called after calling
+ // set_use_compressed_oops().
+ void Arguments::set_use_compressed_klass_ptrs() {
+ #ifndef ZERO
+ #ifdef _LP64
+ // UseCompressedOops must be on for UseCompressedKlassPointers to be on.
+ if (!UseCompressedOops) {
+ if (UseCompressedKlassPointers) {
+ warning("UseCompressedKlassPointers requires UseCompressedOops");
+ }
+ FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
+ } else {
+ // Turn on UseCompressedKlassPointers too
+ if (FLAG_IS_DEFAULT(UseCompressedKlassPointers)) {
+ FLAG_SET_ERGO(bool, UseCompressedKlassPointers, true);
+ }
+ // Check the ClassMetaspaceSize to make sure we use compressed klass ptrs.
+ if (UseCompressedKlassPointers) {
+ if (ClassMetaspaceSize > KlassEncodingMetaspaceMax) {
+ warning("Class metaspace size is too large for UseCompressedKlassPointers");
+ FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
+ }
+ }
+ }
+ #endif // _LP64
+ #endif // !ZERO
+ }
+
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
*** 1468,1512 ****
// Shared spaces work fine with other GCs but causes bytecode rewriting
// to be disabled, which hurts interpreter performance and decreases
// server performance. On server class machines, keep the default
// off unless it is asked for. Future work: either add bytecode rewriting
// at link time, or rewrite bytecodes in non-shared methods.
! if (!DumpSharedSpaces && !RequireSharedSpaces) {
no_shared_spaces();
}
}
#ifndef ZERO
#ifdef _LP64
set_use_compressed_oops();
! // UseCompressedOops must be on for UseCompressedKlassPointers to be on.
! if (!UseCompressedOops) {
! if (UseCompressedKlassPointers) {
! warning("UseCompressedKlassPointers requires UseCompressedOops");
! }
! FLAG_SET_DEFAULT(UseCompressedKlassPointers, false);
! } else {
! // Turn on UseCompressedKlassPointers too
! if (FLAG_IS_DEFAULT(UseCompressedKlassPointers)) {
! FLAG_SET_ERGO(bool, UseCompressedKlassPointers, true);
! }
! // Set the ClassMetaspaceSize to something that will not need to be
! // 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.
#endif // _LP64
#endif // !ZERO
}
--- 1495,1518 ----
// Shared spaces work fine with other GCs but causes bytecode rewriting
// to be disabled, which hurts interpreter performance and decreases
// server performance. On server class machines, keep the default
// off unless it is asked for. Future work: either add bytecode rewriting
// at link time, or rewrite bytecodes in non-shared methods.
! if (!DumpSharedSpaces && !RequireSharedSpaces &&
! (FLAG_IS_DEFAULT(UseSharedSpaces) || !UseSharedSpaces)) {
no_shared_spaces();
}
}
#ifndef ZERO
#ifdef _LP64
set_use_compressed_oops();
!
! // set_use_compressed_klass_ptrs() must be called after calling
! // set_use_compressed_oops().
! set_use_compressed_klass_ptrs();
!
// Also checks that certain machines are slower with compressed oops
// in vm_version initialization code.
#endif // _LP64
#endif // !ZERO
}
*** 2151,2161 ****
status = status && verify_interval(TLABWasteTargetPercent,
1, 100, "TLABWasteTargetPercent");
status = status && verify_object_alignment();
! status = status && verify_min_value(ClassMetaspaceSize, 1*M,
"ClassMetaspaceSize");
status = status && verify_interval(MarkStackSizeMax,
1, (max_jint - 1), "MarkStackSizeMax");
status = status && verify_interval(NUMAChunkResizeWeight, 0, 100, "NUMAChunkResizeWeight");
--- 2157,2167 ----
status = status && verify_interval(TLABWasteTargetPercent,
1, 100, "TLABWasteTargetPercent");
status = status && verify_object_alignment();
! status = status && verify_interval(ClassMetaspaceSize, 1*M, 3*G,
"ClassMetaspaceSize");
status = status && verify_interval(MarkStackSizeMax,
1, (max_jint - 1), "MarkStackSizeMax");
status = status && verify_interval(NUMAChunkResizeWeight, 0, 100, "NUMAChunkResizeWeight");
*** 3271,3307 ****
}
return JNI_OK;
}
void Arguments::set_shared_spaces_flags() {
- #ifdef _LP64
- const bool must_share = DumpSharedSpaces || RequireSharedSpaces;
-
- // CompressedOops cannot be used with CDS. The offsets of oopmaps and
- // static fields are incorrect in the archive. With some more clever
- // initialization, this restriction can probably be lifted.
- if (UseCompressedOops) {
- if (must_share) {
- warning("disabling compressed oops because of %s",
- DumpSharedSpaces ? "-Xshare:dump" : "-Xshare:on");
- FLAG_SET_CMDLINE(bool, UseCompressedOops, false);
- FLAG_SET_CMDLINE(bool, UseCompressedKlassPointers, false);
- } else {
- // Prefer compressed oops to class data sharing
- if (UseSharedSpaces && Verbose) {
- warning("turning off use of shared archive because of compressed oops");
- }
- no_shared_spaces();
- }
- }
- #endif
-
if (DumpSharedSpaces) {
if (RequireSharedSpaces) {
warning("cannot dump shared archive while using shared archive");
}
UseSharedSpaces = false;
}
}
#if !INCLUDE_ALL_GCS
static void force_serial_gc() {
--- 3277,3302 ----
}
return JNI_OK;
}
void Arguments::set_shared_spaces_flags() {
if (DumpSharedSpaces) {
if (RequireSharedSpaces) {
warning("cannot dump shared archive while using shared archive");
}
UseSharedSpaces = false;
+ #ifdef _LP64
+ if (!UseCompressedOops || !UseCompressedKlassPointers) {
+ vm_exit_during_initialization(
+ "Cannot dump shared archive when UseCompressedOops or UseCompressedKlassPointers is off.", NULL);
+ }
+ } else {
+ // UseCompressedOops and UseCompressedKlassPointers must be on for UseSharedSpaces.
+ if (!UseCompressedOops || !UseCompressedKlassPointers) {
+ no_shared_spaces();
+ }
+ #endif
}
}
#if !INCLUDE_ALL_GCS
static void force_serial_gc() {
src/share/vm/runtime/arguments.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File