没啥影响……你要非说有啥影响的话,就是堆上额外多出几个对象呗……如果你只是单纯的抛出并捕获(catch 里是空的、什么都不写),其实对性能影响微乎其微 ———— JVM 也是在不断进化的嘛。现在来说的话保存堆栈状态造成的开销已经很低了,某些情况下甚至会直接优化成类似 goto 的结构。但如果你要在 catch 里干点儿啥,比如展开堆栈信息(StackTrace),那影响就会很大了,降个几十倍都很正常;如果再有个日志搜集器 logger 在工作,性能会进一步降低。至于“如何验证”,这跟其他 Benchmark 没什么不同,你自己构建出两种场景(实验组和对照组),分别跑个一百万次观察一下执行时间以及 GC 情况不就行了,注意先预热。
没啥影响……
你要非说有啥影响的话,就是堆上额外多出几个对象呗……
如果你只是单纯的抛出并捕获(catch 里是空的、什么都不写),其实对性能影响微乎其微 ———— JVM 也是在不断进化的嘛。现在来说的话保存堆栈状态造成的开销已经很低了,某些情况下甚至会直接优化成类似 goto 的结构。
但如果你要在 catch 里干点儿啥,比如展开堆栈信息(StackTrace),那影响就会很大了,降个几十倍都很正常;如果再有个日志搜集器 logger 在工作,性能会进一步降低。
至于“如何验证”,这跟其他 Benchmark 没什么不同,你自己构建出两种场景(实验组和对照组),分别跑个一百万次观察一下执行时间以及 GC 情况不就行了,注意先预热。