java - 将 Guava.Preconditions 与串联字符串一起使用时是否会对性能产生影响?

标签 java performance guava preconditions

在我们的代码中,我们经常使用Preconditions 检查参数:

Preconditions.checkArgument(expression, "1" + var + "3");

但有时,这段代码会被非常频繁地调用。这会对性能产生显着的负面影响吗?我们应该切换到

Preconditions.checkArgument(expression, "%s%s%s", 1, var, 3);

?

(我希望大多数时候条件为真。假意味着错误。)

最佳答案

如果您希望检查大多数时候不会抛出任何异常,则没有理由使用字符串连接。在调用方法之前进行连接(使用 .concatStringBuilder)比在确定会抛出异常后再进行连接要花费更多的时间。

相反,如果您抛出异常,则说明您已经处于慢速 分支。

还值得一提的是,Guava 使用自定义且更快的格式化程序,它只接受 %s。所以时间损失实际上更类似于标准记录器 {} 句柄(在 slf4j 或 log4j 2 中)。但如上所述,这是在您已经处于慢速分支的情况下。

无论如何,我强烈反对您的任何建议,但我会改用这个建议:

Preconditions.checkArgument(expression, "1%s3", var);

您应该只将变量放在 %s 中,而不是常量以获得边际速度。

关于java - 将 Guava.Preconditions 与串联字符串一起使用时是否会对性能产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118919/

相关文章:

java - 为什么这段代码运行得这么慢?

grails - Grails 中对象缓存应该放在哪里?

java - Stripes - 绑定(bind)到集合的动态生成的输入字段无法设置为空

Java位操作问题

java - 玩java 2.5 guice急切加载并停止钩子(Hook)不工作

performance - HBase 客户端写入性能差

c++ - Linux工具MPI调用导致瓶颈分析

java - 基于 google guava TreeBasedTable 索引的子集

guava - Netflix 的 RxJava Observables 和 Guava 的 ListenableFutures 有区别吗?

java - 圆-圆碰撞预测(后续)