--- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp 2018-04-23 15:58:04.302328219 +0200 +++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp 2018-04-23 15:58:04.167329977 +0200 @@ -255,7 +255,11 @@ } oop ShenandoahBarrierSet::read_barrier(oop src) { - if (ShenandoahReadBarrier) { + // Check for forwarded objects, because on Full GC path we might deal with + // non-trivial fwdptrs that contain Full GC specific metadata. We could check + // for is_full_gc_in_progress(), but this also covers the case of stable heap, + // which provides a bit of performance improvement. + if (ShenandoahReadBarrier && _heap->has_forwarded_objects()) { return ShenandoahBarrierSet::resolve_forwarded(src); } else { return src;