我计划对我的java代码进行微基准测试,该代码涉及对本地和远程数据库的多次调用。我即将使用System.nanoTime(),但开始阅读微基准测试框架,如jmh和caliper。绝对建议使用这些框架,但无论从哪个(很少)我读过,似乎我们只能对一个完整的方法进行基准测试,并且它允许我们非侵入性地执行此操作(现有代码),即我们不需要丢弃现有代码使用jmh / caliper的代码/注释。
我想在某些方法中仅对特定的代码片段(语句)进行基准测试。是否有可能使用任何微基准框架来做到这一点?请提供一些见解。
答案 0 :(得分:2)
我想,对数据库的调用通常很昂贵,足以消除微基准测试的大部分问题。所以你的方法可能很好。如果您在生产中进行测量,多次重复测量,并且不在乎几纳秒,请坚持使用System.nanoTime
。
您正在做一些与微基准测试非常不同的事情,例如:我做了here。您并不是要尝试优化一小段代码,而是不想消除外部影响。
微观标记方法的一部分对我来说没有任何意义,因为一个方法作为一个整体进行优化(也可能也是内联的)。这是一个不同的层次。
我认为任何框架都无法提供帮助,他们在您的案例中可以做的就是自动完成您似乎不需要的工作。请注意,System.nanoTime
可能需要几百个周期(在您的情况下可能很好)。
答案 1 :(得分:0)
您可以尝试使用metrics from codehale。 如果你使用某种配置,即指数衰减的水库,我发现它易于使用且开销低。
微观级别和精确的基准测试确实伴随着相关的成本,即在运行时采样的内存开销,基准可能需要时间进行计算和统计数据生成(理想的一个将抵消统计数据)。 但是如果你想对数据库连接进行基准测试,我认为这种连接应该非常频繁,那么指标可能是合适的,我发现它很容易使用。是的它有点侵入性但可配置。