diff --git a/src/hotspot/share/gc/shenandoah/shenandoahStringDedup.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahStringDedup.inline.hpp index 57b30358e94..e26ef79f603 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahStringDedup.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahStringDedup.inline.hpp @@ -45,14 +45,15 @@ bool ShenandoahStringDedup::is_candidate(oop obj) { return false; } - if (StringDedup::is_below_threshold_age(obj->age())) { - const markWord mark = obj->mark(); - // Having/had displaced header, too risk to deal with them, skip - if (mark == markWord::INFLATING() || mark.has_displaced_mark_helper()) { - return false; - } + const markWord mark = obj->mark(); + + // Having/had displaced header, too risky to deal with them, skip + if (mark == markWord::INFLATING() || mark.has_displaced_mark_helper()) { + return false; + } - // Increase string age and enqueue it when it rearches age threshold + if (StringDedup::is_below_threshold_age(mark.age())) { + // Increase string age and enqueue it when it reaches age threshold markWord new_mark = mark.incr_age(); if (mark == obj->cas_set_mark(new_mark, mark)) { return StringDedup::is_threshold_age(new_mark.age()) &&