RFR: Evacuate thread stack code oops

Aleksey Shipilev shade at redhat.com
Fri Jun 30 19:37:22 UTC 2017


I have seen crashes in here:

V  [libjvm.so+0xc9b5a4]  SCMUpdateRefsClosure::do_oop(oopDesc**)+0x74
V  [libjvm.so+0xb05324]  nmethod::oops_do(OopClosure*, bool)+0x224
V  [libjvm.so+0x83813f]  CodeBlobToOopClosure::do_code_blob(CodeBlob*)+0x2f
V  [libjvm.so+0xd5adbe]  JavaThread::oops_do(OopClosure*, CodeBlobClosure*)+0x1ce
V  [libjvm.so+0xd5fe87]  Threads::possibly_parallel_oops_do(bool, OopClosure*,
CodeBlobClosure*, CodeBlobClosure*)+0x57
V  [libjvm.so+0xcad10c]
ShenandoahRootProcessor::process_java_roots(OopClosure*, CLDClosure*,
CLDClosure*, CodeBlobClosure*, CodeBlobClosure*, unsigned int)+0xdc

There is a closure for walking thread stack code roots in
Threads::possibly_parallel_oops_do, but our evacuator passes NULL there. I think
it should pass our usual code roots closure. For concurrent code cache scan, we
want to evac those during STW while threads are not moving.

See:

http://cr.openjdk.java.net/~shade/shenandoah/codecache-conc-evac-threadroots/webrev.01

Testing: hotspot_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list