RFR: CODETOOLS-7902931: JOL: Rework magic field offset accessor [v3]
Aleksey Shipilev
shade at openjdk.java.net
Mon May 10 18:33:23 UTC 2021
> See the bug report for discussion.
>
> Basic sanity test:
>
>
> $ cat MyRecord.java
> record MyRecord(int x, int y) {}
>
>
> Current JDK 17 EA, out-of-box:
>
>
> $ java -jar jol-cli/target/jol-cli.jar internals -cp . MyRecord
> ...
>
> java.lang.RuntimeException: Cannot get the field offset, try with -Djol.magicFieldOffset=true
> at org.openjdk.jol.vm.HotspotUnsafe.fieldOffset(HotspotUnsafe.java:455)
> at org.openjdk.jol.layouters.CurrentLayouter.layout(CurrentLayouter.java:70)
> at org.openjdk.jol.info.ClassLayout.parseInstance(ClassLayout.java:102)
> at org.openjdk.jol.info.ClassLayout.parseInstance(ClassLayout.java:85)
> at org.openjdk.jol.operations.ObjectInternals.runWith(ObjectInternals.java:51)
> at org.openjdk.jol.operations.ClasspathedOperation.run(ClasspathedOperation.java:76)
> at org.openjdk.jol.Main.main(Main.java:58)
> Caused by: java.lang.UnsupportedOperationException: can't get field offset on a record class: private final int MyRecord.x
> at jdk.unsupported/sun.misc.Unsafe.objectFieldOffset(Unsafe.java:648)
> at org.openjdk.jol.vm.HotspotUnsafe.fieldOffset(HotspotUnsafe.java:448)
> ... 6 more
>
>
> Current JDK 17 EA, with `-Djol.magicFieldOffset=true`:
>
>
> $ java -Djol.magicFieldOffset=true -jar jol-cli/target/jol-cli.jar internals -cp . MyRecord
> ...
>
> MyRecord object internals:
> OFF SZ TYPE DESCRIPTION VALUE
> 0 8 (object header: mark) 0x0000000000000001 (non-biasable; age: 0)
> 8 4 (object header: class) 0x00218180
> 12 4 int MyRecord.x 0
> 16 4 int MyRecord.y 0
> 20 4 (object alignment gap)
> Instance size: 24 bytes
> Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
Aleksey Shipilev has updated the pull request incrementally with one additional commit since the last revision:
Even more comments
-------------
Changes:
- all: https://git.openjdk.java.net/jol/pull/16/files
- new: https://git.openjdk.java.net/jol/pull/16/files/e4f8bce2..062d106f
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jol&pr=16&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jol&pr=16&range=01-02
Stats: 7 lines in 1 file changed: 5 ins; 0 del; 2 mod
Patch: https://git.openjdk.java.net/jol/pull/16.diff
Fetch: git fetch https://git.openjdk.java.net/jol pull/16/head:pull/16
PR: https://git.openjdk.java.net/jol/pull/16
More information about the jol-dev
mailing list