¿Hay alguna actuación que se pueden obtener en estos días de la compilación de Java a código nativo, o haga modernos compiladores hotspot terminan haciendo esto con el tiempo de todos modos?Ganancia de rendimiento en la compilación de Java al código nativo?
Respuesta
Hubo un debate similar aquí hace poco, por la cuestión What are advantages of bytecode over native code?. Puedes encontrar respuestas interesantes en ese hilo.
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.
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.
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.
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. acceda al método sincronizado de java desde el código nativo
- 2. Three.js portado al código nativo?
- 3. ¿Seguiremos teniendo la ganancia de rendimiento de Java 6 si el bytecode se compiló en 1.4
- 4. poner a prueba la ganancia de rendimiento de compresión de código JavaScript
- 5. Cómo traducir código Byte a código nativo de la máquina
- 6. Restringir la funcionalidad de código nativo de Java
- 7. Llamar código Java no nativo de Python
- 8. Código fuente del método nativo de Java
- 9. ¿hay algún tipo de ganancia de rendimiento al usar archivos .pyc en python?
- 10. ¿Qué ganancia de rendimiento de GPU con matlab?
- 11. Conversión de la aplicación .NET al código nativo x86
- 12. Cómo compilar ocaml al código nativo
- 13. ver código nativo de Eclipse
- 14. ¿Hay alguna ganancia de rendimiento al declarar un objeto fuera del bucle
- 15. ¿Puedo compilar Java con código nativo?
- 16. Llamando al miembro de la clase JAVA desde el código nativo C/C++
- 17. ¿Cuál es la forma más rápida de acceder al código nativo desde Java?
- 18. Rendimiento de rendimiento en Java
- 19. Android: MediaRecorder @ Código nativo
- 20. Agregar fecha de compilación al código
- 21. Transformación de código Java en tiempo de compilación
- 22. ¿Cómo saber si se trata de una pérdida de memoria o no al llamar al código nativo en Java?
- 23. Cargando FMOD puramente de código nativo
- 24. Ejecutando código nativo en Azure
- 25. Pasando matriz de bytes desde el código nativo al lado Java
- 26. ¿La compilación del código nativo en .Net elimina el MSIL por completo?
- 27. depuración de código nativo en Android Biblioteca
- 28. Código nativo de modificación automática en Android
- 29. ¿Java tiene soporte nativo para eventos, similar al de C#?
- 30. Acceda al JSON.Stringify nativo de Rhino desde Java
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