如何确保java编译器不会内联这些方法?

时间:2011-12-09 23:01:53

标签: java eclipse

出于测试目的,我需要确保在编译相应代码以生成.class文件时,不会内联某些方法。

我如何在Eclipse中执行此操作?

修改

对于那些真正需要知道为什么的人,在他们告诉如何之前,这里有解释 - 我正在测试一个代码,它检查和操作JVM字节代码。这就是我有时希望避免方法内联的原因。

3 个答案:

答案 0 :(得分:4)

你没有;你几乎无法控制编译器和JIT如何优化字节码。

但我不清楚你为什么要这样做。

请注意,各种JVM实现可能允许调整,例如,HotSpot中的-XX:MaxInlineSize=可能被设置为不可能的低数字,这意味着不会内联任何方法。在Eclipse编译器中可能有一个等价的选项,但我要小心。

答案 1 :(得分:1)

生成.class文件时(在运行时仅通过优化JVM),Java方法永远不会内联,因此您无需担心。

答案 2 :(得分:-1)

对于Java内联函数,您完全是编译器的一时兴起。你没有任何发言权。

它使用一些各种指标来确定是否应该内联某些内容。我相信其中一个是方法中字节码指令的数量。所以如果你有这样的方法:

void foo() {
    if(SOME_GLOBAL_BOOLEAN_THATS_ALWAYS_FALSE) {
        // lots of statements here
    }
    // code here
}

如果你在if语句中足够聪明,确保它不会对你进行优化,你或许可以减少它内嵌你的机会。