< prev index next >
src/hotspot/share/jfr/leakprofiler/chains/pathToGcRootsOperation.cpp
Print this page
rev 55949 : imported patch leak_profiler
@@ -24,11 +24,11 @@
#include "precompiled.hpp"
#include "gc/shared/collectedHeap.hpp"
#include "jfr/leakprofiler/leakProfiler.hpp"
#include "jfr/leakprofiler/chains/bfsClosure.hpp"
-#include "jfr/leakprofiler/chains/bitset.hpp"
+#include "jfr/leakprofiler/chains/bitset.inline.hpp"
#include "jfr/leakprofiler/chains/dfsClosure.hpp"
#include "jfr/leakprofiler/chains/edge.hpp"
#include "jfr/leakprofiler/chains/edgeQueue.hpp"
#include "jfr/leakprofiler/chains/edgeStore.hpp"
#include "jfr/leakprofiler/chains/objectSampleMarker.hpp"
@@ -55,12 +55,12 @@
* We will attempt to dimension an initial reservation
* in proportion to the size of the heap (represented by heap_region).
* Initial memory reservation: 5% of the heap OR at least 32 Mb
* Commit ratio: 1 : 10 (subject to allocation granularties)
*/
-static size_t edge_queue_memory_reservation(const MemRegion& heap_region) {
- const size_t memory_reservation_bytes = MAX2(heap_region.byte_size() / 20, 32*M);
+static size_t edge_queue_memory_reservation() {
+ const size_t memory_reservation_bytes = MAX2(MaxHeapSize / 20, 32*M);
assert(memory_reservation_bytes >= (size_t)32*M, "invariant");
return memory_reservation_bytes;
}
static size_t edge_queue_memory_commit_size(size_t memory_reservation_bytes) {
@@ -82,21 +82,20 @@
void PathToGcRootsOperation::doit() {
assert(SafepointSynchronize::is_at_safepoint(), "invariant");
assert(_cutoff_ticks > 0, "invariant");
// The bitset used for marking is dimensioned as a function of the heap size
- const MemRegion heap_region = Universe::heap()->reserved_region();
- BitSet mark_bits(heap_region);
+ BitSet mark_bits;
// The edge queue is dimensioned as a fraction of the heap size
- const size_t edge_queue_reservation_size = edge_queue_memory_reservation(heap_region);
+ const size_t edge_queue_reservation_size = edge_queue_memory_reservation();
EdgeQueue edge_queue(edge_queue_reservation_size, edge_queue_memory_commit_size(edge_queue_reservation_size));
// The initialize() routines will attempt to reserve and allocate backing storage memory.
// Failure to accommodate will render root chain processing impossible.
// As a fallback on failure, just write out the existing samples, flat, without chains.
- if (!(mark_bits.initialize() && edge_queue.initialize())) {
+ if (!edge_queue.initialize()) {
log_warning(jfr)("Unable to allocate memory for root chain processing");
return;
}
// Save the original markWord for the potential leak objects,
< prev index next >