< prev index next >
src/hotspot/share/runtime/handles.cpp
Print this page
@@ -24,10 +24,11 @@
#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,19 +92,27 @@
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 >