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
|