gpt4 book ai didi

java - 是否有删除无用 goto 的 Java 字节码优化器?

转载 作者:太空狗 更新时间:2023-10-29 22:35:58 24 4
gpt4 key购买 nike

问题:我有一个方法可以编译成超过 8000 字节的 Java 字节码。 HotSpot 有一个神奇的限制,使得 JIT 不会对超过 8000 字节的方法启动。 (是的,有一个巨大的方法是合理的。这是一个分词器循环。)该方法在一个库中,我不想要求库的用户必须配置 HotSpot 才能停用魔法限制。

观察:反编译字节码表明 Eclipse Java 编译器生成了很多无意义的 goto。 (javac 更糟。)也就是说,有些 goto 只能通过跳转到达。显然,跳转到 goto 的跳转应该直接跳转到 goto 跳转的地方,应该消除 goto。

问题:是否有用于 Java 5 类文件的字节码优化器,可以展平无意义的跳转链,然后删除不必要的 goto?

编辑:我的意思是这样的模式:

8698:   goto    8548
8701: goto 0

显然,第二个 goto 只能通过跳转到 8701 来到达,这也可能是直接跳转到 0。

在第二次调查中,这种有问题的模式更为常见:

4257:   if_icmpne   4263
4260: goto 8704
4263: aload_0

显然,人们希望编译器将“不等于”比较反转为“等于”比较,跳转到 8704 并消除 goto。

最佳答案

我感受到了你的痛苦。我不得不编写一个解析器,它有大约 5kloc 的 if(str.equals(...)) 代码。我按照 parse1、parse2 等分成了几种方法。如果 parse1 没有导致解析的答案,则调用 parse2 等。这不一定是最佳实践,但它确实可以满足您的需要.

关于java - 是否有删除无用 goto 的 Java 字节码优化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944492/

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