--- old/src/share/vm/memory/metaspace.cpp 2015-06-17 22:37:59.640975239 +0900 +++ new/src/share/vm/memory/metaspace.cpp 2015-06-17 22:37:59.127977703 +0900 @@ -3197,6 +3197,13 @@ CompressedClassSpaceSize = align_size_down_bounded(CompressedClassSpaceSize, _reserve_alignment); set_compressed_class_space_size(CompressedClassSpaceSize); + + if (!UseCompressedClassPointers && + (InitialBootClassLoaderMetaspaceSize >= MaxMetaspaceSize)) { + FLAG_SET_ERGO(size_t, InitialBootClassLoaderMetaspaceSize, + MaxMetaspaceSize); + } + } void Metaspace::global_initialize() { --- old/src/share/vm/runtime/arguments.cpp 2015-06-17 22:38:01.424966668 +0900 +++ new/src/share/vm/runtime/arguments.cpp 2015-06-17 22:38:00.965968873 +0900 @@ -1522,6 +1522,18 @@ } // Check the CompressedClassSpaceSize to make sure we use compressed klass ptrs. if (UseCompressedClassPointers) { + if ((InitialBootClassLoaderMetaspaceSize + CompressedClassSpaceSize) + >= MaxMetaspaceSize) { + if (InitialBootClassLoaderMetaspaceSize >= MaxMetaspaceSize) { + vm_exit_during_initialization( + "InitialBootClassLoaderMetaspaceSize should be " + "less than MaxMetaspaceSize."); + } else { + FLAG_SET_ERGO(size_t, CompressedClassSpaceSize, + MaxMetaspaceSize - InitialBootClassLoaderMetaspaceSize); + } + } + if (CompressedClassSpaceSize > KlassEncodingMetaspaceMax) { warning("CompressedClassSpaceSize is too large for UseCompressedClassPointers"); FLAG_SET_DEFAULT(UseCompressedClassPointers, false);