Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

120
Vistas
JMH Clases estatales y estados compartidos vs no compartidos

Soy nuevo en jmh y en entender lo que sucede detrás de los hilos, etc.

Entonces, comencé a leer y me quedé atascado en la anotación @State y los estados compartidos y no compartidos.

Leí este ejemplo: http://hg.openjdk.java.net/code-tools/jmh/file/ecd9e76155fe/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_03_States.java y tengo algunas preguntas al respecto.

Primera pregunta, ¿cuál es el papel exacto de las clases estatales? para mantener los parámetros? digamos que quiero comparar un programa que encripta una clave de 2 maneras diferentes. ¿Debo mantener la clave (un objeto String) en una clase de estado que anotó con un estado específico? o simplemente mantener el objeto String en la clase de referencia? Una explicación sobre esto sería genial.

Segunda pregunta, ¿por qué en el ejemplo anterior, el rendimiento de la clase estatal no compartida fue mucho mejor que el compartido? ¿Cómo lo cambia el estado multiproceso?

Me siento realmente oscurecido ya que soy nuevo en esto y no pude encontrar ejemplos de "explícame como si tuviera 5" para jmh y sus opciones.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede considerar los objetos @State como la parte de su punto de referencia que necesita para ejecutarlos sin que el tiempo para su creación deba considerarse como parte de su tiempo medido.

Digamos que desea medir el tiempo que lleva calcular:

 @Benchmark int benchmark() { int foo = 1, bar = 1; return foo + bar; }

Desafortunadamente para usted, el compilador JIT es demasiado inteligente para permitirle hacer esto y doblará el método para simplemente devolver 2 . Por supuesto, esto no es lo que quieres medir. Usando el estado, puede escapar de estos valores y dejar que JMH se encargue de no dejar que el JIT doble sus valores. Inicializaría los valores en un método @Setup .

Como otro caso de uso, puede verificar que su punto de referencia hizo lo que esperaba. Esto es posible al validar el estado en un método @TearDown .

about 4 years ago · Santiago Trujillo Denunciar

0

Los dos principales beneficios de usar una clase de estado son:

  • Usted garantiza que los procesos de preparación de datos no se miden en el punto de referencia.
  • Puede definir claramente el alcance de los objetos de estado y, por lo tanto, tener un mayor control y conocimiento de lo que realmente se está comparando.

Este artículo explica la clase de estado y los objetos de estado con más detalle: https://www.oracle.com/technical-resources/articles/java/architect-benchmarking.html

about 4 years ago · Santiago Trujillo Denunciar

0

Primera pregunta, ¿cuál es el papel exacto de las clases estatales? para mantener los parámetros? digamos que quiero comparar un programa que encripta una clave de 2 maneras diferentes. ¿Debo mantener la clave (un objeto String) en una clase de estado que anotó con un estado específico? o simplemente mantener el objeto String en la clase de referencia? Una explicación sobre esto sería genial.

La clase de referencia también es una clase de estado . Consulte JMHSample_04_DefaultState.java .

Segunda pregunta, ¿por qué en el ejemplo anterior, el rendimiento de la clase estatal no compartida fue mucho mejor que el compartido? ¿Cómo lo cambia el estado multiproceso?

Este es un tema de procesadores “modernos” y no de JMH. Cada núcleo del procesador tiene su propio caché L1 (y quizás L2). Por lo general, no acceden a la RAM directamente. Si varios subprocesos escriben constantemente en la misma área de memoria, el procesador está constantemente ocupado para sincronizar los datos entre todos los núcleos. En realidad, no tiene que acceder a la misma variable para obtener este efecto. Consulte JMHSample_22_FalseSharing.java .

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda