CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Temps d'exécution de code JAVA

Romuald_78
Romuald_78
Niveau 5
11 février 2015 à 09:55:30

Bonjour,

Je voulais avoir vos avis concernant l'exécution d'un code JAVA, et surtout la comparaison entre des traitements de variables de type double ou float et des variables de type int.

Mon problème est que j'ai des méthodes que j'ai optimisé mais je ne suis pas encore satisfait des perfs. Alors je voulais savoir si en utilisant que des entiers dans mes calculs plutot que des flottants j'allais gagner du temps.

Est-ce que la différence entre les bytecode java qui sont généré avec des flottants ou des entiers est significative ?

Merci par avance.

Romuald.

PS: ce soir je vais lancer Java Visual VM pour faire du profiling de mon code donc je verrai bien quelles sont les fonctions les plus consommatrices mais je voulais tt de meme avoir vos avis sur le sujet des types de variables avant.

Romuald_78
Romuald_78
Niveau 5
11 février 2015 à 10:19:43

J'ai trouvé ce topic qui traite du sujet.
[http://stackoverflow.com/questions/3350808/int-vs-float-arithmetic-efficiency-in-java]

D'après les gars qui écrivent, je crains de devoir profiler plusieurs versions de mes algos et voir laquelle possède les meilleures performances.

à suivre....

Bunyan
Bunyan
Niveau 17
11 février 2015 à 10:54:36

Première étape : analyse des bottlenecks.
Ca ne sert à rien d'optimiser des portions de code qui ne sont pas problématique.

Passer par des int te fera gagner un peu, mais c'est de la micro-optimisation du peu que je sais. Fais déjà une passe d'analyse pour savoir ce que tu dois améliorer avant de partir bille en tête :)

gromouton
gromouton
Niveau 6
11 février 2015 à 12:33:19

Ce n'est pas sur les int et float que tu gagneras qlq chose, généralement les problèmes de perfs proviennent surtout du code que tu fais, c'est comme ceux qui essaye de gagner du temps entre quote et double-quotes.

Vérifie d'abord tes méthodes et fonctions avant de faire ça ainsi que les bibli que tu utilises.

Romuald_78
Romuald_78
Niveau 5
11 février 2015 à 13:45:41

Oui c'est ce que j'ai dit au debut : je vais profiler tout ca mais vu que mes methodes sont "relativement simples" mais appelées un très grand nombre de fois, je me demandais si ca ne serait pas une solution.
Bon apparemment les qq reponses s'accordent à dire que ce n'est pas sur le type de variable que je vais gagner.
Je vous tiens au courant de la suite.

AZIR2015
AZIR2015
Niveau 7
11 février 2015 à 15:15:45

Le temps d'exécution ainsi que la performance du langage n'importe plus de nos temps :hap:
Par contre, je crois que la différence au niveau des bits occupés est peu significative ( même si les int ça fait plus rapide que les double ) mais je ne crois pas que ça va augmenter grande chose.

Bunyan
Bunyan
Niveau 17
11 février 2015 à 17:20:44

Le temps d'exécution ainsi que la performance du langage n'importe plus de nos temps :hap:

Va dire ça pour de l'embarqué ou du mobile :)
Accessoirement, si l'on faisait un poil plus attention, il ne faudrait pas des octo-coeur avec 128 Go de RAM pour faire tourner un Hello World (oui, je caricature ;) ).

tbol
tbol
Niveau 20
11 février 2015 à 18:23:52

La performance reste importante dans certains cas de figure, par exemple dans le domaine des jeux vidéos pour PC qui demandent des performances graphiques, pour cette raison beaucoup d'éditeurs de logiciels sont restés sur C++ (plus moteur de jeux pour C++) alors que certains qui se sont aventurés à passer au technologies JIT se sont vautrés avec des jeux trop lents et injouables. Par contre pour les jeux de stratégie beaucoup utilisent Python et ça passe sans probleme.

