src/share/vm/runtime/thread.cpp

changeset 1432
46b819ba120b
parent 1414
87770dcf831b
parent 1424
148e5441d916
child 1462
39b01ab7035a
     1.1 --- a/src/share/vm/runtime/thread.cpp	Fri Sep 25 04:39:54 2009 -0700
     1.2 +++ b/src/share/vm/runtime/thread.cpp	Wed Sep 30 13:25:39 2009 -0700
     1.3 @@ -683,14 +683,15 @@
     1.4    return false;
     1.5  }
     1.6  
     1.7 -void Thread::oops_do(OopClosure* f) {
     1.8 +void Thread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
     1.9    active_handles()->oops_do(f);
    1.10    // Do oop for ThreadShadow
    1.11    f->do_oop((oop*)&_pending_exception);
    1.12    handle_area()->oops_do(f);
    1.13  }
    1.14  
    1.15 -void Thread::nmethods_do() {
    1.16 +void Thread::nmethods_do(CodeBlobClosure* cf) {
    1.17 +  // no nmethods in a generic thread...
    1.18  }
    1.19  
    1.20  void Thread::print_on(outputStream* st) const {
    1.21 @@ -2316,12 +2317,12 @@
    1.22  }
    1.23  
    1.24  
    1.25 -void JavaThread::oops_do(OopClosure* f) {
    1.26 +void JavaThread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
    1.27    // The ThreadProfiler oops_do is done from FlatProfiler::oops_do
    1.28    // since there may be more than one thread using each ThreadProfiler.
    1.29  
    1.30    // Traverse the GCHandles
    1.31 -  Thread::oops_do(f);
    1.32 +  Thread::oops_do(f, cf);
    1.33  
    1.34    assert( (!has_last_Java_frame() && java_call_counter() == 0) ||
    1.35            (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
    1.36 @@ -2347,7 +2348,7 @@
    1.37  
    1.38      // Traverse the execution stack
    1.39      for(StackFrameStream fst(this); !fst.is_done(); fst.next()) {
    1.40 -      fst.current()->oops_do(f, fst.register_map());
    1.41 +      fst.current()->oops_do(f, cf, fst.register_map());
    1.42      }
    1.43    }
    1.44  
    1.45 @@ -2379,9 +2380,8 @@
    1.46    }
    1.47  }
    1.48  
    1.49 -void JavaThread::nmethods_do() {
    1.50 -  // Traverse the GCHandles
    1.51 -  Thread::nmethods_do();
    1.52 +void JavaThread::nmethods_do(CodeBlobClosure* cf) {
    1.53 +  Thread::nmethods_do(cf);  // (super method is a no-op)
    1.54  
    1.55    assert( (!has_last_Java_frame() && java_call_counter() == 0) ||
    1.56            (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
    1.57 @@ -2389,7 +2389,7 @@
    1.58    if (has_last_Java_frame()) {
    1.59      // Traverse the execution stack
    1.60      for(StackFrameStream fst(this); !fst.is_done(); fst.next()) {
    1.61 -      fst.current()->nmethods_do();
    1.62 +      fst.current()->nmethods_do(cf);
    1.63      }
    1.64    }
    1.65  }
    1.66 @@ -2463,7 +2463,7 @@
    1.67  
    1.68  void JavaThread::verify() {
    1.69    // Verify oops in the thread.
    1.70 -  oops_do(&VerifyOopClosure::verify_oop);
    1.71 +  oops_do(&VerifyOopClosure::verify_oop, NULL);
    1.72  
    1.73    // Verify the stack frames.
    1.74    frames_do(frame_verify);
    1.75 @@ -3602,14 +3602,14 @@
    1.76  // uses the Threads_lock to gurantee this property. It also makes sure that
    1.77  // all threads gets blocked when exiting or starting).
    1.78  
    1.79 -void Threads::oops_do(OopClosure* f) {
    1.80 +void Threads::oops_do(OopClosure* f, CodeBlobClosure* cf) {
    1.81    ALL_JAVA_THREADS(p) {
    1.82 -    p->oops_do(f);
    1.83 +    p->oops_do(f, cf);
    1.84    }
    1.85 -  VMThread::vm_thread()->oops_do(f);
    1.86 +  VMThread::vm_thread()->oops_do(f, cf);
    1.87  }
    1.88  
    1.89 -void Threads::possibly_parallel_oops_do(OopClosure* f) {
    1.90 +void Threads::possibly_parallel_oops_do(OopClosure* f, CodeBlobClosure* cf) {
    1.91    // Introduce a mechanism allowing parallel threads to claim threads as
    1.92    // root groups.  Overhead should be small enough to use all the time,
    1.93    // even in sequential code.
    1.94 @@ -3618,12 +3618,12 @@
    1.95    int cp = SharedHeap::heap()->strong_roots_parity();
    1.96    ALL_JAVA_THREADS(p) {
    1.97      if (p->claim_oops_do(is_par, cp)) {
    1.98 -      p->oops_do(f);
    1.99 +      p->oops_do(f, cf);
   1.100      }
   1.101    }
   1.102    VMThread* vmt = VMThread::vm_thread();
   1.103    if (vmt->claim_oops_do(is_par, cp))
   1.104 -    vmt->oops_do(f);
   1.105 +    vmt->oops_do(f, cf);
   1.106  }
   1.107  
   1.108  #ifndef SERIALGC
   1.109 @@ -3644,11 +3644,11 @@
   1.110  }
   1.111  #endif // SERIALGC
   1.112  
   1.113 -void Threads::nmethods_do() {
   1.114 +void Threads::nmethods_do(CodeBlobClosure* cf) {
   1.115    ALL_JAVA_THREADS(p) {
   1.116 -    p->nmethods_do();
   1.117 +    p->nmethods_do(cf);
   1.118    }
   1.119 -  VMThread::vm_thread()->nmethods_do();
   1.120 +  VMThread::vm_thread()->nmethods_do(cf);
   1.121  }
   1.122  
   1.123  void Threads::gc_epilogue() {

mercurial