似乎没有任何 Optional<Boolean>
类型的缓存对象对于 true
和 false
标准库中可用的值。我是不是哪里漏掉了它们?
如果没有这样的对象,我会感到惊讶,因为在我看来,这对于清晰度和性能来说非常有用。
如果真的没有这样的对象,那是为什么?
最佳答案
在 Java 8 中,他们改进了对象创建的优化,特别是对于 Optional 这样的短生命期对象。 JIT 可以做的是使用 Escape Analysis 通过将它们的字段放在堆栈上来消除短期对象。在Optional<Boolean>
的情况下这很可能不会超过 boolean
。
请参阅以下有关对象消除的文章,了解如何检测它不起作用以及您可以采取的措施。 Java Lambdas and Low Latency
反过来的问题,就是为什么会有OptionalInt、OptionalLong和OptionalDouble?这些可能有用,只是不如您想象的那么有用。不像Boolean
不是所有Integer
, Long
和 Double
值被缓存,虽然 Escape Analisys 可以消除对象,但它很昂贵并且可能需要一段时间才能开始,而且可能永远不会因为代码运行时间不够长。
关于java - 缓存的 Optional<Boolean> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738231/