On parlait d'autre jour de la performance comparée de Java, Python C
etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à
hotspot, que l'équivalent Microsoft C# fait à peu prés pareil, mais
que les langages purement interprétés (ici Python) ont des
performances dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
On parlait d'autre jour de la performance comparée de Java, Python C
etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à
hotspot, que l'équivalent Microsoft C# fait à peu prés pareil, mais
que les langages purement interprétés (ici Python) ont des
performances dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
On parlait d'autre jour de la performance comparée de Java, Python C
etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à
hotspot, que l'équivalent Microsoft C# fait à peu prés pareil, mais
que les langages purement interprétés (ici Python) ont des
performances dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Je ne sais pas ce que voulait dire Vincent avec son histoire de
langage interprété, mais bon, Python, comme Perl, comme Ruby sont des
langages qui interprètent du bytecode et n'ont pas de compilateur
machine comme le hotspot, et le résultat, on le voit.
Je ne sais pas ce que voulait dire Vincent avec son histoire de
langage interprété, mais bon, Python, comme Perl, comme Ruby sont des
langages qui interprètent du bytecode et n'ont pas de compilateur
machine comme le hotspot, et le résultat, on le voit.
Je ne sais pas ce que voulait dire Vincent avec son histoire de
langage interprété, mais bon, Python, comme Perl, comme Ruby sont des
langages qui interprètent du bytecode et n'ont pas de compilateur
machine comme le hotspot, et le résultat, on le voit.
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
Je n'aime pas trop ce test car trop éloigné de la vie réel : peu
d'appels de fonctions, peu d'allocation/désallocations dynamiques, et de
toutes ces choses qui désavantagent java au détriment du C ou du C++.
Ce qui m'étonne toujours aussi, c'est d'observer un facteur 2 de
performance en faveur de visual-c++ par rapport à java et d'en conclure
que c'est presque pareil, alors que les benchmarks sur le matériel
s'extasie sur des écarts de performances de 10% (qui se traduit par
d'énormes écarts de prix).
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
Je n'aime pas trop ce test car trop éloigné de la vie réel : peu
d'appels de fonctions, peu d'allocation/désallocations dynamiques, et de
toutes ces choses qui désavantagent java au détriment du C ou du C++.
Ce qui m'étonne toujours aussi, c'est d'observer un facteur 2 de
performance en faveur de visual-c++ par rapport à java et d'en conclure
que c'est presque pareil, alors que les benchmarks sur le matériel
s'extasie sur des écarts de performances de 10% (qui se traduit par
d'énormes écarts de prix).
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
On parlait d'autre jour de la performance comparée de Java, Python
C etc. Voici un test, qui ne vaut peut être pas lourd, mais qui tend à
montrer que Java est capable de faire jeu égal avec C grace à hotspot,
que l'équivalent Microsoft C# fait à peu prés pareil, mais que les
langages purement interprétés (ici Python) ont des performances
dramatiquement plus mauvaises.
http://osnews.com/printer.php?news_idV02
Je n'aime pas trop ce test car trop éloigné de la vie réel : peu
d'appels de fonctions, peu d'allocation/désallocations dynamiques, et de
toutes ces choses qui désavantagent java au détriment du C ou du C++.
Ce qui m'étonne toujours aussi, c'est d'observer un facteur 2 de
performance en faveur de visual-c++ par rapport à java et d'en conclure
que c'est presque pareil, alors que les benchmarks sur le matériel
s'extasie sur des écarts de performances de 10% (qui se traduit par
d'énormes écarts de prix).
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Richard Delorme wrote:Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Par curiosité, j'ai compilé le Java 1.4.2 sous FreeBSD et j'ai fait le
test. Première impression tu as une machine *super* rapide.
Chez moi
(Athlon-tbird 1.1 Ghz) on n'a pas de suite le résultat!
Bref pour moi, dans l'ordre int, double, long je trouve
C 10.9 9.4 29.3
java 13.3 22.5 170.7
Tu as bien vu, au niveau du long, j'ai un résultat catastrophiquement lent.
Je me suis dit que c'était peut être la version freebsd qui avait des
problèmes, donc j'ai pris la même version 1.4.2 du sdk chez Sun et je
l'ai mise sur mon Debian P4 3 Ghz (merci alien):
java 8.2 19.8 24.8
Les deux machines font tourner un calcul et donc java n'occupait que 80%
du processeur dans les deux cas.
Effectivement ceci montre que le HotSpot sur la version 1.4 sous FreeBSD
n'est pas encore au point. Ca montre aussi les performances lamentables
du P4 par rapport à l'Athlon, comme je le remarque souvent (cette
machine est toute récente, avec un P4 de technologie récente). Il n'y a
pas de pb mémoire, j'ai 1 Gig.
Enfin à titre de comparaison et par curiosité, voici le résultat,
toujours sur l'athlon 1.1 Ghz, mais avec un autre JIT, ici le
jdk-1.3.1 et OpenJIT:
java 16.9 18.7 48.4
Ainsi sauf sur le int, OpenJIT fait mieux que HotSpot et même bien
mieux sur le long. Etrange.
Evidemment, sans JIT, le temps tend vers l'infini, je n'ai pas la
patience d'attendre le résultat, et c'est pareil avec python.
Pour les ceux ici nombreux qui prétendent que les langages interprétés
(notamment perl) sont rapides, cette petite expérience est tout à fait
éclairante. Elle montre bien que sur un grand nombre d'itérations
faisant effectivement intervenir de l'interprétation de bytecode, le
résultat est calamiteux. Evidemment s'il n'y a que trés peu d'itérations
faisant en fait intervenir du code compilé (dans le cas d'espèce
l'exemple favori étant le moteur d'expressions régulières) on a
l'illusion que le langage interprété peut faire aussi bien ou mieux que
du C, mais c'est évidemment sans espoir. Un JIT permet de ne pas être
catastrophique, à condition qu'il soit bien programmé, ce qui est
apparemment d'un difficulté énorme.
Richard Delorme <abulmo@nospam.fr> wrote:
Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Par curiosité, j'ai compilé le Java 1.4.2 sous FreeBSD et j'ai fait le
test. Première impression tu as une machine *super* rapide.
Chez moi
(Athlon-tbird 1.1 Ghz) on n'a pas de suite le résultat!
Bref pour moi, dans l'ordre int, double, long je trouve
C 10.9 9.4 29.3
java 13.3 22.5 170.7
Tu as bien vu, au niveau du long, j'ai un résultat catastrophiquement lent.
Je me suis dit que c'était peut être la version freebsd qui avait des
problèmes, donc j'ai pris la même version 1.4.2 du sdk chez Sun et je
l'ai mise sur mon Debian P4 3 Ghz (merci alien):
java 8.2 19.8 24.8
Les deux machines font tourner un calcul et donc java n'occupait que 80%
du processeur dans les deux cas.
Effectivement ceci montre que le HotSpot sur la version 1.4 sous FreeBSD
n'est pas encore au point. Ca montre aussi les performances lamentables
du P4 par rapport à l'Athlon, comme je le remarque souvent (cette
machine est toute récente, avec un P4 de technologie récente). Il n'y a
pas de pb mémoire, j'ai 1 Gig.
Enfin à titre de comparaison et par curiosité, voici le résultat,
toujours sur l'athlon 1.1 Ghz, mais avec un autre JIT, ici le
jdk-1.3.1 et OpenJIT:
java 16.9 18.7 48.4
Ainsi sauf sur le int, OpenJIT fait mieux que HotSpot et même bien
mieux sur le long. Etrange.
Evidemment, sans JIT, le temps tend vers l'infini, je n'ai pas la
patience d'attendre le résultat, et c'est pareil avec python.
Pour les ceux ici nombreux qui prétendent que les langages interprétés
(notamment perl) sont rapides, cette petite expérience est tout à fait
éclairante. Elle montre bien que sur un grand nombre d'itérations
faisant effectivement intervenir de l'interprétation de bytecode, le
résultat est calamiteux. Evidemment s'il n'y a que trés peu d'itérations
faisant en fait intervenir du code compilé (dans le cas d'espèce
l'exemple favori étant le moteur d'expressions régulières) on a
l'illusion que le langage interprété peut faire aussi bien ou mieux que
du C, mais c'est évidemment sans espoir. Un JIT permet de ne pas être
catastrophique, à condition qu'il soit bien programmé, ce qui est
apparemment d'un difficulté énorme.
Richard Delorme wrote:Options de compilation pour le C (avec gcc 3.3.1) :
-O3 -s -march=athlon-xp -mfpmath=sse -ffast-math -fomit-frame-pointer
Options de compilation pour Java (1.4.1 Black-down) : javac -g:none -O,
exécution avec java -server.
Matériel :
CPU athlon-xp 2000+
RAM 768 MB
Disque Maxtor 80GB/UDMA 100
OS : linux-gentoo (noyau 2.4.23)
Système de Fichier : Reiserfs
J'obtiens (en secondes) :
langage | int | long | double | trigo | I/O | total
-------------------------------------------------------
C 7.33 18.79 5.83 3.23 1.03 35.81
java 7.64 24.69 12.77 40.93 4.39 90.44
Chez moi, l'écart entre le C et java est encore plus grand que dans
l'article. J'ai comme un doute sur le résultat de gcc dans l'article,
mais bon. Java est lent. Point.
Par curiosité, j'ai compilé le Java 1.4.2 sous FreeBSD et j'ai fait le
test. Première impression tu as une machine *super* rapide.
Chez moi
(Athlon-tbird 1.1 Ghz) on n'a pas de suite le résultat!
Bref pour moi, dans l'ordre int, double, long je trouve
C 10.9 9.4 29.3
java 13.3 22.5 170.7
Tu as bien vu, au niveau du long, j'ai un résultat catastrophiquement lent.
Je me suis dit que c'était peut être la version freebsd qui avait des
problèmes, donc j'ai pris la même version 1.4.2 du sdk chez Sun et je
l'ai mise sur mon Debian P4 3 Ghz (merci alien):
java 8.2 19.8 24.8
Les deux machines font tourner un calcul et donc java n'occupait que 80%
du processeur dans les deux cas.
Effectivement ceci montre que le HotSpot sur la version 1.4 sous FreeBSD
n'est pas encore au point. Ca montre aussi les performances lamentables
du P4 par rapport à l'Athlon, comme je le remarque souvent (cette
machine est toute récente, avec un P4 de technologie récente). Il n'y a
pas de pb mémoire, j'ai 1 Gig.
Enfin à titre de comparaison et par curiosité, voici le résultat,
toujours sur l'athlon 1.1 Ghz, mais avec un autre JIT, ici le
jdk-1.3.1 et OpenJIT:
java 16.9 18.7 48.4
Ainsi sauf sur le int, OpenJIT fait mieux que HotSpot et même bien
mieux sur le long. Etrange.
Evidemment, sans JIT, le temps tend vers l'infini, je n'ai pas la
patience d'attendre le résultat, et c'est pareil avec python.
Pour les ceux ici nombreux qui prétendent que les langages interprétés
(notamment perl) sont rapides, cette petite expérience est tout à fait
éclairante. Elle montre bien que sur un grand nombre d'itérations
faisant effectivement intervenir de l'interprétation de bytecode, le
résultat est calamiteux. Evidemment s'il n'y a que trés peu d'itérations
faisant en fait intervenir du code compilé (dans le cas d'espèce
l'exemple favori étant le moteur d'expressions régulières) on a
l'illusion que le langage interprété peut faire aussi bien ou mieux que
du C, mais c'est évidemment sans espoir. Un JIT permet de ne pas être
catastrophique, à condition qu'il soit bien programmé, ce qui est
apparemment d'un difficulté énorme.
Pour nuancer ce point de vue, j'ai rarement vue les défenseurs de Perl
ou de Python mettre en avant les performances. Ils sont plus là pour
concurrencer bash ou zsh que des langages comme java ou C. En plus, le
type long, en python, permet de faire du calcul sur plus de 64 bits, et
un benchmark la dessus n'est pas très fair-play.
Pour nuancer ce point de vue, j'ai rarement vue les défenseurs de Perl
ou de Python mettre en avant les performances. Ils sont plus là pour
concurrencer bash ou zsh que des langages comme java ou C. En plus, le
type long, en python, permet de faire du calcul sur plus de 64 bits, et
un benchmark la dessus n'est pas très fair-play.
Pour nuancer ce point de vue, j'ai rarement vue les défenseurs de Perl
ou de Python mettre en avant les performances. Ils sont plus là pour
concurrencer bash ou zsh que des langages comme java ou C. En plus, le
type long, en python, permet de faire du calcul sur plus de 64 bits, et
un benchmark la dessus n'est pas très fair-play.
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Là je pense que tout le monde est d'accord
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Là je pense que tout le monde est d'accord
Ceci dit, les performances d'un langage tel que Perl ou Python face a
Java ou au C ne sont pas a chercher au niveau des performances brutes,
mais plutot au niveau de la portabilite exceptionnelle et de la rapidite
de developpement qui sont, elles, sans communes mesures.
Là je pense que tout le monde est d'accord