8025279: metaspace/flags/maxMetaspaceSize throws OOM: out of Compressed Klass space
Summary: Only put "Compressed class space" as OOM cause if actually using Compressed class space
Reviewed-by: jwilhelm, stefank, ehelin, coleenp
--- a/hotspot/src/share/vm/memory/metaspace.cpp Thu Sep 26 12:49:45 2013 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Fri Sep 27 10:23:12 2013 +0200
@@ -3104,7 +3104,7 @@
MetaWord* Metaspace::allocate(size_t word_size, MetadataType mdtype) {
// DumpSharedSpaces doesn't use class metadata area (yet)
// Also, don't use class_vsm() unless UseCompressedClassPointers is true.
- if (mdtype == ClassType && using_class_space()) {
+ if (is_class_space_allocation(mdtype)) {
return class_vsm()->allocate(word_size);
} else {
return vsm()->allocate(word_size);
@@ -3252,8 +3252,8 @@
MetaspaceAux::dump(gclog_or_tty);
}
// -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
- const char* space_string = (mdtype == ClassType) ? "Compressed class space" :
- "Metadata space";
+ const char* space_string = is_class_space_allocation(mdtype) ? "Compressed class space" :
+ "Metadata space";
report_java_out_of_memory(space_string);
if (JvmtiExport::should_post_resource_exhausted()) {
@@ -3261,7 +3261,7 @@
JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
space_string);
}
- if (mdtype == ClassType) {
+ if (is_class_space_allocation(mdtype)) {
THROW_OOP_0(Universe::out_of_memory_error_class_metaspace());
} else {
THROW_OOP_0(Universe::out_of_memory_error_metaspace());
--- a/hotspot/src/share/vm/memory/metaspace.hpp Thu Sep 26 12:49:45 2013 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.hpp Fri Sep 27 10:23:12 2013 +0200
@@ -235,6 +235,9 @@
return NOT_LP64(false) LP64_ONLY(UseCompressedClassPointers && !DumpSharedSpaces);
}
+ static bool is_class_space_allocation(MetadataType mdType) {
+ return mdType == ClassType && using_class_space();
+ }
};
class MetaspaceAux : AllStatic {