src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
In CMSCollector::par_take_from_overflow_list, if BUSY and prefix were
of type oopDesc*, I think there would be a whole lot fewer casts and
cast_to_oop's. Later on, I think suffix_head, observed_overflow_list,
and curr_overflow_list could also be oopDesc* instead of oop to
eliminate more casts.
And some similar changes in CMSCollector::par_push_on_overflow_list.
And similarly in parNewGeneration.cpp, in push_on_overflow_list and
take_from_overflow_list_work.
As noted in the comments forJDK-8165857, the lists and "objects"
involved here aren't really oops, but rather the shattered remains of
oops. The suggestion there was to use HeapWord* and carry through the
fanout; what was actually done was to change _overflow_list to
oopDesc* to minimize fanout, even though that's kind of lying to the
type system. Now, with the cleanup of cmpxchg_ptr and such, we're
paying the price of doing the minimal thing back then.
In CMSCollector::par_take_from_overflow_list, if BUSY and prefix were
of type oopDesc*, I think there would be a whole lot fewer casts and
cast_to_oop's. Later on, I think suffix_head, observed_overflow_list,
and curr_overflow_list could also be oopDesc* instead of oop to
eliminate more casts.
And some similar changes in CMSCollector::par_push_on_overflow_list.
And similarly in parNewGeneration.cpp, in push_on_overflow_list and
take_from_overflow_list_work.
As noted in the comments for
involved here aren't really oops, but rather the shattered remains of
oops. The suggestion there was to use HeapWord* and carry through the
fanout; what was actually done was to change _overflow_list to
oopDesc* to minimize fanout, even though that's kind of lying to the
type system. Now, with the cleanup of cmpxchg_ptr and such, we're
paying the price of doing the minimal thing back then.