Message édité le 11 février 2015 à 18:25:24 par tbol
godrik
godrik
Niveau 30
11 février 2015 à 21:08:18

Romuald, c'est une question tres complique en pratique. La premiere question qu'il faut te poser est: comment ce code est il compiler en code natif. Tu veux t'assurer d'avoir une JVM qui fait une vraie compilation et pas la passe de base faite par les JVM hotspot. Avec une vraie compilation, tu as une chance d'avoir plein d'effet sympa comem vectorization, function inlineling. et ce genre de chose.

Apres la perf que tu vas obtenir depends du type de donne, mais ca va dependre egalement de l'architecture du processeur et de son jeu d'instruction. Les processeurs moderne ont tendance a faire plus de calcul flottant qu'entier.

Mais la question de la performance que tu obtiens est bien plus large que seulement le type de donnee que tu traite. Si tu as des question plus precise n'hesites pas. (Les questions de performance, c'est mon boulot.)

Schiffer
Schiffer
Niveau 10
11 février 2015 à 21:10:25

Tu peux écrire les fonctions critiques de ton programme en C/C++ puis les wrapper avec JNI pour les utiliser ensuite dans java

Romuald_78
Romuald_78
Niveau 5
12 février 2015 à 10:06:50

J'avais prévu le cas des JNI "au cas où" mais au final tout ce qui a été dit plus haut concernant le fait que les float les double les int ca n'influe pas pas sur les perfs hé bien je l'ai vu egalement.

J'ai lancé le profiler et en fait mon souci ne venait pas de mes fonctions de generation de bruit coherent mais des fonctions au dessus qui les appelaient beaucoup trop pour rien (j'avais de la redondance de calcul pour obtenir les memes infos)
Bref j'ai pu corriger mon problème et les perfs sont là :)

J'ai egalement vu de la perte de perfs en utilisant des int à la place des double ds qq fonctions, bref.... le typage des paramètres n'etait pas un problème (mais il a fallu que je le benchmark par moi meme pour m'en rendre compte)

Merci encore de vos commentaires
Le problème etait situé entre la chaise et le clavier au final ..... c'est souvent le cas non !? :)

JeanSwaggyTits
JeanSwaggyTits
Niveau 7
12 février 2015 à 11:34:14

Sinon pour le temps de ton exécution en Java, une classe chronometre maison avec des System.currentTimeMillis(), ça passe tout seul ! un constructeur qui initialise, une méthode qui retourne, une méthode qui arrete, une méthode qui reset. Easy

JeanSwaggyTits
JeanSwaggyTits
Niveau 7
12 février 2015 à 11:35:24

Et à partir de ce Chrono, tu teste toutes les structures de données sur lesquelles tu doute, et tu vois le temps d'exécution le plus rapide !

Sinon il existe pas des cours sur le net sur la complexité Algorithmique ? Je pense que ça répondrais à ta question

Romuald_78
Romuald_78
Niveau 5
12 février 2015 à 14:44:43

Le 12 février 2015 à 11:34:14 JeanSwaggyTits a écrit :
Sinon pour le temps de ton exécution en Java, une classe chronometre maison avec des System.currentTimeMillis(), ça passe tout seul ! un constructeur qui initialise, une méthode qui retourne, une méthode qui arrete, une méthode qui reset. Easy

Merci je connaissais mais mon souci c'est que mes fonctions (chaque) sont de l'ordre de qq centaines de nano secondes chacune (elles sont très petites mais sont appelées un grand nombre de fois dans mon application) du coup je n'arrivais pas à m'en sortir en profilant à la main comme tu me le conseillais mais c'est bon , comme j'ai dit, en utilisant le profiler de la machine virtuelle Java j'ai eu toutes les infos qui vont bien pour le faire ;) et j'ai trouvé mon erreur..... qui était dans l'architecture de mon code (et pas dans l'ecriture de mes fonctions)

Merci.

Message édité le 12 février 2015 à 14:45:11 par Romuald_78
Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment