toArray 与预先确定大小的数组

2024-06-05

使用时ar.toArray(new String[ar.size()])安卓工作室3.2.1警告预先确定大小的数组并建议空数组:

有两种方式将集合转换为数组:使用 预先确定大小的数组(如 c.toArray(new String[c.size()]))或使用 空数组(如 c.toArray(new String[0])。在较旧的 Java 版本中 建议使用预先确定大小的数组,因为反射调用是 创建适当大小的数组所必需的速度非常慢。然而 自从 OpenJDK 6 的最新更新以来,这个调用被内在化了,使得 空数组版本的性能相同,有时甚至 与预先调整尺寸的版本相比,效果更好。也通过预先尺寸 数组对于并发或同步集合来说是危险的 大小和 toArray 调用之间可能存在数据竞争,这可能 如果集合是,则会在数组末尾产生额外的空值 在手术过程中同时收缩。这项检查允许 遵循统一的风格:要么使用空数组(即 在现代 Java 中推荐)或使用预先确定大小的数组(可能是 在较旧的 Java 版本或基于非 HotSpot 的 JVM 中速度更快)。

对于Android 来说是这样还是仅仅对于java 来说是这样?

使用预先确定大小的数组(在较旧的 Java 版本中可能会更快) 或非基于 HotSpot 的 JVM)。

因为我认为 Android 不是 HotSpot,它的虚拟机是 Dalvik,现在是 ART


很好的问题。

https://shipilev.net/blog/2016/arrays-wisdom-ancients/#_new_reflective_array https://shipilev.net/blog/2016/arrays-wisdom-ancients/#_new_reflective_array

底线: toArray(new T[0])看起来更快、更安全、更符合合同 更干净,因此现在应该是默认选择。未来虚拟机 优化可能会缩小这种性能差距toArray(new T[size]), 使当前“被认为是最佳”的用法与 实际上是最佳的一个。Further https://bugs.openjdk.java.net/browse/JDK-8060192 改进 http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2015-December/000047.html in toArrayAPI 会 遵循与以下相同的逻辑toArray(new T[0])—— 收藏本身 应创建适当的存储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

toArray 与预先确定大小的数组 的相关文章

随机推荐