< prev index next > src/hotspot/share/memory/metaspace.cpp
Print this page
}
////// Metaspace methods /////
const MetaspaceTracer* Metaspace::_tracer = nullptr;
+ const void* Metaspace::_class_space_start = nullptr;
+ const void* Metaspace::_class_space_end = nullptr;
bool Metaspace::initialized() {
return metaspace::MetaspaceContext::context_nonclass() != nullptr
LP64_ONLY(&& (using_class_space() ? Metaspace::class_space_is_initialized() : true));
}
assert(is_aligned(rs.base(), Metaspace::reserve_alignment()) &&
is_aligned(rs.size(), Metaspace::reserve_alignment()),
"wrong alignment");
MetaspaceContext::initialize_class_space_context(rs);
+ _class_space_start = rs.base();
+ _class_space_end = rs.end();
}
// Returns true if class space has been setup (initialize_class_space).
bool Metaspace::class_space_is_initialized() {
return MetaspaceContext::context_class() != nullptr;
// Initialize space
Metaspace::initialize_class_space(rs);
// Set up compressed class pointer encoding.
+ // In CDS=off mode, we give the JVM some leeway to choose a favorable base/shift combination.
CompressedKlassPointers::initialize((address)rs.base(), rs.size());
}
#endif
// Try to allocate metadata.
MetaWord* result = loader_data->metaspace_non_null()->allocate(word_size, mdtype);
if (result != nullptr) {
+ #ifdef ASSERT
+ if (using_class_space() && mdtype == ClassType) {
+ assert(is_in_class_space(result) &&
+ is_aligned(result, CompressedKlassPointers::klass_alignment_in_bytes()), "Sanity");
+ } else {
+ assert((is_in_class_space(result) || is_in_nonclass_metaspace(result)) &&
+ is_aligned(result, Metaspace::min_allocation_alignment_bytes), "Sanity");
+ }
+ #endif
// Zero initialize.
Copy::fill_to_words((HeapWord*)result, word_size, 0);
-
log_trace(metaspace)("Metaspace::allocate: type %d return " PTR_FORMAT ".", (int)type, p2i(result));
}
return result;
}
// classes have been unloaded. However, this call is required for the code
// in MetaspaceCriticalAllocation::try_allocate_critical to work.
MetaspaceCriticalAllocation::process();
}
- bool Metaspace::contains(const void* ptr) {
- if (MetaspaceShared::is_in_shared_metaspace(ptr)) {
- return true;
- }
- return contains_non_shared(ptr);
+ // Returns true if pointer points into one of the metaspace regions, or
+ // into the class space.
+ bool Metaspace::is_in_shared_metaspace(const void* ptr) {
+ return MetaspaceShared::is_in_shared_metaspace(ptr);
}
- bool Metaspace::contains_non_shared(const void* ptr) {
- if (using_class_space() && VirtualSpaceList::vslist_class()->contains((MetaWord*)ptr)) {
- return true;
- }
-
+ // Returns true if pointer points into one of the non-class-space metaspace regions.
+ bool Metaspace::is_in_nonclass_metaspace(const void* ptr) {
return VirtualSpaceList::vslist_nonclass()->contains((MetaWord*)ptr);
}
< prev index next >