Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Performance question

10 réponses
Avatar
Vincent Cantin
Bonjour,

Quelqu'un a une idee de la difference de performance entre un programme
purement algorithmique (pas de code natif, et pas beaucoup d'usage de "new"
dans les boucles principales) compile en natif et le meme dans un language
plus crade genre C++ ?

Je veux porter le programme de mon jeu en Java parce que je galere trop avec
C++ et ses plantages hardcores pour des broutilles .. je pense que j'irais
plus vite dans le developement en portant le jeu en Java et en le compilant
si necessaire a la fin. Ceci est une reel question, pas un troll, j'ai
besoin d'avoir une idee de la difference entre les 2. Si je me plante dans
mon audacieuse decision, je vais me faire virer :p

Merci,
Vincent

10 réponses

Avatar
KiLVaiDeN
"Vincent Cantin" wrote in message
news:
Bonjour,

Quelqu'un a une idee de la difference de performance entre un programme
purement algorithmique (pas de code natif, et pas beaucoup d'usage de
"new"

dans les boucles principales) compile en natif et le meme dans un language
plus crade genre C++ ?

Je veux porter le programme de mon jeu en Java parce que je galere trop
avec

C++ et ses plantages hardcores pour des broutilles .. je pense que j'irais
plus vite dans le developement en portant le jeu en Java et en le
compilant

si necessaire a la fin. Ceci est une reel question, pas un troll, j'ai
besoin d'avoir une idee de la difference entre les 2. Si je me plante dans
mon audacieuse decision, je vais me faire virer :p

Merci,
Vincent




C++ sera plus rapide, notamment parce que tu pourras toujours optimiser
certaines boucles avec de l'assembleur, chose difficilement réalisable en
Java..
Et Java n'est pas fait pour être compilé en natif, même si l'option existe,
donc je dirais que de ce fait, il aura toujours une certaine lourdeur, ne
serait-ce que pour l'import des librairies..
Ce que je te conseille de faire, c'est de faire un programme de test
significatif, en Java et en C++, pour voir la différence au niveau des
performances ( par significatif, comprend un programme qui utiliserait les
mêmes ressources que ton jeu )

Cependant, la machine virtuelle de Java devient de plus en plus rapide, il y
a même des jeux développés sous Java3D ! Donc sans parler de compilation,
seulement avec l'interprétation de la machine virtuelle, tu devrais aussi
avoir une performance honorable, en tout cas suffisante pour un jeu, reste à
vérifier cela encore une fois avec un jeu de test significatif pour ton
application.

Mon conseil : si une grande partie de ton jeu existe déjà en C++, continue
et fini le en C++ ( tu perdras beaucoup de temps à le porter )
Pour tes prochains développement, pense dès le début à Java, en aillant prit
soin de vérifier que les performances sont suffisamment satisfaisantes pour
tes applications.

Bonne chance !

K

Avatar
Kam
Quelqu'un a une idee de la difference de performance entre un programme
purement algorithmique (pas de code natif, et pas beaucoup d'usage de
"new"

dans les boucles principales) compile en natif et le meme dans un language
plus crade genre C++ ?

Je veux porter le programme de mon jeu en Java parce que je galere trop
avec

C++ et ses plantages hardcores pour des broutilles .. je pense que j'irais
plus vite dans le developement en portant le jeu en Java et en le
compilant

si necessaire a la fin. Ceci est une reel question, pas un troll, j'ai
besoin d'avoir une idee de la difference entre les 2. Si je me plante dans
mon audacieuse decision, je vais me faire virer :p



Le portage en Java sera forcément plus lent que le code compilé en C/C++.
Pour avoir un ordre d'idée, pourquoi ne pas te faire un piti programme tout
bête qui exécute des calculs correspondant plus ou moins à ceux que tu
feras, le faire tourner en bouce et chronométrer tout ça ?
Parce qu'un programme 'purement alrogithmique' peut prendre tellement de
sens différents qu'il n'y a pas vraiment de réponse exacte à ta question.

