我们目前正在使用以下方法进行一些迭代和其他操作 x++; 哪里 x 是一个 Integer 而不是一个 int.

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

这种拆箱和后来的拳击会影响我们的表现吗? 毫秒?

有帮助吗?

解决方案

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

"结果列表的性能可能很差,因为它在每个get或set操作中都会装箱或取消箱。对于偶尔使用来说,它足够快,但是在性能关键的内部循环中使用它是愚蠢的。

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

其他提示

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

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

基本上,JVM缓存了一些整数对象,所以它不需要每次都创建"公共"对象。您可以配置此缓存大小。

至于具体的问题:你的手术会吗? 毫秒 如果你使用原语和自动装箱更慢?这完全取决于列表的大小以及它被调用的频率。它应该很容易(我想!)来测试原始替代方案的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top