--- old/src/hotspot/share/services/virtualMemoryTracker.hpp 2018-02-15 14:25:51.432101645 +0100 +++ new/src/hotspot/share/services/virtualMemoryTracker.hpp 2018-02-15 14:25:51.224094592 +0100 @@ -210,6 +210,8 @@ inline bool overlap_region(address addr, size_t sz) const { + assert(sz > 0, "Invalid size"); + assert(size() > 0, "Invalid size"); VirtualMemoryRegion rgn(addr, sz); return contain_address(addr) || contain_address(addr + sz - 1) || @@ -295,18 +297,14 @@ NativeCallStack _stack; MEMFLAGS _flag; - bool _all_committed; - public: ReservedMemoryRegion(address base, size_t size, const NativeCallStack& stack, MEMFLAGS flag = mtNone) : - VirtualMemoryRegion(base, size), _stack(stack), _flag(flag), - _all_committed(false) { } + VirtualMemoryRegion(base, size), _stack(stack), _flag(flag) { } ReservedMemoryRegion(address base, size_t size) : - VirtualMemoryRegion(base, size), _stack(NativeCallStack::EMPTY_STACK), _flag(mtNone), - _all_committed(false) { } + VirtualMemoryRegion(base, size), _stack(NativeCallStack::EMPTY_STACK), _flag(mtNone) { } // Copy constructor ReservedMemoryRegion(const ReservedMemoryRegion& rr) : @@ -347,9 +345,6 @@ // the new region void move_committed_regions(address addr, ReservedMemoryRegion& rgn); - inline bool all_committed() const { return _all_committed; } - void set_all_committed(bool b); - CommittedRegionIterator iterate_committed_regions() const { return CommittedRegionIterator(_committed_regions.head()); } @@ -360,17 +355,14 @@ _stack = *other.call_stack(); _flag = other.flag(); - _all_committed = other.all_committed(); - if (other.all_committed()) { - set_all_committed(true); - } else { - CommittedRegionIterator itr = other.iterate_committed_regions(); - const CommittedMemoryRegion* rgn = itr.next(); - while (rgn != NULL) { - _committed_regions.add(*rgn); - rgn = itr.next(); - } + + CommittedRegionIterator itr = other.iterate_committed_regions(); + const CommittedMemoryRegion* rgn = itr.next(); + while (rgn != NULL) { + _committed_regions.add(*rgn); + rgn = itr.next(); } + return *this; } @@ -380,6 +372,8 @@ bool remove_uncommitted_region(LinkedListNode* node, address addr, size_t sz); + void merge_with(LinkedListNode* node, address addr, size_t size, const NativeCallStack& stack); + bool add_committed_region(const CommittedMemoryRegion& rgn) { assert(rgn.base() != NULL, "Invalid base address"); assert(size() > 0, "Invalid size"); @@ -396,14 +390,15 @@ // Main class called from MemTracker to track virtual memory allocations, commits and releases. class VirtualMemoryTracker : AllStatic { + friend class VirtualMemoryTrackerTest; + public: static bool initialize(NMT_TrackingLevel level); // Late phase initialization static bool late_initialize(NMT_TrackingLevel level); - static bool add_reserved_region (address base_addr, size_t size, const NativeCallStack& stack, - MEMFLAGS flag = mtNone, bool all_committed = false); + static bool add_reserved_region (address base_addr, size_t size, const NativeCallStack& stack, MEMFLAGS flag = mtNone); static bool add_committed_region (address base_addr, size_t size, const NativeCallStack& stack); static bool remove_uncommitted_region (address base_addr, size_t size);