--- old/src/share/vm/gc/parallel/psPromotionManager.cpp 2016-01-24 11:21:53.697769101 +0100 +++ new/src/share/vm/gc/parallel/psPromotionManager.cpp 2016-01-24 11:21:53.628770289 +0100 @@ -384,6 +384,13 @@ if (PSScavenge::should_scavenge(next_addr)) { pm->claim_or_forward_depth(next_addr); } + // Treat value as normal oop if Epehemeron + if (klass->reference_type() == REF_EPHEMERON) { + T* value_addr = (T*)java_lang_ref_Ephemeron::value_addr(obj); + if (PSScavenge::should_scavenge(value_addr)) { + pm->claim_or_forward_depth(value_addr); + } + } klass->InstanceKlass::oop_ps_push_contents(obj, pm); }