Request for reviews (S): 6826736: CMS: core dump with -XX:+UseCompressedOops

Paul Hohensee Paul.Hohensee at Sun.COM
Wed Jul 22 12:51:14 PDT 2009

You've got 4 uses of this expression

Universe::narrow_oop_base() == (address)(void*)(*foo)

You might write a new method in Universe to factor it out, vis

bool is_narrow_oop_base(void* addr) {
  return narrow_oop_base() == (address)addr);


Vladimir Kozlov wrote:
> Fixed 6826736: CMS: core dump with -XX:+UseCompressedOops
> Problem:
> Compiled code may produce decoded oop = narrow_oop_base
> when a narrow oop implicit null check is used.
> The narrow_oop_base could be NULL or be the address
> of the page below heap depending on the used mode of
> compressed oops. Such decoded oop could live across
> a safepoint and as result referenced in oopMap and debug info.
> The implicit NULL exception code checks for such oop value
> but deoptimization code and GC does not. And this cause
> the problem.
> Solution:
> Fix deoptimization code and GC to check for such oops values.
> During deoptimization convert them to NULL.
> And ignore them for GC (like NULL values are ignored).
> Added the regression test which shows the problem.
> Reviewed by:
> Fix verified (y/n): y, regression test
> Other testing:
> JPRT, CTW with/without UseCompressedOops and +/- ScavengeALot

More information about the hotspot-compiler-dev mailing list