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

时间:2011-05-17 21:29:36

标签: java integer boxing unboxing

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

在我们系统的某些用户操作中可能会重复操作,但不会像数学应用程序那样复杂或多次,每个用户事务最多可达10000次。

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

3 个答案:

答案 0 :(得分:16)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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