First it helpful to know that for hprof files, every java object is given an 
ObjectID, and that id is simply the address of the java object in the java 
heap. SA does the following to write a field that is reference type into the 
hprof file:


OopHandle handle = ((OopField)field).getValueAsOopHandle(oop);
writeObjectID(getAddressValue(handle));


The only validation it does is to make sure the address of the field is valid. 
Note I'm referring to the address of the field itself, not the address (oop) 
stored in the field. If the field is flattened, it may no longer have an 8-byte 
alignment requirement. But getAddressValue(handle) does. So if the field is not 
8-byte aligned we get the UnalignedAddressException and you see in the stack 
trace that is happening in all of the heap dumping test. If it is 8-byte 
aligned, then the contents are just blindly loaded and treated as an oop, which 
then gets written as an (invalid) ObjectID into the hprof file. It then turns 
up as the hprof verification error that you see in 
[JDK-8377387](https://bugs.openjdk.org/browse/JDK-8377387):

WARNING: Failed to resolve object id 0x10000 for field isRegularFile (signature 
L)

The fix is to not write the (invalid) ObjectID if the field has been flattened, 
and instead just write the ObjectID for null as if the field actually contained 
a null. This gets us around the issues that cause test failures, but eventually 
we need to properly handle the flattened field and write its scalar contents to 
the hprof file. I'll file a separate CR for that.

Tested using --enable-preview with all tier1, tier2 svc, and tier5 svc.

-------------

Commit messages:
 - Fix issue with flattened fields causing heap dumps to fail

Changes: https://git.openjdk.org/valhalla/pull/2280/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2280&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8379925
  Stats: 20 lines in 4 files changed: 7 ins; 8 del; 5 mod
  Patch: https://git.openjdk.org/valhalla/pull/2280.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2280/head:pull/2280

PR: https://git.openjdk.org/valhalla/pull/2280

Reply via email to