Desempeño de C++ vs. Java: todo reside en la calidad del compilador (y del programador también)
el java el lenguaje heredó mucha de sus sintaxis de C/C++, los objetivos de Java en aquél entonces pueden resumirse en los siguientes principios:
Simple, orientado a objetos y familiar.
• Robusto y seguro.
• Arquitectónica mente neutro y portable.
• Ejecutándose en “alto desempeño”.
• Interpretado, con soporte a paralelismo y dinámico.
• Robusto y seguro.
• Arquitectónica mente neutro y portable.
• Ejecutándose en “alto desempeño”.
• Interpretado, con soporte a paralelismo y dinámico.
ejemplo
Función | Ejemplo | Java SE 6 (2010) | Java SE 7 (2012) | C++ (optimizado) | C++ (sin optimizar) |
Aritmética entera | int Y = rand(X) * 2 | 25 | 16 | 0.001427 | 70 |
Aritmética de punto flotante | double Y = rand(X) * 2.0 | 47 | 28 | 0.001477 | 85 |
Comparación de enteros | if A == B then X = B else X = B | 50 | 33 | 0.001971 | 56 |
Acceso a memoria indexada | for i = 0 to N: int X = array[n] | 53 | 25 | 11 | 136 |
Asignación de memoria – tipo primitivo | for i = 0 to N: int array[n] = X | 12,994 | 7,589 | 3,661 | 8,567 |
Asignación de memoria – objetos | for i = 0 to N: Object array[n] = X | 710,788 | 191,581 | 29,348 | 70,436 |
Podemos deducir que el problema de desempeño no reside en el lenguaje mismo, sino en el compilador y en su caso, la JVM. De hecho, existen dos ejemplos de esta dependencia
Java vs. C++: una comparación histórica
Utilizando complementaciones de métodos numéricos mediante objetos, ellos encontraron que Java se aproximaba bastante a los tiempos que tardaba C++ en ejecutarse. Por ejemplo, para generar el Triángulo de Pascal, Java tardaba 9 mili-segundos mientras C++ tardaba 1.1 segundos. Para una Factorización LU, Java tardaba 1 segundo en resolver el problema mientras C++ tardaba hasta 3.9 segundos.
Java 7 vs. C++ (gcc) 4.6.3
no sólo Java y C++, sino también implementaciones de otros lenguajes como Fortran, Ruby o Perl. Incluyendo árboles binarios, fractales de Mandelbrot o el cálculo de Pi (π), los resultados son bastante coherentes.
ejemplo
Prueba | Java SE 7 | C++ 4.6.3 | Mejor de su tipo (factor = 1.0) |
N-Body | 2.1 | 1.0 | C++ |
Fannkuch-redux | 1.9 | 1.4 | ADA 2005 GNAT |
Meteor-contest | 15.0 | 1.0 | C++ |
Fasta | 3.4 | 1.7 | C |
Spectral-norm | 2.3 | 1.0 | Fortran Intel, ADA 2005 GNAT, C++ (empate) |
Reverse-complement | 1.9 | 1.0 | C++ |
Mandelbrot | 1.9 | 1.7 | Fortran Intel |
K-nucleotide | 1.1 | 1.0 | C++ |
Regex-dna | 5.3 | 1.7 | C |
Pidigits | 2.4 | 1.2 | ATS |
Chameneos-redux | 7.8 | 1.1 | ADA 2005 GNAT, C (empate) |
Thread-ring | 41.0 | 21.0 | Haskell GHC |
Binary-trees | 1.6 | 1.6 | C |
Lenguaje | Mejor Tiempo | Peor Tiempo | Media |
C++ | 1.00 | 1.69 | 1.21 |
Java 7 | 1.13 | 3.46 | 1.95 |
Comparación de desempeño para todas las pruebas en Java y C++.
esto no debería ser una competencia para ver “quién es el mejor”, sino encontrar la manera de complementar ambos lenguajes. Después de todo, ambos son los más populares entre los programadores. En nuestro caso particular, una opción interesante será tener el procesamiento geoespacial en C++, mientras dejamos todo lo demás en Java y sus múltiples frameworks de desarrollo.
diferencia entre c++ y java
imágenes del java
imágenes de c++
No hay comentarios:
Publicar un comentario