Java 缓存实例在多大程度上用于公共浮点值和双精度值?
对于Integer和其他一些数值类型,在调用valueOf或自动装箱原语值时,将重新使用表示-128到127范围内的值的实例 但是浮动和双浮动呢?它可能同样使用缓存值的提示: 如果不需要新的Float实例,通常应使用此方法 优先于构造函数Float(Float)使用,如此方法 很可能通过以下方式产生显著更好的空间和时间性能 缓存频繁请求的值Java 缓存实例在多大程度上用于公共浮点值和双精度值?,java,autoboxing,Java,Autoboxing,对于Integer和其他一些数值类型,在调用valueOf或自动装箱原语值时,将重新使用表示-128到127范围内的值的实例 但是浮动和双浮动呢?它可能同样使用缓存值的提示: 如果不需要新的Float实例,通常应使用此方法 优先于构造函数Float(Float)使用,如此方法 很可能通过以下方式产生显著更好的空间和时间性能 缓存频繁请求的值 但是,与“此方法将始终缓存范围内的值…”相比,此语句的确定性较差,并且未说明可能存在此优化的一组值。那么这在实践中是如何表现的呢?虽然Javadoc说可以使
但是,与“此方法将始终缓存范围内的值…”相比,此语句的确定性较差,并且未说明可能存在此优化的一组值。那么这在实践中是如何表现的呢?虽然Javadoc说可以使用缓存,但我只是在我的JDK(版本8)中检查了实现,没有实现缓存:
public static Float valueOf(float f) {
return new Float(f);
}
public static Double valueOf(double d) {
return new Double(d);
}
我不知道这种缓存有多有效。与
整数
、长
、字节
、短
和字符
(其中缓存的值是一个小的连续数字序列)不同,应该缓存哪些双
和浮点
值不太清楚。研究浮点值的实现(JDK 8),我看到它只是通过调用构造函数来创建一个新的Float对象
public static Float valueOf(float f) {
return new Float(f);
}
因此,这可能是对未来的优化