--- a/src/hotspot/share/memory/metaspace/classLoaderMetaspace.cpp Thu Sep 19 16:28:40 2019 +0200
+++ b/src/hotspot/share/memory/metaspace/classLoaderMetaspace.cpp Wed Sep 25 12:40:57 2019 +0200
@@ -42,14 +42,17 @@
namespace metaspace {
static bool use_class_space(bool is_class) {
- if (Metaspace::using_class_space()) {
- if (is_class) {
- return true;
- }
+ if (Metaspace::using_class_space() && is_class) {
+ return true;
}
return false;
}
+static bool is_micro_cld(MetaspaceType space_type) {
+ return space_type == metaspace::UnsafeAnonymousMetaspaceType ||
+ space_type == metaspace::ReflectionMetaspaceType;
+}
+
static bool use_class_space(MetadataType mdType) {
return use_class_space(is_class(mdType));
}
@@ -60,9 +63,14 @@
, _non_class_space_manager(NULL)
, _class_space_manager(NULL)
{
+ ChunkManager* const non_class_cm =
+ is_micro_cld(_space_type) && Settings::separate_micro_cld_allocations() ?
+ ChunkManager::chunkmanager_microclds_nonclass() :
+ ChunkManager::chunkmanager_nonclass();
+
// Initialize non-class spacemanager
_non_class_space_manager = new SpaceManager(
- ChunkManager::chunkmanager_nonclass(),
+ non_class_cm,
ChunkAllocSequence::alloc_sequence_by_space_type(space_type, false),
lock,
RunningCounters::used_nonclass_counter(),
@@ -70,8 +78,12 @@
// If needed, initialize class spacemanager
if (Metaspace::using_class_space()) {
+ ChunkManager* const class_cm =
+ is_micro_cld(_space_type) && Settings::separate_micro_cld_allocations() ?
+ ChunkManager::chunkmanager_microclds_class() :
+ ChunkManager::chunkmanager_class();
_class_space_manager = new SpaceManager(
- ChunkManager::chunkmanager_class(),
+ class_cm,
ChunkAllocSequence::alloc_sequence_by_space_type(space_type, true),
lock,
RunningCounters::used_class_counter(),