3 回答
TA贡献1856条经验 获得超5个赞
好问题。
https://shipilev.net/blog/2016/arrays-wisdom-ancients/#_new_reflective_array
底线:
toArray(new T[0])
似乎更快,更安全,合同更清洁,因此现在应该是默认选择。未来的 VM 优化可能会缩小这一性能差距toArray(new T[size])
,使当前“被认为是最佳的”用法与实际最佳的用法相提并论。API的进一步 改进toArray
将遵循相同的逻辑toArray(new T[0])
——集合本身应该创建适当的存储。
TA贡献1860条经验 获得超9个赞
它读取since late updates of OpenJDK 6并且使用哪个运行时来运行它并不重要 - 因为在 Dalvik 上作为编译类运行的代码的语言级别可能是 Java 6、7、8。它只关心哪种语言 -水平用于编译它的项目。例如:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
设置JavaVersion.VERSION_1_6甚至可能禁用检查投诉......在这些过时的设备上修复性能问题可能不值得付出努力 - 一些/大部分甚至可能不会受到影响,因为只有“早期更新”的行为与所有后续更新不同。
TA贡献1874条经验 获得超12个赞
我不是 Java 历史学家,但是...
HotSpot 似乎本质上是由 Oracle 维护和分发的特定类型 JVM 的品牌名称。它的名字来源于即时编译器,它可以检测频繁执行代码的“热点”并即时优化它们。
Android 运行时也具有这种 JIT 编译器行为,以及在安装时将 Java 字节码提前编译为本机机器码。
这让我认为 ART 与 HotSpot 属于同一类别(就此检查而言),因此您应该使用此调用的“空数组”版本。
如有疑问,请测量!
最好的确定方法是编写一个测试程序,该程序执行该方法的两个版本并测量哪个版本运行得更快。
资料来源:
添加回答
举报