拳击是否会导致性能问题?

Jef*_*eff 5 java performance boxing jit xtext

我正在开发一个项目,我们正在编写一个编译为java的语言.我们使用的框架(xtext)在其生成的代码中大量使用了拳击.具体来说,如果您有以下声明:

int i = 1;
int j = 2;
int k = i + j;
Run Code Online (Sandbox Code Playgroud)

然后编译的代码看起来像:

IntegerExtensions.operator_plus(((Integer)i), ((Integer)j))
Run Code Online (Sandbox Code Playgroud)

现在,在我正在研究的项目中,某些情况下特定的基​​本二进制操作将非常普遍(特别是增量和比较).

我的问题是:这在性能方面是一个问题,还是JIT(或类似的智能JVM功能)只是意识到发生了什么并解决了所有问题?

请在发布之前阅读:我对收到回复说"你不应该关心,让它变得可读"不感兴趣.生成此代码,我根本不关心生成的代码的可读性.我所关心的是,我们不会因此受到重大影响.

谢谢

Joh*_*int 4

这实际上会产生影响。当发生转换时,Integer它将转换intIntegerusingInteger.valueOf(int n)方法。此方法将检查该值是否在缓存范围内(-128 到 127),如果不在,则会创建new Integer(n)

影响的大小有大有小,需要你自己去测试。

  • 使用“-XX:+EscapeAnalysis”可以删除创建的自动装箱对象。事实上,我从未见过 Sun/Oracle JVM 放弃对象创建。在担心应用程序之前,首先对应用程序进行分析以确定它是否重要会更有用。 (2认同)