--- a/src/hotspot/share/memory/metaspace/virtualSpaceList.hpp Fri Apr 05 09:18:18 2019 +0200
+++ b/src/hotspot/share/memory/metaspace/virtualSpaceList.hpp Wed Mar 27 14:13:34 2019 +0100
@@ -58,6 +58,19 @@
// Number of virtual spaces
size_t _virtual_space_count;
+ // Optimization: we keep an address range to quickly exclude pointers
+ // which are clearly not pointing into metaspace. This is an optimization for
+ // VirtualSpaceList::contains().
+ address _envelope_lo;
+ address _envelope_hi;
+
+ bool is_within_envelope(address p) const {
+ return p >= _envelope_lo && p < _envelope_hi;
+ }
+
+ // Given a node, expand range such that it includes the node.
+ void expand_envelope_to_include_node(const VirtualSpaceNode* node);
+
~VirtualSpaceList();
VirtualSpaceNode* virtual_space_list() const { return _virtual_space_list; }
@@ -80,6 +93,8 @@
// virtual space and add the chunks to the free list.
void retire_current_virtual_space();
+ DEBUG_ONLY(bool contains_node(const VirtualSpaceNode* node) const;)
+
public:
VirtualSpaceList(size_t word_size);
VirtualSpaceList(ReservedSpace rs);
@@ -126,6 +141,8 @@
void print_on(outputStream* st, size_t scale) const;
void print_map(outputStream* st) const;
+ DEBUG_ONLY(void verify(bool slow);)
+
class VirtualSpaceListIterator : public StackObj {
VirtualSpaceNode* _virtual_spaces;
public: