gpt4 book ai didi

Java 7 - 堆栈映射框架不一致 - 需要帮助理解解决方案为何有效

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:00 25 4
gpt4 key购买 nike

当我使用 JDK7 或 JDK6 在 Eclipse 中编译和运行我的项目时,一切都很好。然而,在我使用 ANT 构建它然后尝试使用系统 JDK7 运行它之后,我得到了错误:

在方法 myClass.myMethod() [[Ljava/lang/Object;在偏移量 14

我到处查看并在 StackOverFlow 上发现了几个很好的问题:

两者基本上都建议添加 -XX:-UseSplitVerifier 作为确实解决了问题的 JVM 选项。 我仍然不完全理解为什么,但显然 this bug report应该有帮助。不幸的是我还是不明白......

我确实注意到有人在使用面向方面的编程的问题之一,这让我觉得我正在使用 Guice (谷歌的 DI 框架)这可能会导致问题,但我看不出如何。它应该支持JDK7。

我也在使用 Proguard,但它也可以与 JDK7 一起使用。

无论如何,在这一点上,我不知道为什么这个解决方法会起作用,除了当代码的某些部分试图使用字节码(这是为什么我认为它与 DI) 代码有关。但我仍然无法建立正确的链接。而且我也可以离开!!

如果有人能解释发生了什么或为什么会发生这种情况,我将不胜感激。此外,我真的很讨厌必须使用解决方法,因为这不是我认为的长期解决方案。

最佳答案

从 Java 7 开始,编译后的字节码必须包含额外的 StackMapTable 属性。这些有助于 JVM 内部的 validator 在类加载时检查类是否构建良好。 Java 的早期版本更为宽松,回退到没有属性的较慢验证。

修改原始编译字节码的工具(ProGuard 在编译之后,AOP 框架在执行之前,...)需要更新属性与修改后的代码一致。如果他们没有这样做,您将收到错误消息“不一致的堆栈图帧”。

ProGuard 应该执行此预验证;我不知道它有任何问题。如果您在没有应用 ProGuard 的情况下仍然看到错误,则问题一定出在 DI 或 AOP 上。

关于Java 7 - 堆栈映射框架不一致 - 需要帮助理解解决方案为何有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com