如何在Java中使用Method.invoke进行基准测试

如何在Java中使用Method.invoke进行基准测试,java,benchmarking,Java,Benchmarking,当我为正在编程的SQL包装器编写一个微型基准测试服务时,我决定使用一种基准测试方法,其中包括注释基准测试方法。问题是Method.invoke()的开销很小(取决于您的系统)。虽然如果我在很长的任务中做基准测试,这是可以接受的,但这些测试平均只持续大约半秒,每一微秒都会真正改变基准测试结果的外观 有没有办法解决这一开销,或者有没有办法在内部对处理进行计时(例如通过java方法)?因此,您希望对通常通过反射调用的方法进行基准测试,但希望在基准测试期间避免反射的开销?为什么不直接对目标方法进行基准测

当我为正在编程的SQL包装器编写一个微型基准测试服务时,我决定使用一种基准测试方法,其中包括注释基准测试方法。问题是Method.invoke()的开销很小(取决于您的系统)。虽然如果我在很长的任务中做基准测试,这是可以接受的,但这些测试平均只持续大约半秒,每一微秒都会真正改变基准测试结果的外观


有没有办法解决这一开销,或者有没有办法在内部对处理进行计时(例如通过java方法)?

因此,您希望对通常通过反射调用的方法进行基准测试,但希望在基准测试期间避免反射的开销?为什么不直接对目标方法进行基准测试呢?因为,为了让我更容易,我在一个类中注释了每个测试方法,所以我不必为我想做的每一个测试反复编写一个扩展接口的类,但这可能是唯一的方法。您是否考虑过使用该工具(这是我的照片)?不完全是我想要的;我希望能够独立于其他依赖项或在一个单独的jar中包含基准测试。虽然我确信这样做对我自己和我的应用程序都更好,但我宁愿独立完成。也许在源代码上达到顶峰可能会为我指明正确的方向。我不确定我是否完全理解。例如,如果您为JMH使用事实上的Gradle插件,它会为JMH基准类创建一个单独的源代码集。Maven可能会做类似的事情(从未将JMH用于Maven)。当然,您可以独立于任何构建工具使用JMH,但关键是基准测试源通常与生产源分离(与单元测试相同)。