telecharger - télécharger java virtual machine windows 10




Optimisation de machine virtuelle (5)

Je suis en train de jouer avec un interpréteur de jouets en Java et je pensais essayer d'écrire un compilateur simple qui peut générer un bytecode pour la machine virtuelle Java. Ce qui m'a fait penser, combien d'optimisation doit être faite par les compilateurs qui ciblent les machines virtuelles telles que JVM et CLI?

Les compilateurs juste-à-temps (JIT) font-ils des plis constants, des optimisations de peepholes, etc.?


L'optimisation du bytecode est probablement un oxymore dans la plupart des cas

Je ne pense pas que ce soit vrai. Les optimisations telles que les invariants de la boucle de levage et les constantes de propagation ne peuvent jamais faire de mal, même si la JVM est assez intelligente pour les faire par elle-même, par simple raison de rendre le code moins efficace.


L'optimisation est ce qui rend les JVMs viables en tant qu'environnements pour des applications à exécution longue, vous pouvez parier que SUN, IBM et vos amis font de leur mieux pour optimiser votre code bytecode et JIT compilé de la manière la plus efficace possible.

Cela étant dit, si vous pensez que vous pouvez pré-optimiser votre bytecode alors il ne fera probablement pas beaucoup de mal.

Il convient toutefois de noter que les JVM peuvent avoir tendance à mieux fonctionner (et ne pas s'écraser) lorsqu'elles sont présentées avec le type de bytecode que le compilateur Java a tendance à construire. Il n'est pas impossible que des optimisations soient manquées ou même que la JVM se bloque lorsque des permutations de bytecode sont correctes mais contrairement à ce qui serait produit par javac. Espérons que ce genre de chose est plus dans le passé maintenant, mais peut être quelque chose à être conscient.



L'optimisation du bytecode est probablement un oxymore dans la plupart des cas. À moins que vous ne contrôliez la machine virtuelle, vous n'avez aucune idée de ce qu'elle fait pour accélérer l'exécution du code, le cas échéant. Le compilateur devrait connaître les détails de la machine virtuelle afin de générer du code optimisé.


Obfuscators tels que ProGuard effectuera de nombreuses optimisations statiques sur votre bytecode pour vous.





cil