Pourquoi la machine virtuelle Java aide votre code à mieux fonctionner
Discutez-vous actuellement de l’utilisation de Java pour votre prochaine application ou d’utilisation de kits d’outils et de frameworks natifs? Souhaitez-vous connaître les avantages offerts par Java par rapport à la programmation native pour une application? Continuez à lire pour le découvrir!
Qu'est-ce qu'une application native??
Une application native est un programme conçu spécifiquement pour un système d'exploitation (OS) et éventuellement pour le matériel spécifique exécutant ce système d'exploitation. Il est principalement écrit dans un langage tel que C / C ++. Le code source C / C ++ est compilé sous une forme objet à l'aide d'un compilateur, qui est ensuite assemblé dans un exécutable en liant les bibliothèques requises. Un programme créé de cette manière fonctionnera sur le matériel et le système d'exploitation spécifiques pour lesquels il est conçu, mais risque de ne pas fonctionner correctement sur d'autres systèmes.
Pourquoi les applications natives ne sont-elles pas portables??
Un compilateur pour un langage tel que C / C ++ traduit les instructions de code source en langage machine pour la CPU ciblée. Lorsque vous essayez d'exécuter ce code sur une autre CPU, le programme peut ne pas fonctionner correctement (ou ne pas fonctionner du tout), car les instructions du langage machine du code compilé risquent de ne pas être prises en charge par cette CPU..
De plus, le nouveau système d'exploitation peut être différent de celui d'origine et peut même ne pas reconnaître le fichier de programme en tant qu'exécutable. Cela est dû aux différents formats de fichiers utilisés pour les exécutables sur différents systèmes d'exploitation (tels que Windows, Linux, MacOS, etc.)..
La portabilité est un si gros problème avec les applications natives que la simple mise à niveau du compilateur vers la prochaine version peut introduire des modifications radicales. Votre code devra peut-être être corrigé pour fonctionner avec le nouveau compilateur. En tant que tel, éclabousser le code source avec ce qu'on appelle ifdef les instructions pour isoler les solutions spécifiques au matériel, au système d'exploitation ou au compilateur sont courantes.
Ce qui suit est un petit extrait de code de la bibliothèque de compression BZLib qui illustre l’utilisation de ifdefs pour isoler les particularités de la plate-forme:
#ifdef _WIN32 # include # ifdef petit / * windows.h définir petit à caractère * / # undef petit # endif # ifdef BZ_EXPORT # définir BZ_API (func) WINAPI func # définir BZ_EXTERN extern # else / * importer des fenêtres dynamiquement * / # définir BZ_API (func) (WINAPI * func) # définir BZ_EXTERN # endif #else # définir BZ_API (func) func # définir BZ_EXTERN extern #endif
Portabilité du code source sur tous les systèmes d'exploitation
Cette situation peut être atténuée dans une certaine mesure en recompilant le code source C / C ++ dans la nouvelle CPU. Toutefois, le système d'exploitation du nouveau processeur peut être différent. Et le code source ne peut pas être compilé sans modifications, majeures ou mineures. Même des modifications mineures dans les versions du système d'exploitation peuvent nécessiter certaines modifications du code source.
Et lorsque vous considérez des systèmes d'exploitation différents tels que Windows et Linux / UNIX, la portabilité est un tout nouveau jeu de balle. Sauf si vous utilisez une boîte à outils ou un framework qui vous isole complètement du système d'exploitation, la portabilité du code source est impossible. En effet, l'interface du système d'exploitation est complètement différente entre ces systèmes. Si, dans les recoins les plus éloignés de votre code, utilisez directement une primitive de système d'exploitation, votre code ne sera pas portable sur ces divers systèmes d'exploitation..
En quoi Java est-il différent??
C'est dans ce scénario que Java fournit un nouveau paradigme, une nouvelle manière de construire un logiciel. Lors de la programmation en Java, vous ciblez un machine virtuelle. Une telle machine existe sous forme de concept et le langage Java fournit des interfaces pour la programmation avec cette machine. Par exemple, vous pouvez interroger la quantité de mémoire disponible, le nombre de CPU, les interfaces réseau, etc. de la machine virtuelle..
Comment sont construites les applications Java?
Le langage Java fournit un compilateur Java qui traduit le code source en code objet. Le code de l'objet est ensuite exécuté par le machine virtuelle java, qui est un programme distinct du compilateur. Le système d'exploitation, à son tour, considère la machine virtuelle java comme un simple programme exécuté sur ce système d'exploitation..
Le fardeau de la portabilité est maintenant passé du programmeur d'application au fournisseur de machines virtuelles java. Le programmeur d'application écrit le logiciel en utilisant les primitives du langage java, et la machine virtuelle java est chargée de la traduction de ces primitives vers les installations du système d'exploitation hôte. Lorsqu'une nouvelle version du système d'exploitation est disponible, il incombe au fournisseur de mettre à jour la machine virtuelle java afin qu'elle fonctionne correctement sur le nouveau système d'exploitation..
Quels sont les avantages de la machine virtuelle Java??
Comme mentionné précédemment, la machine virtuelle java fournit une vue virtuelle du système d'exploitation et du matériel au programmeur d'application. Cette vue virtuelle se présente sous la forme de diverses interfaces et méthodes et sert à isoler le programmeur d'applications des différences entre le système d'exploitation hôte et le matériel sous-jacent. Ainsi, le programmeur d’application peut accéder à des installations telles que Windowing Toolkit, réseau, graphiques 3D, processeurs multiples, etc. sans avoir à recourir à des appels de bas niveau qui finissent par rendre le programme non portable..
Un programme java est écrit et compilé à l'aide du compilateur java. Le code objet résultant (appelé code d'octet) peut être transporté vers un système d'exploitation hôte différent fonctionnant sur un matériel différent et devrait fonctionner sans problème.
Compilateur JIT
La machine virtuelle java utilise un Compilateur JIT pour optimiser le code d'octet spécifiquement pour la CPU cible. JIT signifie Juste à temps et fait référence aux optimisations d'exécution que la JVM applique au code d'octet pour qu'elle s'exécute mieux sur le processeur actuel.
L'utilisation de la machine virtuelle Java présente un autre avantage: elle peut appliquer différentes optimisations pour différents cas d'utilisation, toutes avec le même code octet. Par exemple, la machine virtuelle Java Oracle propose deux options pour exécuter le code d'octet: un mode serveur et un mode client. Le mode serveur optimise les programmes serveur longs, alors que le mode JVM client optimise les temps de réponse, car il est probablement utilisé en mode interactif..
Pour résumer, une application native est conçue pour un matériel et un système d'exploitation spécifiques. Une application java, en revanche, suit une Construire une fois exécuté n'importe où philosophie, en ayant une machine virtuelle Java exécuter les instructions de code octet compilées. Bien que les applications natives aient toujours été considérées comme plus performantes que les applications java, il se peut que cela ne soit pas toujours le cas en raison de l'utilisation d'un compilateur JIT par la JVM..
Avez-vous développé une application native et avez-vous dû passer à Java en raison de la portabilité? Ou vice versa en raison de problèmes de performances? Faites-nous savoir dans les commentaires ci-dessous.
Crédit d'image: Profit_Image via Shutterstock.com
En savoir plus sur: Java.