< prev index next >
src/share/vm/memory/metaspace.cpp
Print this page
@@ -250,11 +250,11 @@
};
// 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.
const static int WasteMultiplier = 4;
@@ -267,17 +267,11 @@
// Get and return a block to the free list
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;
};
// A VirtualSpaceList node.
@@ -812,11 +806,14 @@
}
#endif
// BlockFreelist methods
-BlockFreelist::BlockFreelist() : _dictionary(NULL) {}
+BlockFreelist::BlockFreelist()
+ : _dictionary(new BlockTreeDictionary()) {
+ assert(_dictionary != NULL, "Failed to allocate BlockTreeDictionary");
+}
BlockFreelist::~BlockFreelist() {
if (_dictionary != NULL) {
if (Verbose && TraceMetadataChunkAllocation) {
_dictionary->print_free_lists(gclog_or_tty);
@@ -825,21 +822,14 @@
}
}
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;
}
@@ -864,13 +854,10 @@
return new_block;
}
void BlockFreelist::print_on(outputStream* st) const {
- if (dictionary() == NULL) {
- return;
- }
dictionary()->print_free_lists(st);
}
// VirtualSpaceNode methods
< prev index next >