< prev index next >
src/hotspot/share/gc/shared/referenceProcessor.cpp
Print this page
rev 47223 : [mq]: heapz8
rev 47224 : [mq]: heap9a
*** 33,42 ****
--- 33,43 ----
#include "gc/shared/referenceProcessor.inline.hpp"
#include "logging/log.hpp"
#include "memory/allocation.hpp"
#include "memory/resourceArea.hpp"
#include "oops/oop.inline.hpp"
+ #include "runtime/heapMonitoring.hpp"
#include "runtime/java.hpp"
#include "runtime/jniHandles.hpp"
ReferencePolicy* ReferenceProcessor::_always_clear_soft_ref_policy = NULL;
ReferencePolicy* ReferenceProcessor::_default_soft_ref_policy = NULL;
*** 256,268 ****
--- 257,277 ----
task_executor->set_single_threaded_mode();
}
process_phaseJNI(is_alive, keep_alive, complete_gc);
}
+ // Heap Monitoring references
+ size_t handled;
+ {
+ GCTraceTime(Debug, gc, ref) tt("Heap Sampler Weak Reference", phase_times->gc_timer());
+ handled = process_phaseHeapSampling(is_alive, keep_alive, complete_gc);
+ }
+
phase_times->set_total_time_ms((os::elapsedTime() - start_time) * 1000);
log_develop_trace(gc, ref)("JNI Weak Reference count: " SIZE_FORMAT, count_jni_refs());
+ log_develop_trace(gc, ref)("Heap Sampler Weak Reference handled: " SIZE_FORMAT, handled);
return stats;
}
#ifndef PRODUCT
*** 288,297 ****
--- 297,318 ----
VoidClosure* complete_gc) {
JNIHandles::weak_oops_do(is_alive, keep_alive);
complete_gc->do_void();
}
+ size_t ReferenceProcessor::process_phaseHeapSampling(
+ BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ VoidClosure* complete_gc) {
+ size_t count = 0;
+ if (HeapMonitoring::enabled()) {
+ count = HeapMonitoring::weak_oops_do(is_alive, keep_alive);
+ complete_gc->do_void();
+ }
+ return count;
+ }
+
void ReferenceProcessor::enqueue_discovered_references(AbstractRefProcTaskExecutor* task_executor,
ReferenceProcessorPhaseTimes* phase_times) {
// Enqueue references that are not made active again, and
// clear the decks for the next collection (cycle).
enqueue_discovered_reflists(task_executor, phase_times);
< prev index next >