整数自动拆箱和自动装箱会产生性能问题吗?

我们目前正在使用x++;进行一些迭代和其他操作x++; 其中xInteger而不是int

在我们的系统上的一些用户操作中可以重复操作,但没有像数学应用程序那样复杂或众多,每个用户事务最多可达10000次。

这种拆箱和后来的装箱是否会影响我们的性能一些明显的毫秒

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

“结果列表的性能可能很差,因为它在每次获取或设置操作时都会打包或取消装箱。它足够快,偶尔可以使用,但在性能关键的内循环中使用它会很愚蠢。

那么什么时候应该使用自动装箱和拆箱? 仅在引用类型和基元之间存在“阻抗不匹配”时才使用它们,例如,当您必须将数值放入集合时。 将自动装箱和拆箱用于科学计算或其他对性能敏感的数字代码是不合适的。 Integer不能替代int; autoboxing和unboxing模糊了原始类型和引用类型之间的区别,但它们并没有消除它。“

是的,会对性能产生影响。 为++x生成的等效代码涉及每次创建一个新的Integer对象。 x++另外创建一个临时变量来存储前一个整数引用,以及一些操作。 您可以通过反汇编类文件来validation这一点。

自动装箱的速度取决于您使用的JVM版本,您正在使用的实际数字的范围以及GC设置。 关于(联合国)拳击表演,请参阅这篇非常有趣的深入文章。

基本上,JVM会缓存许多Integer对象,因此不需要每次都创建“常用”对象。 您可以配置此缓存大小。

至于具体问题:如果你使用原语和自动装箱,你的操作会慢几毫秒吗? 这完全取决于列表的大小以及调用的频率。 应该很容易(我认为!)来测试原始替代品的性能。