src/share/vm/memory/metaspace.cpp
Print this page
rev 6149 : 8037952: Remove code duplication in Metaspace::deallocate
Reviewed-by: TBD1, TBD2
*** 3341,3367 ****
size_t Metaspace::capacity_bytes_slow(MetadataType mdtype) const {
return capacity_words_slow(mdtype) * BytesPerWord;
}
void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) {
! if (SafepointSynchronize::is_at_safepoint()) {
! assert(Thread::current()->is_VM_thread(), "should be the VM thread");
! // Don't take Heap_lock
! MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag);
! if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
! // Dark matter. Too small for dictionary.
! #ifdef ASSERT
! Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5);
! #endif
! return;
! }
! if (is_class && using_class_space()) {
! class_vsm()->deallocate(ptr, word_size);
! } else {
! vsm()->deallocate(ptr, word_size);
! }
! } else {
MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag);
if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
#ifdef ASSERT
--- 3341,3353 ----
size_t Metaspace::capacity_bytes_slow(MetadataType mdtype) const {
return capacity_words_slow(mdtype) * BytesPerWord;
}
void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) {
! assert(!SafepointSynchronize::is_at_safepoint()
! || Thread::current()->is_VM_thread(), "should be the VM thread");
!
MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag);
if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
#ifdef ASSERT
*** 3372,3382 ****
if (is_class && using_class_space()) {
class_vsm()->deallocate(ptr, word_size);
} else {
vsm()->deallocate(ptr, word_size);
}
- }
}
MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size,
bool read_only, MetaspaceObj::Type type, TRAPS) {
--- 3358,3367 ----