@hospotintrinsiccandidate和double/float boxing

8e2ybdfx  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(374)

因此,我正在编写一些代码,这将导致在最内部的循环中装箱基本类型。我看了一眼 Integer.valueOf 检查什么 int 范围被缓存-顺便问一下:为什么只有 Byte 默认范围?-首先注意到,令我满意的是,范围是由jvm属性配置的,然后是一个内在方法。这看起来有点奇怪,因为这个方法非常简单,我希望热点编译和内联代码已经是最佳的,但是还可以。然后我转向浮点值,它们仍然是内在的,尽管这些方法只是调用类的构造函数,因为没有明显的缓存策略。
当装箱floting point原语时,hotspot可以做什么优化(比如在某些jvm实现中)?

z9zf31ra

z9zf31ra1#

Double.valueOf , Float.valueOf ,以及其他类似的 valueOf s、 是热点jvm中的内在方法。jvm确实知道这些方法,并对它们进行了专门的处理。
有一个eliminateautobox优化,它在默认情况下处于启用状态。优化的思想是去掉冗余的装箱/拆箱。jit编译器查找匹配的 Double.valueOf() / doubleValue() 配对,如果可能的话,同时消除两个调用。

相关问题