当前位置: 首页 > 面试题库 >

为什么Javadoc的Double.valueof表示不缓存值?

雍俊远
2023-03-14
问题内容

在OpenJDK中,该方法为:

public static Double valueOf(double d)

Javadoc说:

返回表示指定double值的Double实例。如果不需要新的Double实例,则通常应优先于构造方法Double(double)使用此方法,因为此方法通过缓存经常请求的值可能会产生明显更好的空间和时间性能。

这是实际的代码:

public static Double valueOf(double d) {
    return new Double(d);
}

缓存是骗人的!这里发生了什么?


问题答案:

该方法存在多种类型:Integer,和其他类型LongBigDecimal并且文档始终相同:在某些情况下(未定义),该方法 可以
返回相同的结果。

AFAIK,仅对整数类型实现缓存,并且它返回值介于-128到127(最常见的值)之间的缓存实例。对于BigDecimal,缓存当前适用于0到10的值。

Java的更高版本 可能 将此行为扩展到其他值/更多类型。因此,今天使用此代码很明智,因为这可能会使您的代码明天更快(并且今天的代码不会太慢)。

例如,Java编译器在生成自动装箱代码时使用此API。



 类似资料:
  • 问题内容: 我在Java 6的String源代码中注意到,hashCode仅缓存除0以外的值。以下代码段显示了性能差异: 在ideone.com中运行此命令可获得以下输出: 所以我的问题是: 为什么String的hashCode()不缓存0? Java字符串哈希为0的概率是多少? 避免对于每次哈希值都为0的字符串每次都重新计算哈希值的性能损失的最佳方法是什么? 这是缓存值的最佳实践方法吗?(即除了

  • 我有以下Nginx配置,我们可以从的输出中看到,它在语法上是正确的。我在下面的输出中加粗了一些相关部分: 我知道在正常实践中,服务器和代理服务器在不同的主机上。目前,我只是试图学习如何配置Nginx代理服务器与内容缓存,因为Nginx对我来说是新的。 我有以下2MB随机字节文件: 当我卷曲反向代理服务器时,我得到一个200的响应: 但是,我的缓存目录为空: 我检查了和,没有记录错误。 在向反向代理

  • 本文向大家介绍为什么要用 redis ?为什么要用缓存?相关面试题,主要包含被问及为什么要用 redis ?为什么要用缓存?时的应答技巧和注意事项,需要的朋友参考一下 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓

  • 问题内容: Sun的规范JVM实现对字节码进行了一些相当复杂的优化,以在代码运行几次后获得接近本机的执行速度。 问题是,为什么没有将此编译后的代码缓存到磁盘以供以后使用同一功能/类时使用? 就目前而言,每次执行程序时,JIT编译器都会重新启动,而不是使用代码的预编译版本。当本质上解释字节码时,是否添加此功能不会大大提高程序的初始运行时间? 问题答案: 我不求助于@MYYN发布的链接的’n’past

  • 不管我怎么努力,页面都被缓存了。因此,php函数运行一次后,总是显示缓存的结果,直到您按下Shift F5 > 我禁用了奥普卡什(在 phpinfo()上不再有奥普卡切了) 我禁用了APC(phpinfo()上不再有APC) 我使用了标题 Cache-Control:no-store,no-cache,必须重新验证"); // HTTP/1.1标头(Cache-Control:post-check

  • 如上所示,使用cdn.bootcdn.net资源,但是每次请求都会从cdn服务器上重新获取资源,非常耗时,白屏很差长时间,查询发现Cache-Control值是no-cache, no-store, must-revalidate导致的,需要怎么修改呢?