Machine virtuelle Java - Niveaux de compilation

JVM prend en charge cinq niveaux de compilation -

  • Interpreter
  • C1 avec optimisation complète (pas de profilage)
  • C1 avec invocation et compteurs d'arrière-plan (profilage léger)
  • C1 avec profilage complet
  • C2 (utilise les données de profilage des étapes précédentes)

Utilisez -Xint si vous souhaitez désactiver tous les compilateurs JIT et n'utiliser que l'interpréteur.

Client vs serveur JIT

Utilisez -client et -server pour activer les modes respectifs.

Le compilateur client (C1) commence la compilation du code plus tôt que le compilateur serveur (C2). Ainsi, au moment où C2 a commencé la compilation, C1 aurait déjà compilé des sections de code.

Mais pendant qu'il attend, C2 profile le code pour en savoir plus que le C1. Par conséquent, le temps d'attente en cas de décalage par les optimisations peut être utilisé pour générer un binaire beaucoup plus rapide. Du point de vue de l'utilisateur, le compromis se situe entre le temps de démarrage du programme et le temps nécessaire à l'exécution du programme. Si le temps de démarrage est la prime, alors C1 doit être utilisé. Si l'application est censée fonctionner pendant une longue période (typique des applications déployées sur des serveurs), il est préférable d'utiliser C2 car il génère un code beaucoup plus rapide qui compense considérablement tout temps de démarrage supplémentaire.

Pour les programmes tels que les IDE (NetBeans, Eclipse) et d'autres programmes GUI, le temps de démarrage est critique. NetBeans peut prendre une minute ou plus pour démarrer. Des centaines de classes sont compilées au démarrage de programmes tels que NetBeans. Dans de tels cas, le compilateur C1 est le meilleur choix.

Notez qu'il existe deux versions de C1 - 32b and 64b. C2 vient uniquement dans64b.

Compilation à plusieurs niveaux

Dans les anciennes versions de Java, l'utilisateur aurait pu sélectionner l'une des options suivantes -

  • Interprète (-Xint)
  • C1 (-client)
  • C2 (-serveur)

Il est venu en Java 7. Il utilise le compilateur C1 pour démarrer, et à mesure que le code devient plus chaud, il passe au C2. Il peut être activé avec les options JVM suivantes: -XX: + TieredCompilation. La valeur par défaut estset to false in Java 7, and to true in Java 8.

Sur les cinq niveaux de compilation, la compilation à plusieurs niveaux utilise 1 -> 4 -> 5.