栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
,并且至少在那时进行了标量替换优化,没有考虑这种特殊情况。从那时起,我不知道优化是否有所改进。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号