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

Java性能可选

韩耘豪
2023-03-14
问题内容

我偶然发现了Java 8中的Optional类-我真的很喜欢用isPresent()方法调用替换代码中一些空检查(字面意思是“值存在吗?”)的方法。

我的问题是:那会不会导致我的代码性能降低?我只是猜测简单的null检查可能会便宜一些,而且我在字节码读取/解释方面还不是很好,所以我真的很感兴趣您对此主题的想法。


问题答案:

Optional<T>只是一个普通的通用类,其中包含类型T的引用。因此,它添加了一个间接层。该方法调用本身也不会很昂贵,因为该类是final这样,因此可以避免动态分配。

可能会出现性能问题的唯一地方是使用大量此类实例时,但是即使那样,诸如a之类的性能也一点Stream<Optional<String>>也不差。但是,当使用大量原始值时,由于这层间接调用需要非常频繁地实例化对象,因此您会发现使用Stream<Integer>(或Integer[])与原始专业化IntStream(或int[])会对性能造成影响Integer。但是,使用诸如之类的东西,这是我们已经知道并要付出的代价ArrayList<Integer>

Stream<OptionalInt>/
显然会遇到相同的问题OptionalInt[],因为OptionalInt本质上是一个具有int字段和状态boolean标记的类(与之不同的Optional<T>是只能使用该T字段),因此Integer尽管大小更大,但还是很相似。当然,a
Stream<Optional<Integer>>会增加 两个 间接级别,相应地会导致性能双倍下降。



 类似资料:
  • 问题内容: 我不知道我是否是唯一知道这一点的人,但是枚举的值不是隐式最终的,可以修改。 这些值通常是在实例创建()时初始化的,但是除了我自己,我从未见过有人使用final关键字来表示应为不变的枚举变量。这不是问题的重点,只是想知道我是否是唯一意识到这一点的人。 我想知道的是,是否存在用于创建可变枚举的用例? 而且我还想知道我们可以使用枚举(无论是否使用良好实践)的局限性。我还没有测试过,但是可以用

  • 你好,我有两个代码示例 if/else if/else语句 可选语句 所以我的问题是这两者在性能方面是如何比较的(我在实际代码上有大约15-20个if-else语句)? 是否值得重构代码可读性与性能之间的关系,或者是对选项的误用? 另外,如果if/else-if语句增长到100+时,性能损失是什么? 提前致谢

  • 本文向大家介绍java 中HashCode重复的可能性,包括了java 中HashCode重复的可能性的使用技巧和注意事项,需要的朋友参考一下 java 中HashCode重复的可能性 今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能性超大,下面是java的缺省算法:   但是什么情况下会重复?下面是测试代码 在A-z范围内有特殊字符,从结果看,

  • 在我工作的公司,我们计划更新和重新编码我们12年的在线销售网络应用程序。 我们的客流量有点高;每天超过10万个销售订单意味着在web应用程序上每天至少有100万个交互。 我想用NodeJS作为web服务器,集成到我们的ERP系统中,运行在Oracle Exadata数据库上。 我的问题是:性能对我们来说是非常非常关键的,我不确定NodeJS的可伸缩性是否足以应付如此高的事务数。 我在网上读了一些博

  • 我想散列一个内部帐号,并将结果用作帐户记录的唯一公共标识符。标识符限制为40个字符。我有大约250条具有唯一帐号的记录。 什么不太可能导致碰撞。 < li >取账号SHA-256哈希的SHA-1。 < li >取账号的SHA-256,挑出40个字符。

  • 问题内容: 我一直在四处查看,以了解如何将MongoDB与Solr结合使用,这里的一些问题有部分答案,但没有什么具体的(更像是理论)。在我的应用程序中,我将在MongoDB中存储很多文档(可能多达几亿个),并且我想对这些文档的某些属性实施全文搜索,所以我想Solr是最好的方法这个。 我想知道的是我应该如何配置/执行所有操作以使其具有良好的性能?现在,这是我的工作(我知道这不是最佳选择): 1-在M