75 votes

Quelles sont les différences entre le bytecode LLVM et java?

Je ne comprends pas la différence entre LLVM et le java (bytecode), quels sont-ils?

-edit- par "qu'est-ce qu'ils", je veux dire les différences entre LLVM et java (bytecode) et non ce que sont LLVM et java.

87voto

nimrodm Points 9191

En supposant que vous voulez dire JVM plutôt que de Java:

La LLVM est un faible niveau en fonction de registre de la machine virtuelle. Il est conçu pour abstraire le matériel sous-jacent et de tracer une ligne nette entre un compilateur back-end (machine de génération de code) et avant la fin de l'analyse, etc.).

La JVM est un niveau beaucoup plus élevé de pile de la machine virtuelle. La JVM fournit la collecte des ordures, la notion d'objets virtuels et des appels de méthode et les plus. Ainsi, la JVM fournit un niveau beaucoup plus élevé de l'infrastructure pour l'interopérabilité de langue (un peu comme Microsoft CLR).

(Il est possible de construire ces abstractions sur LLVM tout comme il est possible de construire au-dessus de C.)

28voto

Owen Points 113

Il est dommage que cette question est descendu sur le mauvais pied. Je suis à la recherche pour une comparaison plus détaillée.

La plus grande différence entre le bytecode JVM et et le bytecode LLVM est que la JVM instuctions sont pile-orienté, tandis que le bytecode LLVM n'est pas. Cela signifie que, plutôt que de charger les valeurs dans les registres, du bytecode JVM charges de valeurs sur une pile et calcule les valeurs à partir de là. Je crois que c'est un avantage de cela est que le compilateur n'a pas à allouer des registres, mais je ne suis pas sûr.

Bytecode LLVM est plus proche de la machine au niveau du code, mais n'est pas lié par une architecture particulière. Par exemple, je pense que le bytecode LLVM pouvez faire usage d'un nombre arbitraire de la logique des registres. Peut-être que quelqu'un de plus familier avec LLVM peut parler ici?

-4voto

vext01 Points 514

Java est un langage de programmation qui utilise la machine virtuelle Java comme moyen d’exécution "Just in Time" (JIT), tandis que LLVM est un kit de construction de compilateur destiné à développer de nouveaux langages et frontaux pour les langages existants. LLVM dispose d'un moteur JIT, mais il n'est pas nécessaire de l'utiliser si vous n'en avez pas besoin. Vous pouvez supprimer l'assembleur LLVM, l'assembleur spécifique à une plate-forme ou un code plutôt que d'utiliser l'exécution JIT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X