因此,我正在编写一些代码,这将导致在最内部的循环中装箱基本类型。我看了一眼 Integer.valueOf
检查什么 int
范围被缓存-顺便问一下:为什么只有 Byte
默认范围?-首先注意到,令我满意的是,范围是由jvm属性配置的,然后是一个内在方法。这看起来有点奇怪,因为这个方法非常简单,我希望热点编译和内联代码已经是最佳的,但是还可以。然后我转向浮点值,它们仍然是内在的,尽管这些方法只是调用类的构造函数,因为没有明显的缓存策略。
当装箱floting point原语时,hotspot可以做什么优化(比如在某些jvm实现中)?
1条答案
按热度按时间z9zf31ra1#
Double.valueOf
,Float.valueOf
,以及其他类似的valueOf
s、 是热点jvm中的内在方法。jvm确实知道这些方法,并对它们进行了专门的处理。有一个eliminateautobox优化,它在默认情况下处于启用状态。优化的思想是去掉冗余的装箱/拆箱。jit编译器查找匹配的
Double.valueOf()
/doubleValue()
配对,如果可能的话,同时消除两个调用。