一个特定的Java方法有多少字节的字节码?

3

我最近在Jon Masamitsu的博客上看到,巨大的方法(8000字节的字节码)不会在HotSpot中进行JIT编译。

那么我的问题是:作为一个程序员,我如何找出一个特定方法有多少字节的字节码?

JIT编译器当然知道。我能从.class文件中提取这个信息吗?

1个回答

7
你可以使用javap -c mypackage.MyClass命令来转储你的类的字节码(并查看每个方法的大小)。
一般来说,在达到这个限制之前,你应该知道一个方法过大而难以阅读和理解。在我看来,这更是生成代码的问题。顺便说一句,一个方法的硬限制是65536字节。

是的,一个8k+字节的方法应该有几百行代码大,这在非生成的代码中似乎是极不可能的。 - Voo
1
当您反编译一个方法时,它会显示每个指令的偏移量。查看最后一条指令的偏移量。 - Peter Lawrey
这意味着如果例如“424:areturn”是最后一条指令,则424是字节码的总数? - jeha
1
@Voo,通过滥用数组初始化器,很容易从少量源代码中意外生成巨大的方法。由于过度使用数组初始化器,JRE中有一个方法超过28kb。finally块甚至是代码膨胀的更大潜在来源,但它们很少被使用。 - Antimony
如果您想查看私有方法,请添加-private - Alex Rothberg
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接