Key points are not available for this paper at this time.
La Machine Virtuelle Java (JVM) a été largement adoptée en partie en raison de son format de fichier de classe, qui est portable, compact, modulaire, vérifiable et relativement facile à utiliser. Cependant, elle a été conçue pour un seul langage—Java—et donc, lorsqu'elle est utilisée pour exprimer des programmes dans d'autres langages source, il y a souvent des problèmes qui retardent à la fois le développement et l'exécution. Les points de douleur les plus saillants se manifestent à un endroit familier, le site d'appel de méthode. Afin de généraliser les appels de méthode sur la JVM, le groupe d'experts JSR 292 a conçu une nouvelle instruction invokedynamic qui fournit une sémantique de site d'appel définie par l'utilisateur. Dans le design choisi, invokedynamic sert de point de charnière entre deux types coexistant de langage intermédiaire : le bytecode contenant des sites d'appel dynamiques, et les graphes de combinateurs spécifiant les cibles d'appel. Un compilateur dynamique peut parcourir les deux représentations simultanément, produisant du code machine optimisé qui est l'union transparente des deux types d'entrée. En dernier ressort, le lien défini par l'utilisateur d'un site d'appel peut changer, permettant au code de s'adapter à mesure que l'application évolue dans le temps. Le résultat est un système équilibrant la concision du bytecode avec la flexibilité dynamique des pointeurs de fonction.
John R. Rose (Sun,) a étudié cette question.