< prev index next >

src/hotspot/share/runtime/handles.cpp

Print this page

        

*** 24,33 **** --- 24,34 ---- #include "precompiled.hpp" #include "memory/allocation.inline.hpp" #include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" + #include "oops/valueKlass.hpp" #include "runtime/atomic.hpp" #include "runtime/handles.inline.hpp" #include "runtime/thread.inline.hpp" #ifdef ASSERT
*** 91,109 **** --- 92,118 ---- static uintx chunk_oops_do(OopClosure* f, Chunk* chunk, char* chunk_top) { oop* bottom = (oop*) chunk->bottom(); oop* top = (oop*) chunk_top; uintx handles_visited = top - bottom; + BufferedValuesDealiaser* dealiaser = NULL; assert(top >= bottom && top <= (oop*) chunk->top(), "just checking"); // during GC phase 3, a handle may be a forward pointer that // is not yet valid, so loosen the assertion while (bottom < top) { // This test can be moved up but for now check every oop. assert(oopDesc::is_oop(*bottom), "handle should point to oop"); if (Universe::heap()->is_in_reserved_or_null(*bottom)) { f->do_oop(bottom); + } else { + if (VTBuffer::is_in_vt_buffer(*bottom)) { + if(dealiaser == NULL) { + dealiaser = Thread::current()->buffered_values_dealiaser(); + } + dealiaser->oops_do(f, *bottom); + } } bottom++; } return handles_visited; }
< prev index next >