Sinon, il faut garder à l'esprit que le portage d'une application Java en
C++ n'est pas vraiment un standard. Ca existe, dans certains IDE, avec le
GCJ ou encore des softs payants comme Jet, mais ça reste du bricolage. Par
exemple, de nombreuses classes ne sont pas compilables nativement (argh...
pourquoi j'ai utilisé les NIO, dans mon projet.....).

Tout ça pour dire que si tu penses vraiment pouvoir gagner du temps en
redéveloppant ton projet en Java, pourquoi ne pas utiliser java pour le
développement rapide et le coeur du programme, et JNI pour implémenter les
méthode gourmandes en CPU ?

Kam

PS : je ne vois pas trop en quoi le C/C++ est un langage crade. Ce n'est pas
le langage qui est crade : c'est le code qu'on écrit.
De la même manière, il ne plante JAMAIS pour des broutilles. Il plante
TOUJOURS pour des bugs de développement, ou une mauvaise compréhension des
concepts de base du C/C++ (mais non, je ne pense pas aux pointeurs :-)

Avatar
Richard Delorme
Bonjour,

Quelqu'un a une idee de la difference de performance entre un programme
purement algorithmique (pas de code natif, et pas beaucoup d'usage de "new"
dans les boucles principales) compile en natif et le meme dans un language
plus crade genre C++ ?

Je veux porter le programme de mon jeu en Java parce que je galere trop avec
C++ et ses plantages hardcores pour des broutilles .. je pense que j'irais
plus vite dans le developement en portant le jeu en Java et en le compilant
si necessaire a la fin. Ceci est une reel question, pas un troll, j'ai
besoin d'avoir une idee de la difference entre les 2. Si je me plante dans
mon audacieuse decision, je vais me faire virer :p


Ça dépend de la performance recherchée...

J'ai développé deux programmes d'Othello, l'un en Java :
http://perso.club-internet.fr/abulmo/ajax.htm
l'autre en C :
http://perso.club-internet.fr/abulmo/edax/

La version en C éclate la version en Java, en partie dû au langage, en
partie parce que la version Java n'est qu'une applet, avec des
limitations volontaires de ma part. Il n'empêche que la version en Java
reste très difficile à battre pour un joueur humain, et est ainsi un
adversaire intéressant.

--
Richard

Avatar
Kupee
Vincent Cantin wrote:
Bonjour,

Quelqu'un a une idee de la difference de performance entre un programme
purement algorithmique (pas de code natif, et pas beaucoup d'usage de "new"
dans les boucles principales) compile en natif et le meme dans un language
plus crade genre C++ ?

Je veux porter le programme de mon jeu en Java parce que je galere trop avec
C++ et ses plantages hardcores pour des broutilles .. je pense que j'irais
plus vite dans le developement en portant le jeu en Java et en le compilant
si necessaire a la fin. Ceci est une reel question, pas un troll, j'ai
besoin d'avoir une idee de la difference entre les 2. Si je me plante dans
mon audacieuse decision, je vais me faire virer :p


Salut, contrairement aux autres je ne suis pas persuadé qu'en Java ton
jeu sera forcément plus lent. Il existe de bons exemples de jeux
en java extremement performants. Regarde par exemple Jake2,
une adaptation de Quake 2 en Java :
http://www.bytonic.de/html/jake2.html
Particulièrement impressionnant, il n'y a qu'1% de différence environ
entre la version C et la version Java.
Cela dit dans ce jeu une bonne partie est gérée par la lib open GL,
mais ca reste tout de même très très fort.

Avatar
Thibaut Desmarest
KiLVaiDeN wrote:


Java aura toujours une certaine lourdeur, ne
serait-ce que pour l'import des librairies..


Ah !
Voilà un point qui m'interpelle !
Je ne savais pas que l'import des librairies était une tâche si lourde.
Est ce vraiment significatif ? Est ce qu'il est utile de mettre :

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JList;

plutôt que import javax.swing.*;

Y gagne t'on vraiment ou est ce que ca ne se verra pas ?

Merci d'avance,


Thibaut

Avatar
Isammoc
Java aura toujours une certaine lourdeur, ne
serait-ce que pour l'import des librairies..


Ah !
Voilà un point qui m'interpelle !
Je ne savais pas que l'import des librairies était une tâche si lourde.
Est ce vraiment significatif ? Est ce qu'il est utile de mettre :

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JList;

plutôt que import javax.swing.*;

Y gagne t'on vraiment ou est ce que ca ne se verra pas ?


Selon la doc de java, ca ne se verra pas, car la classe n'est chargée qu'à
l'appel du composant...

Merci d'avance,

Thibaut


Isammoc


Avatar
Kupee
Thibaut Desmarest wrote:
Java aura toujours une certaine lourdeur, ne
serait-ce que pour l'import des librairies..



Ah !
Voilà un point qui m'interpelle !
Je ne savais pas que l'import des librairies était une tâche si lourde.
Est ce vraiment significatif ? Est ce qu'il est utile de mettre :

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JList;

plutôt que import javax.swing.*;

Y gagne t'on vraiment ou est ce que ca ne se verra pas ?


Strictement aucune différence, en java les classes ont
pour nom complet javax.swing.JButton par exemple et les
importer sert a pouvoir écrire juste JButton dans ton code.
Ca sert uniquement a rendre ton code plus lisible.
Une fois passé par le compilateur le code généré
est exactement le même


Avatar
KiLVaiDeN
"Thibaut Desmarest" wrote in message
news:clssuf$1htd$
KiLVaiDeN wrote:


Java aura toujours une certaine lourdeur, ne
serait-ce que pour l'import des librairies..


Ah !
Voilà un point qui m'interpelle !
Je ne savais pas que l'import des librairies était une tâche si lourde.
Est ce vraiment significatif ? Est ce qu'il est utile de mettre :

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JList;

plutôt que import javax.swing.*;

Y gagne t'on vraiment ou est ce que ca ne se verra pas ?

Merci d'avance,


Thibaut


Bonjour,

Sous Java, et sous la machine virtuelle Java, importer javax.swing.*, ou
importer les classes une par une ne change rien niveau performance ( le
bytecode généré sera le même, les classes utilisées seront dynamiquement
chargées ).
La différence est la lisibilité du codeur, et une maîtrise plus importante
de l'application : en effet, si tu importes * tu ne sais pas quelles sont
les classes que tu utilises vraiment, et tu es obligé de parcourir le code
pour le savoir. Par contre, importer les classes une à une, permet d'un coup
d'oeil en haut du code source de visualiser les classes qui ont été
utilisées.

Je parlais cependant de la lourdeur des librairies lors d'un passage sous
exécutable natif.

K


Avatar
Vincent Cantin
Salut, contrairement aux autres je ne suis pas persuadé qu'en Java ton
jeu sera forcément plus lent. Il existe de bons exemples de jeux
en java extremement performants. Regarde par exemple Jake2,
une adaptation de Quake 2 en Java :
http://www.bytonic.de/html/jake2.html
Particulièrement impressionnant, il n'y a qu'1% de différence environ
entre la version C et la version Java.
Cela dit dans ce jeu une bonne partie est gérée par la lib open GL,
mais ca reste tout de même très très fort.


Oui, j'ai vu aussi ce projet .. c'est pour ca que je me pose la question de
savoir ce que je devrais faire ...

Bon ... en fait quand j'ai fait mon post, j'esperais que quelqu'un allait me
donner une fourchette genre 70%~97% .. mais personne n'a ose etre precis,
dommage.

Merci quand meme a tous pour vos commentaires, fondes ou non-fondes.

Je pense que je vais laisser tomber le C++ ... ca me bouffe tout mon temps
et mon jeu ne sera jamais fini si je continue dessus.

Vincent

Avatar
Kupee
Vincent Cantin wrote:
Oui, j'ai vu aussi ce projet .. c'est pour ca que je me pose la question de
savoir ce que je devrais faire ...

Bon ... en fait quand j'ai fait mon post, j'esperais que quelqu'un allait me
donner une fourchette genre 70%~97% .. mais personne n'a ose etre precis,
dommage.

Merci quand meme a tous pour vos commentaires, fondes ou non-fondes.

Je pense que je vais laisser tomber le C++ ... ca me bouffe tout mon temps
et mon jeu ne sera jamais fini si je continue dessus.


En vérité je pense qu'on peut pas donner une réponse fiable, car
ca dépend énormément du type d'application, de ce qu'on fait,
et surtout du développeur. Un bon développeur java fera mieux
qu'un mauvais développeur C. A mon avis faire un jeu en java
est parfaitement envisageable, et il devrait tourner
de manière tout a fait raisonnable. Bien sur si tu veux faire Doom 3
c'est une autre affaire mais bon, c'est pas le premier jeu qu'on
envisage de faire tout seul chez soi ...
Après je pense que tu peux chercher dans ton jeu les parties
les plus lourdes pour les optimiser, peut etre passer par des
librairies en C que tu développeras. Bref t'as de quoi
t'amuser. (Un super profiler : Optimize It de Borland)