Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
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.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

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 .

over 4 years ago · Santiago Trujillo Report

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

over 4 years ago · Santiago Trujillo Report

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 .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!