2008-09-09 7 views

Respuesta

1

Rendimiento de la memoria o el rendimiento de la CPU? ¿O son los mismos en estos días?

Mi única evidencia es anecdótica y en una plataforma diferente: después de portar un montón de aplicaciones de CPU a C# (.NET 2.0), no noté una pérdida sustancial en el rendimiento (no considero un 10% sustancial). El código bien escrito parece funcionar bien en una variedad de arquitecturas.

mayoría de las aplicaciones pasan tiempo/residuos con:

  • operaciones de IO que no se beneficiarán de análisis estático (en tiempo de compilación).
  • Mal Algoritmos que no se beneficiarán del análisis estático.
  • Malos diseños de memoria en los bucles internos críticos de la CPU. Si bien es técnicamente posible que los compiladores nos ayuden aquí, aún no he visto que un compilador real haga algo interesante.

De acuerdo con mi experiencia, a menos que esté escribiendo un códec de video, la compilación de aplicaciones Java no se beneficia sino que solo depende de los compiladores del punto de acceso.

4

Alguna evidencia anecdótica más. He trabajado en algunas aplicaciones financieras comerciales de rendimiento en tiempo crítico. Estoy de acuerdo con Frank, casi siempre que tu problema no es la falta de compilación, es tu algoritmo o estructura de datos. Los compiladores de puntos calientes modernos son muy buenos con el código correcto, por ejemplo, el CERN Colt library está dentro del 90% del Fortran compilado y optimizado para el trabajo numérico.

Si le preocupa la velocidad, realmente recomendaría un buen generador de perfiles y obtendría pruebas de dónde están sus cuellos de botella: utilizo YourKit y estoy muy satisfecho.

Solo hemos recurrido al código nativo compilado para la velocidad en una instancia en los últimos años, y eso fue para poder usar CUDA y obtener un rendimiento de GPU serio.

2

Su pregunta es un poco grande, la respuesta varía mucho

  • Si está utilizando la compilación justo a tiempo (JIT) o no
  • Cuando está utilizando ,, si el proceso se ejecuta para desde hace mucho tiempo o no

Todas las JVM recientes usan JIT, pero en JVM antiguo el código Java es varias veces más lento que el código nativo.

Si tiene un servidor que funcione durante un largo periodo de tiempo o por lotes que ejecuta el mismo código una y otra vez, la diferencia y siendo muy baja.

escribimos el mismo lote, tanto en C++ y en Java y ejecutarlo con diferente conjunto de datos, el resultado difiere 'durante 3 segundos, con el conjunto de datos tomando desde 5 minutos hasta varias horas.

Pero tenga cuidado, son un caso especial de que habrá una diferencia importante, por ejemplo, el lote que necesita mucha memoria.

-2

Intenté con Hello-World con seis implementaciones diferentes solo para comprobar el overhead y la diferencia fue asombrosa. Java estaba fuera de lo normal, mientras que los lenguajes compilados funcionaban igual de bien. Podría probar todas las pruebas (de forma reproducible) si fuera necesario.

+1

Hello World no representa la carga de trabajo de la vida real, y dudo que esté optimizado por la JVM. Para casos muy pequeños como este, es muy probable que Java pierda en comparación con los lenguajes compilados. – nhahtdh

Cuestiones relacionadas