从性能测量中排除方法调用
Exclude method invocation from performance measurement
我正在尝试在 JMH
中编写基准测试来衡量我们的自定义集合的性能。
我说的是把一个物体放进去的表现。问题是在每次迭代中我都想生成一个要放置的对象,但我想从基准测试结果本身中排除生成。
这是它的样子:
@Benchmark
public void m(){
Collection<Object> c = create();
Object o = createObject();
// I want to measure performance of the following line only
c.add(o);
}
public Collection<Object> create(){
//return the instance of the collection
}
public Object createObject(){
//return some object
}
我知道 @Setup
注释,但它仅在基准测试启动时调用。所以这不是我想要的。
您可以在设置方法中创建这些对象,例如将它们存储在预建数组中。
然后提供新对象归结为数组访问和索引增加操作。我很确定您不会找到一种方法可以轻松做到这一点。
换句话说:如果您不想对对象创建进行基准测试,那么唯一的另一种选择是先创建它们预先并以某种方式记住它们以备后用。如果@Setup 不是您要找的;只需使用一些在 class 加载时填充的静态数组。
我正在尝试在 JMH
中编写基准测试来衡量我们的自定义集合的性能。
我说的是把一个物体放进去的表现。问题是在每次迭代中我都想生成一个要放置的对象,但我想从基准测试结果本身中排除生成。
这是它的样子:
@Benchmark
public void m(){
Collection<Object> c = create();
Object o = createObject();
// I want to measure performance of the following line only
c.add(o);
}
public Collection<Object> create(){
//return the instance of the collection
}
public Object createObject(){
//return some object
}
我知道 @Setup
注释,但它仅在基准测试启动时调用。所以这不是我想要的。
您可以在设置方法中创建这些对象,例如将它们存储在预建数组中。
然后提供新对象归结为数组访问和索引增加操作。我很确定您不会找到一种方法可以轻松做到这一点。
换句话说:如果您不想对对象创建进行基准测试,那么唯一的另一种选择是先创建它们预先并以某种方式记住它们以备后用。如果@Setup 不是您要找的;只需使用一些在 class 加载时填充的静态数组。