RFR(S) 8235220: ClhsdbScanOops.java fails with sun.jvm.hotspot.types.WrongTypeException

Chris Plummer chris.plummer at oracle.com
Fri Apr 10 04:44:58 UTC 2020


Hello,

Please review the following:

https://bugs.openjdk.java.net/browse/JDK-8235220
http://cr.openjdk.java.net/~cjplummer/8235220/webrev.00

First off, thanks to Ioi for tracking this one down and proposing the fix.

The test is executing the clhsdb "scanoops" command, which scans the 
specified heap address range looking for objects of the specified type 
(or all objects if no type is specified). The test determines the 
address range by first using clhsdb "universe" to get the start and end 
of the eden space. scanoops then iterates over this entire range, 
calling RobustOopDeterminator.oopLooksValid() on each oop as it iterates 
over the range. The problem is eventually you'll end up past the 
initialized part of the heap. That causes 
VirtualBaseConstructor.findDynamicTypeForAddress() to return null, 
resulting in throwing a WrongTypeException. 
RobustOopDeterminator.oopLooksValid() should catch this exception and 
return false when it happens.

The CR mentions a few different failure modes. This only fixes the 
WrongTypeException failure. The NullPointerException is only on OSX and 
I believe is the same as JDK-8241158 [1], which happens when dumping the 
heap, so it seems probable that it is also turning up when scanning part 
of the heap. I think this bug was preventing us from ever seeing the 
WrongTypeException on OSX. Then there also JDK-8230731 [2] on Windows, 
which seems to prevent ever seeing the WrongTypeException on Windows.

[1] https://bugs.openjdk.java.net/browse/JDK-8241158
[2] https://bugs.openjdk.java.net/browse/JDK-8230731

thanks,

Chris


More information about the serviceability-dev mailing list