< prev index next >
src/share/vm/gc/shared/referenceProcessor.cpp
Print this page
rev 13139 : [mq]: heap7
*** 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;
*** 255,267 ****
--- 256,275 ----
task_executor->set_single_threaded_mode();
}
process_phaseJNI(is_alive, keep_alive, complete_gc);
}
+ size_t handled;
+ {
+ GCTraceTime(Debug, gc, ref) tt("Heap Monitoring Weak Reference", gc_timer);
+ handled = process_phaseHeapSampling(is_alive, keep_alive, complete_gc, task_executor);
+ }
+
log_debug(gc, ref)("Ref Counts: Soft: " SIZE_FORMAT " Weak: " SIZE_FORMAT " Final: " SIZE_FORMAT " Phantom: " SIZE_FORMAT,
stats.soft_count(), stats.weak_count(), stats.final_count(), stats.phantom_count());
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
*** 287,296 ****
--- 295,320 ----
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,
+ AbstractRefProcTaskExecutor* task_executor) {
+ size_t count = 0;
+ if (HeapMonitoring::enabled()) {
+ if (task_executor != NULL) {
+ task_executor->set_single_threaded_mode();
+ }
+ count = HeapMonitoring::weak_oops_do(is_alive, keep_alive);
+ complete_gc->do_void();
+ }
+ return count;
+ }
+
void ReferenceProcessor::enqueue_discovered_references(AbstractRefProcTaskExecutor* task_executor) {
// Enqueue references that are not made active again, and
// clear the decks for the next collection (cycle).
enqueue_discovered_reflists(task_executor);
< prev index next >