java - 缓存的 Optional<Boolean> 值

标签 java boolean java-8 option-type

似乎没有任何 Optional<Boolean> 类型的缓存对象对于 truefalse标准库中可用的值。我是不是哪里漏掉了它们?

如果没有这样的对象,我会感到惊讶,因为在我看来,这对于清晰度和性能来说非常有用。

如果真的没有这样的对象,那是为什么?

最佳答案

在 Java 8 中,他们改进了对象创建的优化,特别是对于 Optional 这样的短生命期对象。 JIT 可以做的是使用 Escape Analysis 通过将它们的字段放在堆栈上来消除短期对象。在Optional<Boolean>的情况下这很可能不会超过 boolean

请参阅以下有关对象消除的文章,了解如何检测它不起作用以及您可以采取的措施。 Java Lambdas and Low Latency

反过来的问题,就是为什么会有OptionalInt、OptionalLong和OptionalDouble?这些可能有用,只是不如您想象的那么有用。不像Boolean不是所有Integer , LongDouble值被缓存,虽然 Escape Analisys 可以消除对象,但它很昂贵并且可能需要一段时间才能开始,而且可能永远不会因为代码运行时间不够长。

关于java - 缓存的 Optional<Boolean> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738231/

相关文章:

java - 本例对HashMap哈希算法的解释

具有私有(private)依赖类的 Java 公共(public)类

c++ - Bool 类型 True 和 False

java - 尝试使用 java 中的变量将对象设置为 true 或 false

javascript - 我可以使用 Nashorn 在新引擎作用域中调用函数吗?

java - 为什么我们必须将 Collectors.toList() 返回的 List 转换为 List<Integer>,即使 Stream 的元素已经映射到 Integer?

java - 如何在Swing中绘制垂直线

java - 使用nginx和memcached优化网站有哪些经验?

c++ - false 和 FALSE 有什么区别?

java - 收集流结果时出现意外的 NullPointerException