小编Don*_*aab的帖子

Java 对象布局可以与 Java 记录一起使用吗?

我正在尝试使用 Java 对象布局 ( JOL ) 来测量保存某些 Java 记录实例的对象的实例大小。使用 时,我收到一个UnsupportedOperationException描述为“无法获取记录类上的字段偏移量”的信息GraphLayout.parseInstance。我在使用时遇到同样的错误ClassLayout.parseClass

我最初使用的是 Java 20,但已降级到 Java 17。我尝试了 JOL 的最后两个版本(0.17 和 0.16)。我尝试了堆栈跟踪中的建议“无法获取字段偏移,请尝试使用 -Djol.magicFieldOffset=true”。看起来 Unsafe 中的记录不受支持HotspotUnsafe.fieldOffset,特别是在第 647 行。

下面是一个传递异常的类和引发异常的类似记录的示例。

public class Outer {
    public static void main(String[] args) {
        // Passes - outputs 72
        System.out.println(GraphLayout.parseInstance(new A(1, "one")).totalSize());

        // Fails with UnsupportedOperationException
        // "can't get field offset on a record class: private final int Outer$B.value"
        // sun.misc.Unsafe.objectFieldOffset - line 648
        System.out.println(GraphLayout.parseInstance(new B(1, "one")).totalSize());
    }

    public static class …
Run Code Online (Sandbox Code Playgroud)

java jol

5
推荐指数
1
解决办法
474
查看次数

标签 统计

java ×1

jol ×1