web-dev-qa-db-fra.com

indicateurs d'optimisation javac

J'ai récemment écrit beaucoup de code en C et je passe maintenant à Java. J'implémente actuellement une grande structure de données et je me demandais s'il y avait des indicateurs d'optimisation que je peux activer lorsque j'appelle le compilateur Java afin d'améliorer les performances comme dans gcc.

Je suis habitué à:

gcc -O3 -NDEBUG MyProgram.c

existe-t-il une commande analogue pour javac?

J'utilise JDK et j'exécute Ubuntu 10.04.

31
themaestro

L'optimisation dans Java est principalement effectuée par le compilateur JIT lors de l'exécution. Par conséquent, il est inutile d'essayer de lui demander d'optimiser d'une certaine manière au moment de la compilation (quand il ne crée de toute façon que du bytecode). JIT prendra presque sûrement de meilleures décisions sur place, connaissant l'environnement exact et observant les modèles réels d'exécution de parties spécifiques de votre code.

Il existe certaines options de compilation spécifiques affectant les performances, mais celles-ci sont destinées à l'optimisation de la JVM (y compris le garbage collector) plutôt qu'à l'optimisation du code lui-même.

25
Péter Török

Il n'y a pas d'équivalent à -O3 ou l'un des -O niveaux, mais il existe des options de réglage spécifiques auxquelles vous avez accès via -XX:. Il y a une liste complète disponible ici .

Cependant, cela suppose que vous utilisez la machine virtuelle Java fournie par Oracle et elle peut différer en fonction de votre environnement ("utiliser JDK" ne décrit pas vraiment la version que vous utilisez)

17
Daniel DiPaolo

Vous pouvez optimiser Java octet code en l'exécutant via Proguard , un populaire Java obfuscator. Il réduira, optimisera et obscurcira) code dans cet ordre avec des commutateurs pour contrôler à peu près tout. Il supprimera les méthodes et variables inutilisées, le code en ligne, supprimera les branches mortes, fusionnera le code identique et effectuera des dizaines d'autres optimisations. Le résultat est un fichier jar qui fait la même chose que votre entrée mais prend moins d'espace et fonctionne plus rapidement.

C'est un incontournable pour les logiciels commerciaux côté client.

13
locka

Les optimisations de code Java sont appliquées pendant l'exécution comme le Hotspot VM le juge approprié. (Pour autant que je sache, cela implique de garder une trace du nombre d'appels de méthodes et de compiler des méthodes fréquemment appelées en code natif et d'essayer plusieurs types) d'optimisations également.)

Le seul commutateur connecté à distance que vous pouvez utiliser avec javac est -g:none qui indique au compilateur d'omettre les informations de débogage: cela n'affecte pas vraiment les performances de votre code mais cela diminue la taille du .class des dossiers.

Lorsque vous démarrez le VM cependant, vous avez le choix entre -server et -client options, qui affecteront l'éventail des optimisations et leur précocité.

4
biziclop

La JVM et la JIT effectueront la plupart des optimisations pour votre code, au moment de l'exécution, vous devrez donc mordre la balle et faire confiance aux manipulateurs de bytecode sous-jacents (JVM et JIT) pour effectuer les optimisations.

1
darioo