< prev index next >

src/share/vm/gc/shared/referenceProcessor.cpp

Print this page




 264 }
 265 
 266 #ifndef PRODUCT
 267 // Calculate the number of jni handles.
 268 size_t ReferenceProcessor::count_jni_refs() {
 269   class AlwaysAliveClosure: public BoolObjectClosure {
 270   public:
 271     virtual bool do_object_b(oop obj) { return true; }
 272   };
 273 
 274   class CountHandleClosure: public OopClosure {
 275   private:
 276     size_t _count;
 277   public:
 278     CountHandleClosure(): _count(0) {}
 279     void do_oop(oop* unused)       { _count++; }
 280     void do_oop(narrowOop* unused) { ShouldNotReachHere(); }
 281     size_t count() { return _count; }
 282   };
 283   CountHandleClosure global_handle_count;
 284   AlwaysAliveClosure always_alive;
 285   JNIHandles::weak_oops_do(&always_alive, &global_handle_count);
 286   return global_handle_count.count();
 287 }
 288 #endif
 289 
 290 void ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive,
 291                                           OopClosure*        keep_alive,
 292                                           VoidClosure*       complete_gc) {
 293   JNIHandles::weak_oops_do(is_alive, keep_alive);
 294   complete_gc->do_void();
 295 }
 296 
 297 
 298 template <class T>
 299 bool enqueue_discovered_ref_helper(ReferenceProcessor* ref,
 300                                    AbstractRefProcTaskExecutor* task_executor) {
 301 
 302   // Remember old value of pending references list
 303   T* pending_list_addr = (T*)java_lang_ref_Reference::pending_list_addr();
 304   T old_pending_list_value = *pending_list_addr;
 305 




 264 }
 265 
 266 #ifndef PRODUCT
 267 // Calculate the number of jni handles.
 268 size_t ReferenceProcessor::count_jni_refs() {
 269   class AlwaysAliveClosure: public BoolObjectClosure {
 270   public:
 271     virtual bool do_object_b(oop obj) { return true; }
 272   };
 273 
 274   class CountHandleClosure: public OopClosure {
 275   private:
 276     size_t _count;
 277   public:
 278     CountHandleClosure(): _count(0) {}
 279     void do_oop(oop* unused)       { _count++; }
 280     void do_oop(narrowOop* unused) { ShouldNotReachHere(); }
 281     size_t count() { return _count; }
 282   };
 283   CountHandleClosure global_handle_count;
 284   JNIHandles::weak_oops_do(&global_handle_count);

 285   return global_handle_count.count();
 286 }
 287 #endif
 288 
 289 void ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive,
 290                                           OopClosure*        keep_alive,
 291                                           VoidClosure*       complete_gc) {
 292   JNIHandles::weak_oops_do(is_alive, keep_alive);
 293   complete_gc->do_void();
 294 }
 295 
 296 
 297 template <class T>
 298 bool enqueue_discovered_ref_helper(ReferenceProcessor* ref,
 299                                    AbstractRefProcTaskExecutor* task_executor) {
 300 
 301   // Remember old value of pending references list
 302   T* pending_list_addr = (T*)java_lang_ref_Reference::pending_list_addr();
 303   T old_pending_list_value = *pending_list_addr;
 304 


< prev index next >