我只是偶然发现了Java8中的可选类--我非常喜欢替换一些空检查的方法(字面意思是“值存在吗?”)在我的代码中使用isPresent()方法调用。
我的问题是:这不会导致代码的性能降低吗?我只是猜测简单的空检查可能会便宜一点,而且我在字节码读取/解释方面还不是很好,所以我真的很感兴趣你对这个主题的想法。
可选
只是一个普通的泛型类,它包含类型T的引用。因此,它添加了单层间接性。方法调用本身也不会非常昂贵,因为类是final
,因此可以避免动态分派。
唯一可能出现性能问题的地方是在处理大量这样的实例时,但即使这样,类似流
的性能也一点也不差。但是,当处理大量的基元值时,您会发现使用stream
(或integer[]
)与基元专门化intstream
(或int[]
)相比,性能会受到影响,因为这一层间接要求非常频繁地实例化integer
对象。但是,在使用ArrayList
时,我们已经知道并确实要付出代价。
显然,流
/OptionalInt[]
也会遇到同样的情况,因为OptionalInt基本上是一个具有int
字段和boolean
存在标志的类(与option
字段不同,option
只能使用t
字段),因此与integer
非常相似,尽管大小更大。当然,流
将添加两个间接级,相应的性能损失为双倍。
问题内容: 我偶然发现了Java 8中的Optional类-我真的很喜欢用isPresent()方法调用替换代码中一些空检查(字面意思是“值存在吗?”)的方法。 我的问题是:那会不会导致我的代码性能降低?我只是猜测简单的null检查可能会便宜一些,而且我在字节码读取/解释方面还不是很好,所以我真的很感兴趣您对此主题的想法。 问题答案: 只是一个普通的通用类,其中包含类型T的引用。因此,它添加了一个
本文向大家介绍java 中HashCode重复的可能性,包括了java 中HashCode重复的可能性的使用技巧和注意事项,需要的朋友参考一下 java 中HashCode重复的可能性 今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能性超大,下面是java的缺省算法: 但是什么情况下会重复?下面是测试代码 在A-z范围内有特殊字符,从结果看,
问题内容: 我不知道我是否是唯一知道这一点的人,但是枚举的值不是隐式最终的,可以修改。 这些值通常是在实例创建()时初始化的,但是除了我自己,我从未见过有人使用final关键字来表示应为不变的枚举变量。这不是问题的重点,只是想知道我是否是唯一意识到这一点的人。 我想知道的是,是否存在用于创建可变枚举的用例? 而且我还想知道我们可以使用枚举(无论是否使用良好实践)的局限性。我还没有测试过,但是可以用
你好,我有两个代码示例 if/else if/else语句 可选语句 所以我的问题是这两者在性能方面是如何比较的(我在实际代码上有大约15-20个if-else语句)? 是否值得重构代码可读性与性能之间的关系,或者是对选项的误用? 另外,如果if/else-if语句增长到100+时,性能损失是什么? 提前致谢
我想散列一个内部帐号,并将结果用作帐户记录的唯一公共标识符。标识符限制为40个字符。我有大约250条具有唯一帐号的记录。 什么不太可能导致碰撞。 < li >取账号SHA-256哈希的SHA-1。 < li >取账号的SHA-256,挑出40个字符。
问题内容: 编码我来检查Java的vararg性能。 我编写以下测试代码: 在我的机器上,平均输出为: 似乎将变量传递给方法是免费的!好! 但是使用varags慢60倍!为什么呢 一种解释可能是程序必须在堆上创建数组,而时间是由GC花费的。但是对于更少的循环,我仍然得到输出: 什么花费了这些额外的时间,反正编译器拥有将其解决为fix变量调用的所有信息… 这不是我打算为此进行优化的意图,但是我发现这
Java指令重排序不影响单线程下执行结果。那么比如main线程里有 System.out.println("1"); System.out.println("2"); 这两句话会重排导致输出21吗?这里似乎没有数据依赖? 无
在我工作的公司,我们计划更新和重新编码我们12年的在线销售网络应用程序。 我们的客流量有点高;每天超过10万个销售订单意味着在web应用程序上每天至少有100万个交互。 我想用NodeJS作为web服务器,集成到我们的ERP系统中,运行在Oracle Exadata数据库上。 我的问题是:性能对我们来说是非常非常关键的,我不确定NodeJS的可伸缩性是否足以应付如此高的事务数。 我在网上读了一些博