Estoy trabajando en un proyecto maven. El escenario es algo así como a continuación...
class Test { public void applyAll() { .................... .................... Collection<Migratable> applicableUpdates = SomeOtherClass.getApplicableUpdates(); doUpdate(applicableUpdates); } @Benchmark public void apply(Migratable m) { .................... .................... } private void doUpdate(Collection<Migratable> applicableUpdates) throws Exception { for (Migratable m : applicableUpdates) { try { apply(m); } catch (Exception e) { logger.error("Falid to apply migration {}" + m, e); throw e; } } } } Necesito calcular cuánto tiempo lleva ejecutar cada migración. Simplemente necesito calcular el tiempo de ejecución del método apply (Migratable m) .
Ahora, cuando construyo mi proyecto usando "mvn clean install", la compilación falló y muestra "Los parámetros del método deben ser clases @State".
Aquí, el parámetro proviene de otro método doUpdate (Colección de actualizaciones aplicables) [ver el escenario]. Entonces, ¿cómo puedo deshacerme de este error en un escenario dado?
Hay bastantes problemas en su configuración aquí y parece que en realidad no ha mirado las muestras de JMH; y te recomiendo encarecidamente que lo hagas.
Algunas notas...
1) Su método @Benchmark devuelve void - debería devolver something ; de lo contrario, use BlackHoles (esto está en las muestras).
2) Si los parámetros provienen de otro método , significa que ese método debe ser un método @SetUp (esto está en los ejemplos)
3) El error que está viendo tiene que ver con el hecho de que su Migratable no es en realidad una clase @State (¡esto está nuevamente en los ejemplos!)
En este punto, no puedo enfatizar eso lo suficiente, pero mire y comprenda las muestras. No va a ser fácil, esto es micro-benchmark y por mucho que JMH intente hacernos las cosas más fáciles ocultando todo el código muy complicado , todavía nos obliga a cumplir con las reglas que existen allí.