web-dev-qa-db-fra.com

Quelles sont les différences entre LLVM et Java bytecode?

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

-edit- par "que sont-ils", je veux dire les différences entre LLVM et Java (bytecode) pas ce que sont LLVM et Java.

65
user34537

En supposant que vous parliez de JVM plutôt que de Java:

La LLVM est une machine virtuelle bas nivea basée sur des registres. Il est conçu pour faire abstraction du matériel sous-jacent et tracer une ligne claire entre un back-end de compilateur (génération de code machine) et un front-end (analyse, etc.).

La JVM est une machine virtuelle basée sur une pile de niveau beaucoup plus élevé. La JVM fournit le garbage collection, a la notion d'objets et d'appels de méthode virtuelle et plus encore. Ainsi, la JVM fournit une infrastructure de niveau beaucoup plus élevé pour l'interopérabilité des langues (un peu comme le CLR de Microsoft).

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

82
nimrodm

C'est dommage que cette question soit tombée du mauvais pied. J'y suis venu à la recherche d'une comparaison plus détaillée.

La plus grande différence entre le bytecode JVM et le bitcode LLVM est que les instructions JVM sont orientées pile, contrairement au bitcode LLVM. Cela signifie qu'au lieu de charger des valeurs dans des registres, le bytecode JVM charge les valeurs sur une pile et calcule les valeurs à partir de là. Je crois qu'un avantage de ceci est que le compilateur n'a pas à allouer de registres, mais je ne suis pas sûr.

Le bitcode LLVM est plus proche du code au niveau de la machine, mais n'est pas lié par une architecture particulière. Par exemple, je pense que le bitcode LLVM peut utiliser un nombre arbitraire de registres logiques. Peut-être que quelqu'un plus familier avec LLVM peut parler ici?

26
Owen