# HG changeset patch # User stefank # Date 1458052182 -3600 # Node ID e89fc0bf4ecb3e1b66b9222ee6b621826f3309bc # Parent e66ce2ddedf862dc89cf65ddce6678be0c19a8b3# Parent 0856b64af754f6290dc68ca743211936d74d2f21 Merge diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp --- a/hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -220,12 +220,6 @@ } }; -class G1AlwaysTrueClosure: public BoolObjectClosure { -public: - bool do_object_b(oop p) { return true; } -}; -static G1AlwaysTrueClosure always_true; - void G1MarkSweep::mark_sweep_phase3() { G1CollectedHeap* g1h = G1CollectedHeap::heap(); @@ -248,7 +242,7 @@ // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) - JNIHandles::weak_oops_do(&always_true, &GenMarkSweep::adjust_pointer_closure); + JNIHandles::weak_oops_do(&GenMarkSweep::adjust_pointer_closure); if (G1StringDedup::is_enabled()) { G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure); diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp --- a/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -570,13 +570,6 @@ old_gen->precompact(); } -// This should be moved to the shared markSweep code! -class PSAlwaysTrueClosure: public BoolObjectClosure { -public: - bool do_object_b(oop p) { return true; } -}; -static PSAlwaysTrueClosure always_true; - void PSMarkSweep::mark_sweep_phase3() { // Adjust the pointers to reflect the new locations GCTraceTime(Trace, gc) tm("Phase 3: Adjust pointers", _gc_timer); @@ -603,7 +596,7 @@ // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) // Global (weak) JNI handles - JNIHandles::weak_oops_do(&always_true, adjust_pointer_closure()); + JNIHandles::weak_oops_do(adjust_pointer_closure()); CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations); CodeCache::blobs_do(&adjust_from_blobs); diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp --- a/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -2125,13 +2125,6 @@ _gc_tracer.report_object_count_after_gc(is_alive_closure()); } -// This should be moved to the shared markSweep code! -class PSAlwaysTrueClosure: public BoolObjectClosure { -public: - bool do_object_b(oop p) { return true; } -}; -static PSAlwaysTrueClosure always_true; - void PSParallelCompact::adjust_roots(ParCompactionManager* cm) { // Adjust the pointers to reflect the new locations GCTraceTime(Trace, gc, phases) tm("Adjust Roots", &_gc_timer); @@ -2157,7 +2150,7 @@ // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) // Global (weak) JNI handles - JNIHandles::weak_oops_do(&always_true, &oop_closure); + JNIHandles::weak_oops_do(&oop_closure); CodeBlobToOopClosure adjust_from_blobs(&oop_closure, CodeBlobToOopClosure::FixRelocations); CodeCache::blobs_do(&adjust_from_blobs); diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp --- a/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -684,15 +684,8 @@ _process_strong_tasks->all_tasks_completed(scope->n_threads()); } - -class AlwaysTrueClosure: public BoolObjectClosure { -public: - bool do_object_b(oop p) { return true; } -}; -static AlwaysTrueClosure always_true; - void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure) { - JNIHandles::weak_oops_do(&always_true, root_closure); + JNIHandles::weak_oops_do(root_closure); _young_gen->ref_processor()->weak_oops_do(root_closure); _old_gen->ref_processor()->weak_oops_do(root_closure); } diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/gc/shared/referenceProcessor.cpp --- a/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -266,11 +266,6 @@ #ifndef PRODUCT // Calculate the number of jni handles. size_t ReferenceProcessor::count_jni_refs() { - class AlwaysAliveClosure: public BoolObjectClosure { - public: - virtual bool do_object_b(oop obj) { return true; } - }; - class CountHandleClosure: public OopClosure { private: size_t _count; @@ -281,8 +276,7 @@ size_t count() { return _count; } }; CountHandleClosure global_handle_count; - AlwaysAliveClosure always_alive; - JNIHandles::weak_oops_do(&always_alive, &global_handle_count); + JNIHandles::weak_oops_do(&global_handle_count); return global_handle_count.count(); } #endif diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/memory/iterator.hpp --- a/hotspot/src/share/vm/memory/iterator.hpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/memory/iterator.hpp Tue Mar 15 15:29:42 2016 +0100 @@ -213,6 +213,16 @@ virtual bool do_object_b(oop obj) = 0; }; +class AlwaysTrueClosure: public BoolObjectClosure { + public: + bool do_object_b(oop p) { return true; } +}; + +class AlwaysFalseClosure : public BoolObjectClosure { + public: + bool do_object_b(oop p) { return false; } +}; + // Applies an oop closure to all ref fields in objects iterated over in an // object iteration. class ObjectToOopClosure: public ObjectClosure { diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/prims/whitebox.cpp --- a/hotspot/src/share/vm/prims/whitebox.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/prims/whitebox.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -33,6 +33,7 @@ #include "jvmtifiles/jvmtiEnv.hpp" #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" +#include "memory/iterator.hpp" #include "memory/universe.hpp" #include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" @@ -711,11 +712,6 @@ return result; WB_END -class AlwaysFalseClosure : public BoolObjectClosure { - public: - bool do_object_b(oop p) { return false; } -}; - static AlwaysFalseClosure always_false; WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/runtime/jniHandles.cpp --- a/hotspot/src/share/vm/runtime/jniHandles.cpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/runtime/jniHandles.cpp Tue Mar 15 15:29:42 2016 +0100 @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "logging/log.hpp" +#include "memory/iterator.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/jniHandles.hpp" @@ -128,6 +129,12 @@ } +void JNIHandles::weak_oops_do(OopClosure* f) { + AlwaysTrueClosure always_true; + weak_oops_do(&always_true, f); +} + + void JNIHandles::initialize() { _global_handles = JNIHandleBlock::allocate_block(); _weak_global_handles = JNIHandleBlock::allocate_block(); @@ -185,11 +192,6 @@ } -class AlwaysAliveClosure: public BoolObjectClosure { -public: - bool do_object_b(oop obj) { return true; } -}; - class CountHandleClosure: public OopClosure { private: int _count; @@ -211,9 +213,8 @@ "JNIHandles not initialized"); CountHandleClosure global_handle_count; - AlwaysAliveClosure always_alive; oops_do(&global_handle_count); - weak_oops_do(&always_alive, &global_handle_count); + weak_oops_do(&global_handle_count); st->print_cr("JNI global references: %d", global_handle_count.count()); st->cr(); @@ -230,10 +231,9 @@ void JNIHandles::verify() { VerifyHandleClosure verify_handle; - AlwaysAliveClosure always_alive; oops_do(&verify_handle); - weak_oops_do(&always_alive, &verify_handle); + weak_oops_do(&verify_handle); } diff -r e66ce2ddedf8 -r e89fc0bf4ecb hotspot/src/share/vm/runtime/jniHandles.hpp --- a/hotspot/src/share/vm/runtime/jniHandles.hpp Tue Mar 15 13:46:48 2016 +0100 +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp Tue Mar 15 15:29:42 2016 +0100 @@ -86,6 +86,8 @@ static void oops_do(OopClosure* f); // Traversal of weak global handles. Unreachable oops are cleared. static void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); + // Traversal of weak global handles. + static void weak_oops_do(OopClosure* f); };