mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-17 09:34:38 +02:00
8154580: Save mirror in interpreter frame to enable cleanups of CLDClosure
GC walks the mirror using OopClosure rather than using CLDClosure in oops_interpreted_do() Reviewed-by: dlong, twisti, stefank
This commit is contained in:
parent
9ca6318ece
commit
de88e58a82
51 changed files with 202 additions and 166 deletions
|
@ -785,7 +785,7 @@ bool Thread::claim_oops_do_par_case(int strong_roots_parity) {
|
|||
return false;
|
||||
}
|
||||
|
||||
void Thread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
|
||||
void Thread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
|
||||
active_handles()->oops_do(f);
|
||||
// Do oop for ThreadShadow
|
||||
f->do_oop((oop*)&_pending_exception);
|
||||
|
@ -2758,7 +2758,7 @@ class RememberProcessedThread: public StackObj {
|
|||
}
|
||||
};
|
||||
|
||||
void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
|
||||
void JavaThread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
|
||||
// Verify that the deferred card marks have been flushed.
|
||||
assert(deferred_card_mark().is_empty(), "Should be empty during GC");
|
||||
|
||||
|
@ -2766,7 +2766,7 @@ void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf)
|
|||
// since there may be more than one thread using each ThreadProfiler.
|
||||
|
||||
// Traverse the GCHandles
|
||||
Thread::oops_do(f, cld_f, cf);
|
||||
Thread::oops_do(f, cf);
|
||||
|
||||
JVMCI_ONLY(f->do_oop((oop*)&_pending_failed_speculation);)
|
||||
|
||||
|
@ -2796,7 +2796,7 @@ void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf)
|
|||
|
||||
// Traverse the execution stack
|
||||
for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
|
||||
fst.current()->oops_do(f, cld_f, cf, fst.register_map());
|
||||
fst.current()->oops_do(f, cf, fst.register_map());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2946,7 +2946,7 @@ static void frame_verify(frame* f, const RegisterMap *map) { f->verify(map); }
|
|||
|
||||
void JavaThread::verify() {
|
||||
// Verify oops in the thread.
|
||||
oops_do(&VerifyOopClosure::verify_oop, NULL, NULL);
|
||||
oops_do(&VerifyOopClosure::verify_oop, NULL);
|
||||
|
||||
// Verify the stack frames.
|
||||
frames_do(frame_verify);
|
||||
|
@ -3186,7 +3186,7 @@ class PrintAndVerifyOopClosure: public OopClosure {
|
|||
static void oops_print(frame* f, const RegisterMap *map) {
|
||||
PrintAndVerifyOopClosure print;
|
||||
f->print_value();
|
||||
f->oops_do(&print, NULL, NULL, (RegisterMap*)map);
|
||||
f->oops_do(&print, NULL, (RegisterMap*)map);
|
||||
}
|
||||
|
||||
// Print our all the locations that contain oops and whether they are
|
||||
|
@ -3303,8 +3303,8 @@ CodeCacheSweeperThread::CodeCacheSweeperThread()
|
|||
_scanned_nmethod = NULL;
|
||||
}
|
||||
|
||||
void CodeCacheSweeperThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
|
||||
JavaThread::oops_do(f, cld_f, cf);
|
||||
void CodeCacheSweeperThread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
|
||||
JavaThread::oops_do(f, cf);
|
||||
if (_scanned_nmethod != NULL && cf != NULL) {
|
||||
// Safepoints can occur when the sweeper is scanning an nmethod so
|
||||
// process it here to make sure it isn't unloaded in the middle of
|
||||
|
@ -4291,11 +4291,11 @@ bool Threads::includes(JavaThread* p) {
|
|||
// uses the Threads_lock to guarantee this property. It also makes sure that
|
||||
// all threads gets blocked when exiting or starting).
|
||||
|
||||
void Threads::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
|
||||
void Threads::oops_do(OopClosure* f, CodeBlobClosure* cf) {
|
||||
ALL_JAVA_THREADS(p) {
|
||||
p->oops_do(f, cld_f, cf);
|
||||
p->oops_do(f, cf);
|
||||
}
|
||||
VMThread::vm_thread()->oops_do(f, cld_f, cf);
|
||||
VMThread::vm_thread()->oops_do(f, cf);
|
||||
}
|
||||
|
||||
void Threads::change_thread_claim_parity() {
|
||||
|
@ -4318,16 +4318,16 @@ void Threads::assert_all_threads_claimed() {
|
|||
}
|
||||
#endif // ASSERT
|
||||
|
||||
void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
|
||||
void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf) {
|
||||
int cp = Threads::thread_claim_parity();
|
||||
ALL_JAVA_THREADS(p) {
|
||||
if (p->claim_oops_do(is_par, cp)) {
|
||||
p->oops_do(f, cld_f, cf);
|
||||
p->oops_do(f, cf);
|
||||
}
|
||||
}
|
||||
VMThread* vmt = VMThread::vm_thread();
|
||||
if (vmt->claim_oops_do(is_par, cp)) {
|
||||
vmt->oops_do(f, cld_f, cf);
|
||||
vmt->oops_do(f, cf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue