2011-10-12 46 views
3

我看着this post。看起来很好。然而,当HotSpot(不依赖于服务器或客户端或不是Sun版本)使代码内联时,作者或其他知晓的人会告诉我编码的技巧。在java中强制内联

+1

您可以*添加*任何东西到您链接到的问题,以某种方式改变它的答案,但没有回答您的问题?如果*不是*,那么这只是另一个问题的重复。 –

+0

?责任是什么?对不起,我想我完全不理解你。在我看来,你的问题需要更多细节。 – itun

回答

6

不要浪费你的时间在不合理的优化。编写简单的代码,使其易于维护,并让JIT负责优化。

javac几乎从不内联任何东西(这很好)。 JVM经常这样做(这非常好)。确定何时以及如何做JIT优化的算法是火箭科学。不要试图让你的代码比这更聪明。

如果您试图获得性能,然后使用分析器。如果您想让代码更难以反转,请使用proguard之类的工具。

+2

是的,我听说过,而且我知道。这很不错。感谢Sun开发人员。如果您长时间工作在Java平台上的各种任务中,那么您无法关心这一点。但是如果你喜欢Java,并且你对Java的典型范围感到好奇或者有一个任务,你可以试着去了解这个特性。最终,如何做到这一点? – itun

+0

@itun:您应该问:“如何在XXX生成的JVM中执行该操作,并且具有YYY版本?”无论XXX和YYY是什么,我都不知道答案,我也没有想到必须知道。 –

2

我发现这个链接:https://compile-command-annotations.nicoulaj.net/

这个库允许你使用中的一个热点JVM注解联方法。

因此,将一个@Inline注释添加到您的方法将强制内联。

这是一个热点特定功能,因为Java不允许通过该语言内联。

我能想到的唯一的其他选择是使用编译时注释和生成不同的字节码(如lombok)。