diff a/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp b/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp @@ -206,10 +206,19 @@ "<= ShenandoahAllocRateSampleWindow (%u)", ShenandoahMomentaryAllocRateSampleWindow, ShenandoahRecentAllocRateSampleWindow, ShenandoahAllocRateSampleWindow)); } + if (Arguments::is_valhalla_enabled()) { + // Flat atomic payloads may contain embedded oops. Current Valhalla code does not handle + // it well, missing the GC barriers. As the temporary kludge, disable compressed oops: + // this would make flat atomic payloads contain at most one oop, which would be treated + // as the single oop field. + log_warning(gc)("Shenandoah disables compressed oops to avoid breaking with Valhalla"); + FLAG_SET_ERGO(UseCompressedOops, false); + } + FullGCForwarding::initialize_flags(MaxHeapSize); } size_t ShenandoahArguments::conservative_max_heap_alignment() { static_assert(is_power_of_2(ShenandoahHeapRegion::MAX_REGION_SIZE), "Max region size must be a power of 2.");