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

246
Vistas
bucle sobre matriz, diferencia de rendimiento entre indexado y mejorado para bucle

El JLS establece que para las matrices, "La declaración for mejorada es equivalente a una declaración for básica del formulario". Sin embargo, si verifico el código de bytes generado para JDK8, para ambas variantes se genera un código de bytes diferente, y si trato de medir el rendimiento, sorprendentemente, el mejorado parece estar dando mejores resultados (en jdk8)... ¿Puede alguien decirme por qué? ¿que? Supongo que se debe a una prueba jmh incorrecta, así que si es eso, sugiera cómo solucionarlo. (Sé que JMH dice que no debe probar usando bucles, pero no creo que esto se aplique aquí, ya que en realidad estoy tratando de medir los bucles aquí)

Mi prueba de JMH fue bastante simple (probablemente demasiado simple), pero no puedo explicar los resultados. La prueba del código JMH se encuentra a continuación, los resultados típicos son:

 JdkBenchmarks.enhanced avgt 5 2556.281 ± 31.789 ns/op JdkBenchmarks.indexed avgt 5 4032.164 ± 100.121 ns/op

lo que significa que el bucle for normalmente mejorado es más rápido, y la medición para él es más precisa que para el bucle indexado, por lo que no podemos abordar la diferencia con la incertidumbre de la medición. Principalmente, los mismos resultados son para matrices inicializadas con enteros aleatorios o matrices más grandes.

 public class JdkBenchmarks { @Benchmark @BenchmarkMode(AverageTime) @OutputTimeUnit(NANOSECONDS) public void indexed(Blackhole blackhole, TestState testState) { int length = testState.values.length; for(int i = 0; i < length; i++) { blackhole.consume(testState.values[i]); } } @Benchmark @BenchmarkMode(AverageTime) @OutputTimeUnit(NANOSECONDS) public void enhanced(Blackhole blackhole, TestState testState) { for (int value : testState.values) { blackhole.consume(value); } } @State(Scope.Benchmark) public static class TestState { public int[] values; @Setup public void setupArray() { int count = 1000; values = new int[count]; for(int i = 0; i < count; i++) { values[i] = i; } } } public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(JdkBenchmarks.class.getSimpleName()) .forks(1) .build(); new Runner(opt).run(); } }
over 4 years ago · Santiago Trujillo
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