2017-09-11 3 views
-2

Je sais que Java donne un avantage puissant: le code Java est compilé en bytecode et ce bytecode est exécuté par JVM, donc Java est sur la portabilité. Cependant, il existe des fonctions telles que leur implémentation dépend du système d'exploitation.Comment est-ce possible que chaque pot fonctionne sur Linux et Windows?

https://speakerdeck.com/raboof/jvm-hacking (4e diapositive)
Comme vous pouvez le voir, il existe un code C dépendant du système. Comment ça marche ? Je veux dire que le même jar utilisant la méthode bind peut être exécuté sur Windows et Linux. Après tout, bind méthode sur Linux et Windows peut être assez différent (nombre de paramètres, nom et plus).

Pouvez-vous m'expliquer?

+0

Je n'ai pas vu l'implémentation JVM ou JDK sous-jacente, mais [peut-être] (https://stackoverflow.com/questions/5919996/how -to-detect-fiable-mac-os-x-ios-linux-windows-en-c-préprocesseur) fera la lumière sur une façon possible de le faire. –

+0

Donc, simplement le code C natif exécuté à partir de JVM (runtime) a quelque chose comme si WIN_32, ouais? –

+0

Je n'ai pas dit ça. J'ai dit que c'est une façon possible de le faire. Souvenez-vous également que chaque environnement a son propre JRE, donc si le fichier JAR exécutable est le même, le JRE ne l'est pas. –

Répondre

0

C'est la JVM et sa bibliothèque d'exécution qui font la magie.

Les programmes Java purs sont constitués de bytecode et la JVM interprète ou compile ce bytecode, ce qui permet à la CPU/OS locale de l'exécuter. Ensuite, il y a des méthodes déclarées comme «natives», et la bibliothèque d'exécution Java spécifique pour Windows x86 a son implémentation, la version x64 a une autre implémentation, la version Linux XYZ a encore une autre implémentation et ainsi de suite. La signature (nombre et type de paramètres) de ces méthodes natives est la même sur toutes les implémentations, construisant une abstraction commune sur les fonctionnalités Windows/Linux/macOS qu'ils enveloppent.

Si vous avez besoin d'utiliser vous-même des méthodes natives dans votre code, vous devez fournir toutes les implémentations nécessaires avec votre programme (.dll, .so ou tout autre système dont vous avez besoin). Mais heureusement, c'est rarement nécessaire car la bibliothèque Java est assez complète ...