Java中的自动装箱与手动装箱

Java中的自动装箱与手动装箱,第1张

Java中的自动装箱与手动装箱

自动装箱使用

Integer.valueOf
,内部将Integer对象缓存为小整数(默认情况下为-128至127,但是最大值可以使用“
java.lang.Integer.IntegerCache.high”属性进行配置-请参见Integer.valueOf的源代码) ,因此与
newInteger
直接调用不同。因为
Integer.valueOf
在调用之前可以快速检查整数值的大小
new Integer
,所以
newInteger
直接调用要快一些(尽管如果您有很多小整数,它会使用更多的内存)。Java中的分配非常快,并且执行GC的时间与活动的短期对象的数量成正比(即与垃圾的数量不成比例),因此GC也非常快。

但是取决于JVM版本和启用的优化,存在标量替换优化,它在分配短期对象时会产生更大的性能差异(在您的示例中,无法进行优化,因为您正在存储地图中的对象,但在许多其他情况下很有用)。

在最新的JVM版本中,进行了标量替换优化(在1.6.0_18中暂时禁用了转义分析),这意味着可以优化短期对象的分配。在JVM中进行标量替换时,有人制定了一个基准测试,其中有与您相似的代码。结果是使用原语的代码最快,使用显式

newInteger()
调用的代码几乎与使用原语的代码一样快,而使用自动装箱的代码要慢得多。这是因为使用自动装箱
Integer.valueOf
,并且至少在那时进行了标量替换优化,没有考虑这种特殊情况。从那时起,我不知道优化是否有所改进。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5488132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存