"Hotspot可以在Java中删除边界检查。"有人能解释一下吗?实际上,我正在分析C++和Java之间的区别。这不是作业,我只是出于自己的兴趣进行分析。
"Hotspot可以在Java中删除边界检查。"有人能解释一下吗?实际上,我正在分析C++和Java之间的区别。这不是作业,我只是出于自己的兴趣进行分析。
它的工作原理是不断分析程序的性能,寻找可能频繁或重复执行的“热点”,然后针对这些热点进行优化,以实现高性能执行和最小开销,适用于不太关键的代码。
因此,理论上,如果存在某些边界检查,并且通过重复和频繁的执行明显表明不可能超出边界,则热点可能会优化掉这些检查。这并不意味着它是绝对可靠的,但这可能是发生这种情况的原因之一。
根据Würthinger等人的2007文章:“每当访问数组元素时,Java虚拟机都会执行比较指令,以确保索引值在有效范围内。这降低了Java程序的执行速度。数组边界检查消除识别出这些检查是多余的并可以被删除的情况。我们提供了一种基于即时编译器中静态分析的Java HotSpot™ VM数组边界检查消除算法。”