捕获异常而不是进行检查时,try-catch需要多长时间(以纳秒为单位)(假设消息具有HashMap类型的查找性能)?
try {
timestamp = message.getLongField( MessageField.TIMESTAMP );
} catch (MissingDataException e) {
//Not all messages contain this field
}
VS
if (message.contains(MessageField.TIMESTAMP))
timestamp = message.getLongField( MessageField.TIMESTAMP );
答案 0 :(得分:23)
简而言之,检查方式更快。你应该使用支票,因为:
答案 1 :(得分:3)
答案是“更长”。由于构建堆栈跟踪的时间,与支票相比,例外情况较慢。
一般来说,使用异常来控制程序流是一个坏主意,因为它会使代码混乱。总是进行检查,并在“异常”事件发生时留下例外。
答案 2 :(得分:3)
另一个答案是“谁在乎!”。这是错的!
在任何情况下,如果您想对其进行基准测试,请使用https://github.com/google/caliper
答案 3 :(得分:1)
想要量化这个...
一般来说,几乎不可能量化。不是纳秒......因为它取决于执行平台。甚至不是百分比。
时间在很大程度上取决于捕获堆栈跟踪所需的时间, 取决于抛出异常时堆栈的深度。这只是使用Java异常而不是常规条件语句的原因之一,这是一个非常糟糕的主意。
但另一方面是,有一个范围,JIT编译器可以大量优化与提供的异常相关的代码 它可以确定堆栈跟踪和异常抛出在特定的时刻永远不会被使用。
如果你真的想要一些(IMO,毫无意义且毫无意义)的数字,你需要做自己的基准测试。祝你好运。