-
Java langage compilé
Bonjour,
Pour les programmes java dont on sait que le temps de compilation sera négligeable par rapport au temps d’exécution, est-il possible de forcer la jvm à compiler tout le bitcode dès le départ dans le but d’obtenir des temps d’exécution semblables aux programmes déjà compilés en binaire.
Si ce n’est pas possible à l’heure actuelle, est-ce envisageable dans les prochaines versions ?
-
Salut,
Je vais répondre à coté exprès dans un premier temps.
Si tu as un besoin fort en performances, en tout cas plus fort que ce dont est capable Java aujourd'hui, le mieux est de s'orienter vers un langage plus efficace et connu pour ça comme le C par exemple.
Pour répondre à différent points que tu évoques dans ton post, les performances de Java aujourd'hui sont tout à fait honnêtes et pour avoir vu certains benchmark il y a quelque années, tu serais surpris de voir que pour certaines choses il arrive même à être plus performant que certains langages compilés.
Le principe à la base de Java est tout de même "compile once run everywhere" et donc s'appuie lourdement sur le fait qu'une machine virtuelle exécute le bytecode de manière identique partout et que seule cette machine virtuelle est spécifique à un OS et donc compilée pour lui.
Et ça ne risque pas de changer, c'est à la base de la spécification de Java tout de même.
Après il reste sûrement une approche possible du genre de traduire le programme Java en un autre langage qui lui se compile directement en code machine.. mais je ne conseillerai jamais ça comme solution à des soucis de performances.
Bulbo ;)
-
Salut,
Déjà si tu veux des performances tu dois utiliser la JVM server, avec l'option -server. Cette JVM effectues des opérations plus poussé pour améliorer les performances, en dépit d'un temps de chargement un peu plus lent. Bref parfait pour un serveur :D
Sinon tu peux peut-être jouer avec -XX:CompileThreshold= pour modifier le nombre d'itération/exécution de méthode avant qu'elle soit compilé.
-XX:CompileThreshold=1 devrait donc forcer la compilation de toute les méthode (attention ca risque d'avoir l'effet inverse :( à celui souhaité).
N'hésites pas à consulter la doc des arguments de la JVM : http://www.oracle.com/technetwork/ja...sp-140102.html
Mais c'est à utiliser avec précautions ;)
a++
-
La JVM compile le bytecode en code natif selon des critères qui lui sont propres sur un projet de calcul 3D, elle le faisait au premier appel de la chaîne de calcul.
Tu peux donc utiliser un mode "Server" qui va tourner en tâche de fond et attendre des données à traiter. Les premiers traitements seront longs mais par la suite ca ira beaucoup plus vite.