【问题标题】:How many bytes of bytecode has a particular method in Java?Java中有多少字节的字节码有特定的方法?
【发布时间】:2012-07-05 13:10:34
【问题描述】:

我最近在Jon Masamitsu's Weblog 上读到,巨大的方法(8000 字节的字节码)不是用 HotSpot 进行 JIT 编译的。

所以我的问题是:我如何(作为程序员)找出特定方法有多少字节的字节码?

JIT 编译器当然似乎知道。我可以从.class 文件中提取这条信息吗?

【问题讨论】:

    标签: java jvm bytecode


    【解决方案1】:

    您可以使用javap -c mypackage.MyClass 转储您的类的字节码(并查看每个方法的大小)

    一般来说,在达到此限制之前,您应该知道方法太大而无法阅读和理解。恕我直言,它更多的是生成代码的问题。顺便说一句,方法中有 65536 个字节的硬限制。

    【讨论】:

    • 是的,一个 8k+ 字节的方法应该有几百行代码,这在非生成代码中似乎极不可能。
    • 我可以这样反编译,但请您详细说明如何“查看每个方法的大小”?
    • 当你反编译一个方法时,它会显示每条指令的偏移量。查看最后一条指令的偏移量。
    • 这意味着如果例如“424:areturn”是最后一条指令,424是字节码的总数?
    • @Voo 通过滥用数组初始值设定项,很容易从少量源代码意外生成大量方法。由于过度使用数组初始值设定项,JRE 中有一种方法超过 28kb。 finally 块是更大的潜在代码膨胀源,但它们很少使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多