¿Por qué la máquina virtual Java ayuda a que tu código funcione mejor?
¿Actualmente está debatiendo si usar java para su próxima aplicación, o usar kits de herramientas y marcos nativos? ¿Le gustaría saber qué ventajas ofrece Java sobre la programación nativa para una aplicación? Sigue leyendo para descubrir!
¿Qué es una aplicación nativa??
Una aplicación nativa es un programa escrito específicamente para un sistema operativo (SO), y posiblemente para el hardware específico que ejecuta ese SO. En su mayoría está escrito en un lenguaje como C / C ++. El código fuente de C / C ++ se compila en un formulario de objeto utilizando un compilador, que luego se ensambla en un ejecutable al vincular las bibliotecas requeridas. Un programa creado de esta manera se ejecutará en el hardware y sistema operativo específico para el que está diseñado, pero es posible que no funcione correctamente en otros sistemas.
¿Por qué las aplicaciones nativas no son portátiles??
Un compilador para un lenguaje como C / C ++ traduce las declaraciones del código fuente al lenguaje de máquina para la CPU objetivo. Cuando intenta ejecutar este código en una CPU diferente, es posible que el programa no funcione correctamente (o funcione en absoluto), ya que es posible que la CPU no admita las instrucciones en lenguaje de máquina del código compilado..
Además, el nuevo sistema operativo puede ser diferente del original y puede que ni siquiera reconozca el archivo de programa como un ejecutable. Esto se debe a los diferentes formatos de archivo utilizados para los ejecutables en diferentes sistemas operativos (como Windows, Linux, MacOS, etc.).
La portabilidad es un problema tan grande con las aplicaciones nativas que simplemente actualizar el compilador a la próxima versión puede introducir cambios de última hora. Es posible que su código deba ser arreglado para que funcione con el compilador más nuevo. Como tal, salpicar el código fuente con lo que se conoce como ifdef Las declaraciones para aislar soluciones específicas de hardware, OS o compilador son comunes..
El siguiente es un pequeño fragmento de código de la biblioteca de compresión BZLib que ilustra el uso de ifdefs para aislar las peculiaridades de la plataforma:
#ifdef _WIN32 # include # ifdef small / * windows.h define small to char * / # undef small # endif # ifdef BZ_EXPORT # define BZ_API (func) WINAPI func # define BZ_EXTERN extern # else / * importar ventanas dll dinámicamente * / # define BZ_API (func) (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API (func) func # define BZ_EXTERN extern #endif
Portabilidad del código fuente en los sistemas operativos
Esta situación se puede aliviar en cierta medida al volver a compilar el código fuente de C / C ++ en la nueva CPU. Sin embargo, el sistema operativo para la nueva CPU puede ser diferente. Y el código fuente no puede compilarse sin cambios, ya sea mayor o menor. Incluso los cambios menores en las versiones del sistema operativo pueden requerir algunos cambios en el código fuente.
Y cuando considera sistemas operativos diferentes como Windows y Linux / UNIX, la portabilidad es un juego de pelota completamente nuevo. A menos que esté utilizando un kit de herramientas o un marco que lo aísle completamente del sistema operativo, la portabilidad del código fuente es imposible. Esto se debe a que la interfaz del sistema operativo es completamente diferente entre estos sistemas. Si usted, en los rincones más remotos de su código, usa directamente cualquier primitiva de sistema operativo, entonces su código no será portátil en estos diversos sistemas operativos..
¿En qué se diferencia Java??
En este escenario, Java ofrece un nuevo paradigma, una nueva forma de construir software. Al programar en java, apuntas a un máquina virtual. Tal máquina existe como un concepto, y el lenguaje Java proporciona interfaces para la programación en contra de esta máquina. Por ejemplo, puede consultar la cantidad de memoria disponible, la cantidad de CPU, las interfaces de red, etc. de la máquina virtual..
¿Cómo se construyen las aplicaciones Java??
El lenguaje java proporciona un compilador java que traduce el código fuente en código objeto. El código objeto es ejecutado por el máquina virtual de Java, que es un programa separado del compilador. El sistema operativo, a su vez, ve la máquina virtual Java como un programa más que se ejecuta en ese sistema operativo.
La carga de la portabilidad ahora ha pasado del programador de aplicaciones al proveedor de máquinas virtuales java. El programador de aplicaciones escribe el software utilizando las primitivas del lenguaje java, y la máquina virtual java es responsable de traducir estas primitivas a las instalaciones del sistema operativo del host. Cuando sale una nueva versión del sistema operativo, es responsabilidad del proveedor actualizar la máquina virtual java para que funcione correctamente en el nuevo sistema operativo..
¿Cuáles son las ventajas de la máquina virtual de Java??
Como se mencionó anteriormente, la máquina virtual java proporciona una vista virtual del sistema operativo y el hardware al programador de aplicaciones. Esta vista virtual tiene la forma de varias interfaces y métodos, y sirve para aislar al programador de la aplicación de las diferencias en el sistema operativo host y el hardware subyacente. De este modo, el programador de aplicaciones puede acceder a instalaciones como un kit de herramientas de Windowing, redes, gráficos en 3D, múltiples CPU, etc. sin tener que recurrir a llamadas de bajo nivel que terminan haciendo el programa no portátil..
Se escribe un programa java y se compila con el compilador java. El código objeto resultante (llamado código de byte) se puede transportar a un sistema operativo host diferente que se ejecuta en hardware diferente y debe ejecutarse sin problemas.
Compilador JIT
La máquina virtual java usa un Compilador JIT para optimizar el código de bytes específicamente para la CPU de destino. JIT significa Justo a tiempo y hace referencia a las optimizaciones de tiempo de ejecución que JVM aplica al código de byte para que funcione mejor en la CPU actual.
Otra ventaja de usar la Máquina Virtual Java es que puede aplicar diferentes optimizaciones para diferentes casos de uso, todos con el mismo código de bytes. Por ejemplo, la JVM de Oracle proporciona dos opciones para ejecutar el código de byte: un modo de servidor y un modo de cliente. El modo de servidor se optimiza para programas de servidor de larga ejecución, mientras que el modo de JVM del cliente se optimiza para tiempos de respuesta rápidos, ya que es probable que se use en modo interactivo.
Para resumir, se construye una aplicación nativa para un hardware y un sistema operativo específicos. Una aplicación java, por otro lado, sigue una Construir una vez ejecutar en cualquier lugar filosofía, al hacer que una JVM ejecute las instrucciones compiladas del código de bytes. Si bien las aplicaciones nativas se han visto tradicionalmente con más rendimiento que las aplicaciones de Java, puede que no siempre sea así debido al uso de un compilador JIT por parte de la JVM..
¿Ha desarrollado una aplicación nativa y tuvo que cambiar a Java debido a la portabilidad? ¿O viceversa debido a problemas de rendimiento? Háganos saber en los comentarios a continuación..
Crédito de la imagen: Profit_Image a través de Shutterstock.com
Explorar más sobre: Java.