3

我计划对我的 java 代码进行微基准测试,其中涉及对本地和远程数据库的多次调用。我正要使用 System.nanoTime() 但开始阅读有关 jmh 和 caliper 等微基准测试框架的信息。绝对推荐使用这些框架,但是从我读到的任何内容(很少)看来,我们只能对一个完整的方法进行基准测试,而且它还允许我们以非侵入性的方式进行此操作(wrt 现有代码),即我们不需要乱扔现有代码使用 jmh/caliper 的代码/注释。

我只想对某些方法中的特定代码(语句)进行基准测试。是否可以使用任何微基准测试框架来做到这一点?请对此提供一些见解。

4

2 回答 2

2

我猜,调用数据库的成本通常足以消除微基准测试的大部分问题。所以你的方法可能很好。如果您在生产中测量它,重复测量多次,并且不在乎几纳秒,请坚持使用System.nanoTime.

您正在做一些与我在此处所做的微基准测试非常不同的事情。您不是在尝试优化一小段代码,也不想消除外部影响。

对方法的一部分进行微基准测试对我来说毫无意义,因为方法会作为一个整体进行优化(也可能是内联的)。这是一个不同的层次。

我认为任何框架都无济于事,在您的情况下,他们所能做的就是使您似乎不需要的工作自动化。请注意,这System.nanoTime可能需要数百个周期(在您的情况下可能没问题)。

于 2014-06-13T08:21:48.990 回答
0

您可以尝试使用来自 codehale 的指标。如果您在某些配置(即指数衰减水库)中使用,我发现它易于使用且开销低。

微观级别和精确的基准测试确实会带来相关的成本,即在运行时进行采样的内存开销,基准测试可能需要时间来计算和生成统计数据(理想的情况是从统计数据中抵消)。但是,如果您想对我认为不应该非常频繁的数据库连接进行基准测试,那么指标可能是合适的,我发现它易于使用。是的,它有点侵入性但可配置。

于 2014-06-13T01:27:12.157 回答