8079091: Remove dictionary NULL check on common path of BlockFreeList methods
Reviewed-by: kbarrett, stefank, dholmes, jmasa
--- a/hotspot/src/share/vm/memory/metaspace.cpp Mon May 04 17:10:50 2015 +0200
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Fri May 01 10:51:00 2015 -0700
@@ -252,7 +252,7 @@
// Used to manage the free list of Metablocks (a block corresponds
// to the allocation of a quantum of metadata).
class BlockFreelist VALUE_OBJ_CLASS_SPEC {
- BlockTreeDictionary* _dictionary;
+ BlockTreeDictionary* const _dictionary;
// Only allocate and split from freelist if the size of the allocation
// is at least 1/4th the size of the available block.
@@ -269,13 +269,7 @@
MetaWord* get_block(size_t word_size);
void return_block(MetaWord* p, size_t word_size);
- size_t total_size() {
- if (dictionary() == NULL) {
- return 0;
- } else {
- return dictionary()->total_size();
- }
-}
+ size_t total_size() { return dictionary()->total_size(); }
void print_on(outputStream* st) const;
};
@@ -814,30 +808,21 @@
// BlockFreelist methods
-BlockFreelist::BlockFreelist() : _dictionary(NULL) {}
+BlockFreelist::BlockFreelist() : _dictionary(new BlockTreeDictionary()) {}
BlockFreelist::~BlockFreelist() {
- if (_dictionary != NULL) {
- if (Verbose && TraceMetadataChunkAllocation) {
- _dictionary->print_free_lists(gclog_or_tty);
- }
- delete _dictionary;
+ if (Verbose && TraceMetadataChunkAllocation) {
+ dictionary()->print_free_lists(gclog_or_tty);
}
+ delete _dictionary;
}
void BlockFreelist::return_block(MetaWord* p, size_t word_size) {
Metablock* free_chunk = ::new (p) Metablock(word_size);
- if (dictionary() == NULL) {
- _dictionary = new BlockTreeDictionary();
- }
dictionary()->return_chunk(free_chunk);
}
MetaWord* BlockFreelist::get_block(size_t word_size) {
- if (dictionary() == NULL) {
- return NULL;
- }
-
if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
return NULL;
@@ -866,9 +851,6 @@
}
void BlockFreelist::print_on(outputStream* st) const {
- if (dictionary() == NULL) {
- return;
- }
dictionary()->print_free_lists(st);
}