Bienvenidos a otro capítulo de este Curso Gratis de Java para Hackers – Java Runtime Environment. Comparte este articulo y síguenos para recibir más capítulos, guías y cursos gratis.

Índice

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

JRE es un entorno de ejecución de Java 

Es la implementación de JVM, es decir, las especificaciones definidas en JVM se implementan y crean un entorno correspondiente para la ejecución de código. JRE comprende principalmente binarios de Java y otras clases para ejecutar el programa como JVM que existe físicamente.

Junto con los binarios de Java, JRE también consta de varias tecnologías de implementación, interfaces de usuario para interactuar con el código ejecutado, algunas bibliotecas base para diferentes funcionalidades y bibliotecas basadas en lenguajes y utilidades .

JRE es un acrónimo de Java Runtime Environment. También está escrito como Java RTE. Java Runtime Environment es un conjunto de herramientas de software que se utilizan para desarrollar aplicaciones Java. Se utiliza para proporcionar el entorno de ejecución. Es la implementación de JVM. Existe físicamente. Contiene un conjunto de bibliotecas + otros archivos que JVM usa en tiempo de ejecución.

Además de Sun Micro Systems, otras empresas también lanzan activamente la implementación de JVM.

Componentes de Java JRE

Los siguientes son los componentes de Java JRE:

  • Bibliotecas de integración, como Java Naming and Directory Interface (JNDI) y Java Database Connectivity (JDBC)
  • Invocación de método remoto (RMI)
  • Tecnologías utilizadas para la implementación, incluido Java Web Start
  • Invocación de método remoto a través del protocolo Inter-Orb de Internet (RMI-IIOP)
  • Kits de herramientas para interfaz de usuario, como Java 2D
  • secuencias de comandos
  • Bibliotecas, incluidas Lang y util.
  • Otras bibliotecas base, que incluyen Java Native Interface (JNI), Java Management Extensions (JMX) y Java para procesamiento XML (JAX-WS)

¿En qué consiste Java JRE?

Echemos un vistazo en profundidad a en qué consiste este entorno de ejecución en Java.

  • Bibliotecas de integración, que incluyen invocación de método remoto a través del protocolo Inter-Orb de Internet (RMI-IIOP), lenguaje de definición de interfaz (IDL), invocación de método emote (RMI), conectividad de base de datos Java (JDBC) e interfaz de directorio y nombres de Java (JNDI). .
  • Java Virtua Machine (JVM) comprende Java HubSpot y Server Virtual Machine.
  • Bibliotecas base terrestre y de utilidades, que incluyen Java Archive (JAR), lang y util, zip, API de preferencias, instrumento, reflexión, administración, control de versiones, registro, colecciones, utilidades de simultaneidad, objetos de referencia y expresiones regulares.
  • Tecnologías de implementación, que incluyen complementos de Java, implementación y Java Web Start.
  • Kits de herramientas de interfaz de usuario, que incluyen sonido, arrastrar y soltar (DnD), Java 2D, Swing, kit de herramientas de ventana abstracta (AWT), E/S de imágenes, servicio de impresión, accesibilidad y métodos de entrada. 
  • Otras bibliotecas base, como entrada/salida (E/S), mecanismo de extensión, soporte internacional, Beans, Extensiones de administración de Java (JMX), Matemáticas, Redes, Mecanismo de anulación, Interfaz nativa de Java (JNI), Seguridad, Serialización y Java para Procesamiento XML (XML JAXP).

¿Cómo funciona JRE con JVM?

Java Development Kit (JDK) y Java Runtime Environment (JRE) interactúan entre sí para crear un entorno de ejecución sostenible para que las aplicaciones basadas en Java puedan ejecutarse sin problemas en cualquier sistema operativo. Este entorno Java tiene una instancia de JVM, herramientas de desarrollo y una clase de biblioteca. 

La arquitectura de tiempo de ejecución de JRE incluye los siguientes elementos:

  1. Cargador de clases
  2. Verificador de código de bytes
  3. Intérprete

Hemos analizado cada uno de ellos en detalle a continuación:

1. Cargador de clases

ClassLoader en Java carga dinámicamente las clases necesarias para ejecutar un programa. Como las clases se cargan en la memoria cuando es necesario, JRE utiliza Classloader, que automatiza el proceso. Durante la inicialización de JVM , se cargan tres cargadores de clases, que son los siguientes:

  • Cargador de clases bootstrap
  • Cargador de clases de extensión
  • Cargador de clases del sistema

2. Verificador de código de bytes

El verificador de código de bytes se considera un guardián. Comprueba el formato y la precisión del código Java antes de transmitirlo al intérprete. Además, verifica el código de bytes para evitar cualquier tipo de perturbación o obstáculo para el intérprete. 

El código sólo se puede interpretar cuando pasa la evaluación del verificador de código de bytes. Si el código viola la integridad del sistema, la clase se trata como corrupta y no se cargará. 

3. Intérprete

Una vez que se verifica el código y se carga el código de bytes, el intérprete de Java crea un objeto de JVM, lo que permite que el programa Java se ejecute de forma nativa en la máquina subyacente. 

Lee el código ensamblador una línea a la vez y realiza dos funciones: ejecutar el código de bytes y realizar las llamadas apropiadas al hardware subyacente.

Descargar el entorno de ejecución de Java

Para descargar Java Runtime Environment (JRE), siga estos pasos:

1. Acceda a la página de descarga de Oracle:

Visite la página de descarga oficial de Oracle en http://www.oracle.com/technetwork/java/javase/downloads/index.html.

2. Elija la versión de la plataforma Java:

Busque la sección denominada “Plataforma Java, edición estándar”. Puede seleccionar la versión más reciente o hacer clic en “Versiones anteriores” si prefiere instalar una versión anterior compatible. Están disponibles las opciones JDK (Java Development Kit) y JRE (Java Runtime Environment). Recuerde evitar el uso de versiones no compatibles.

3. Seleccione el sistema operativo:

Siga las ayudas de navegación proporcionadas para seleccionar el enlace de descarga apropiado para su sistema operativo.

4. Descargue el JRE o JDK:

Descargue JRE o JDK según sus preferencias. Tenga en cuenta que el JDK incluye el JRE, por lo que tiene la opción de elegir cualquiera de los dos.

5. Instale el JRE o JDK:

Siga las instrucciones de instalación proporcionadas con el archivo descargado para instalar JRE o JDK en su sistema.

6. Tenga en cuenta la ruta al ejecutable JRE:

Durante el proceso de instalación, asegúrese de recordar la ruta al archivo ejecutable JRE. Necesitará esta información más adelante.

7. Proceda a la verificación JRE:

Una vez completada la instalación, continúe con las instrucciones “Verificación del entorno JRE” para asegurarse de que JRE se haya configurado correctamente en su sistema.

Preguntas frecuentes sobre el entorno de ejecución de Java

¿Necesito JRE para ejecutar programas Java?

Sí, el JRE es esencial para ejecutar programas Java. Proporciona el entorno de ejecución necesario para ejecutar el código de bytes de Java en su sistema. Sin JRE, las aplicaciones Java no se pueden ejecutar.

¿El JRE está incluido en el JDK (Java Development Kit)?

Sí, el JDK incluye el JRE. El JDK proporciona herramientas y bibliotecas adicionales para el desarrollo de Java, lo que lo hace adecuado para los desarrolladores. Si sólo está interesado en ejecutar aplicaciones Java y no desarrollarlas, puede descargar e instalar solo el JRE.

¿Puedo tener varias versiones de JRE instaladas en mi sistema?

Sí, puede tener varias versiones de JRE instaladas en su sistema. Sin embargo, debe asegurarse de que sus aplicaciones estén configuradas para utilizar la versión correcta. Es una buena práctica mantener actualizadas las versiones de JRE para beneficiarse de las actualizaciones de seguridad y mejoras de rendimiento.

¿El JRE es compatible con todos los sistemas operativos?

El JRE está disponible para una amplia gama de sistemas operativos, incluidos Windows, macOS y varias distribuciones de Linux. Oracle proporciona descargas de JRE para diferentes plataformas. Sin embargo, es importante utilizar la versión que coincida con su sistema operativo.

¿Puedo desinstalar versiones anteriores de JRE?

Es una buena práctica desinstalar las versiones anteriores de JRE una vez que haya actualizado a una versión más nueva. Mantener varias versiones puede generar vulnerabilidades de seguridad. Puede desinstalar versiones anteriores a través del panel de control o la configuración de su sistema.

¿Existen alternativas al Oracle JRE?

Sí, existen implementaciones alternativas de JRE, como OpenJDK y AdoptOpenJDK. Estas alternativas ofrecen la misma funcionalidad principal que Oracle JRE, pero pueden tener diferentes términos de licencia y opciones de soporte.

¿Se requiere JRE para que los navegadores web ejecuten subprogramas de Java?

Sí, históricamente los subprogramas de Java utilizaban JRE para ejecutarse en navegadores web. Sin embargo, los navegadores modernos han dejado de admitir subprogramas de Java debido a problemas de seguridad y rendimiento. Como resultado, se recomienda utilizar tecnologías alternativas para aplicaciones web.

JDK y JRE

El JDK Java Development Kit que español se traduce como kit de desarrollo de Java, contiene las herramientas y librerías necesarias para crear y ejecutar aplicaciones de Java. Si no se tiene instalado ningún JDK no se podrá hacer ninguna aplicación. Algunas utilidades con las que cuenta el JDK son:

  • Javac. basicamente es el compilador de Java y es el que se encarga de traducir el código de fuente que escribimos en Java a ByteCode.
  • Java. Es el lanzador de aplicaciones en Java y ejecuta el bytecode a partir de los archivos .class
  • AppletViewer. Es una herramienta que permite visualizar applets sin la necesidad de hacerlo en un navegador Web, entendiendo que un applet es una aplicación de java que se ejecuta en un navegador Web.
  • Javadoc. Herramienta de Java que permite generar documentación automatica en formato HTML a partir de comentarios especiales que se ponen en el código de la aplicación.
  • Jar. Es una herramienta que sirve para crear y gestionar los archivos de empaquetado JAR.
  • JDB. Es el Java Debugger que sirve para depurar programas.
  • Javap. Es una herramienta para desensamblar archivos .class.

Hay otras utilidades más, pero estas son las más importantes y fácil de entender en este momento. Por otro lado tenemos el JRE Java Runtime Enviroment que es el Entorno de ejecución de Java, que es un conjunto de utilidades que permite la ejecución de programas en Java y dicho de otra manera es la máquina virtual de Java (junto con las librerías o API de JAVA). Al igual que se mencionó con el JDK, si no tenemos instalado el JRE no podremos ejecutar ninguna aplicación hecha en Java. Cabe aclarar que si somos desarrolladores y nos disponemos a instalar el JDK no hará falta instalar el JRE ya que este viene incluido en el anterior.

Diferencias entre JDK, JRE y JVM

Java Development Kit (JDK ) es un entorno de desarrollo de software utilizado para desarrollar aplicaciones y subprogramas Java. Incluye Java Runtime Environment (JRE), un intérprete/cargador (Java), un compilador (javac), un archivador (jar), un generador de documentación (Javadoc) y otras herramientas necesarias en el desarrollo de Java. 

Ahora necesitamos un entorno para ejecutar nuestro programa. De ahora en adelante, JRE significa “Java Runtime Environment” y también puede escribirse como “Java RTE”. Java Runtime Environment proporciona los requisitos mínimos para ejecutar una aplicación Java; consta de la máquina virtual Java (JVM), clases principales y archivos de soporte . 

Ahora analicemos JVM , que se destaca entre las máquinas virtuales Java. Es el siguiente:

  • Una especificación donde se especifica el funcionamiento de la Máquina Virtual Java. Pero el proveedor de implementación es independiente para elegir el algoritmo. Su implementación ha corrido a cargo de Sun y otras empresas.
  • Una implementación es un programa informático que cumple con los requisitos de la especificación JVM.
  • Instancia de tiempo de ejecución Cada vez que escribe un comando java en el símbolo del sistema para ejecutar la clase java, se crea una instancia de JVM.

Antes de continuar con las diferencias entre JDK, JRE y JVM, primero analicémoslas brevemente y relacionémoslas con la imagen propuesta a continuación.

No se confunda ya que los discutiremos todos uno por uno.

1. JDK (Java Development Kit)

es un kit que proporciona el entorno para desarrollar y ejecutar (ejecutar) el programa Java. JDK es un kit (o paquete) que incluye dos cosas

  • Herramientas de desarrollo (para proporcionar un entorno para desarrollar sus programas Java)
  • JRE (para ejecutar su programa java).

2. JRE (Java Runtime Environment)

es un paquete de instalación que proporciona un entorno para ejecutar (no desarrollar) únicamente el programa (o aplicación) Java en su máquina. JRE sólo lo utilizan aquellos que sólo quieren ejecutar programas Java que son usuarios finales de su sistema.

3. JVM ( Java Virtual Machine) 

es una parte muy importante tanto de JDK como de JRE porque está contenida o integrada en ambos. Cualquier programa Java que ejecute utilizando JRE o JDK entra en JVM y JVM es responsable de ejecutar el programa Java línea por línea, por lo que también se le conoce como intérprete .

Ahora analicemos los componentes de JRE para comprender su importancia y percibir cómo funciona realmente. Para esto, analicemos los componentes.

Los componentes de JRE son los siguientes:

  • Tecnologías de implementación , incluida la implementación, Java Web Start y Java Plug-in.
  • Kits de herramientas de interfaz de usuario , incluidos Abstract Window Toolkit (AWT), Swing, Java 2D, Accesibilidad, E/S de imágenes, Servicio de impresión, Sonido, arrastrar y soltar (DnD) y métodos de entrada .
  • Bibliotecas de integración , incluido el lenguaje de definición de interfaz (IDL), la conectividad de bases de datos Java (JDBC), la interfaz de directorio y nombres de Java (JNDI), la invocación de método remoto (RMI), la invocación de método remoto a través del protocolo Inter-Orb de Internet (RMI-IIOP) y secuencias de comandos .
  • Otras bibliotecas base , incluido soporte internacional, entrada/salida (E/S), mecanismo de extensión, Beans, Extensiones de administración de Java (JMX), Interfaz nativa de Java (JNI), Matemáticas, Redes, Mecanismo de anulación, Seguridad, Serialización y Java para Procesamiento XML (XML JAXP) .
  • Bibliotecas base Lang y util , que incluyen lang y util, administración, control de versiones, zip, instrumento, reflexión, colecciones, utilidades de concurrencia, archivo Java (JAR), registro, API de preferencias, objetos de referencia y expresiones regulares .
  • Máquina virtual Java (JVM) , que incluye máquinas virtuales de servidor y cliente Java HotSpot .

Después de tener una comprensión adecuada de los componentes, analicemos ahora el funcionamiento de JDK. Para comprender cómo funciona JDK, consideremos una ilustración a continuación:

Ilustración:

Considere un archivo fuente de Java guardado como ‘ Ejemplo.java’ . El archivo se compila en un conjunto de código de bytes que se almacena en un archivo ” .class “. Aquí será ” Ejemplo.clase “. 

Nota : Desde arriba, se puede interpretar el cálculo de la operación de medios durante el tiempo de compilación.

Las siguientes acciones ocurren en tiempo de ejecución como se enumeran a continuación:

  • Cargador de clases
  • Verificador de código de bytes
  • Intérprete
  • Ejecutar el código de bytes
  • Realice llamadas apropiadas al hardware subyacente

Ahora analicemos brevemente cómo funciona JVM. Es el siguiente:

JVM se convierte en una instancia de JRE en tiempo de ejecución de un programa Java. Es ampliamente conocido como intérprete de tiempo de ejecución. JVM ayuda en gran medida a abstraer la implementación interna de los programadores que utilizan bibliotecas para sus programas desde JDK. 

Es principalmente responsable de tres actividades. 

  • Cargando
  • Enlace
  • Inicialización

De manera similar, ahora analicemos el funcionamiento de JRE, que es el siguiente:

  • JVM (Java Virtual Machine) actúa como un motor de ejecución para ejecutar aplicaciones Java. JVM es la que realmente llama al método principal presente en un código Java. JVM es parte de JRE (Java Runtime Environment).
  • Las aplicaciones Java se denominan WORA (Write Once Run Anywhere). Esto significa que un programador puede desarrollar código Java en un sistema y puede esperar que se ejecute en cualquier otro sistema habilitado para Java sin ningún ajuste. Todo esto es posible gracias a JVM.
  • Cuando compilamos un archivo .java , el compilador de Java genera archivos .class (contiene código de bytes) con los mismos nombres de clase presentes en el archivo .java . Este archivo .class consta de varios pasos cuando lo ejecutamos. Estos pasos juntos describen toda la JVM.

Compilador Just-In-Time

El compilador JIT o Just-In-Time es una parte esencial del JRE (Java Runtime Environment) , que es responsable de la optimización del rendimiento de las aplicaciones basadas en Java durante el tiempo de ejecución. El compilador es uno de los aspectos clave a la hora de decidir el rendimiento de una aplicación para ambas partes, es decir, el usuario final y el desarrollador de la aplicación. Veamos el compilador Just In Time en Java con más detalle.

Compilador JIT de Java

Bytecode es una de las características más importantes de Java que ayuda en la ejecución multiplataforma. La forma de convertir el código de bytes al lenguaje de máquina nativo para su ejecución tiene un gran impacto en su velocidad. Estos códigos de bytes deben interpretarse o compilarse en instrucciones de máquina adecuadas según la arquitectura del conjunto de instrucciones.

Además, se pueden ejecutar directamente si la arquitectura de instrucciones se basa en código de bytes. La interpretación del código de bytes afecta la velocidad de ejecución. Para mejorar el rendimiento, los compiladores JIT interactúan con la máquina virtual Java (JVM) en tiempo de ejecución y compilan secuencias de código de bytes adecuadas en código de máquina nativo.

Al utilizar un compilador JIT, el hardware puede ejecutar el código nativo, en comparación con hacer que la JVM interprete la misma secuencia de código de bytes repetidamente e incurrir en gastos generales para el proceso de traducción. Posteriormente, esto conduce a mejoras en el rendimiento de la velocidad de ejecución, a menos que los métodos compilados se ejecuten con menos frecuencia. 

El compilador JIT puede realizar ciertas optimizaciones simples mientras compila una serie de códigos de bytes en lenguaje de máquina nativo. Algunas de estas optimizaciones realizadas por los compiladores JIT son el análisis de datos, la reducción de los accesos a la memoria mediante la asignación de registros, la traducción de operaciones de pila a operaciones de registro, la eliminación de subexpresiones comunes, etc. Cuanto mayor sea el grado de optimización realizado, más tiempo tardará un JIT.

El compilador gasta en la etapa de ejecución. Por lo tanto, no puede permitirse el lujo de realizar todas las optimizaciones de las que es capaz un compilador estático, debido a la sobrecarga adicional que se agrega al tiempo de ejecución y, además, su vista del programa también está restringida. 

 

Trabajando en el compilador JIT

Java sigue un enfoque orientado a objetos y, como resultado, consta de clases. Estos constituyen un código de bytes que es neutral en la plataforma y son ejecutados por la JVM en arquitecturas diversificadas.

  • En tiempo de ejecución, la JVM carga los archivos de clase, se determina la semántica de cada uno y se realizan los cálculos apropiados. El uso adicional de procesador y memoria durante la interpretación hace que una aplicación Java funcione lentamente en comparación con una aplicación nativa.
  • El compilador JIT ayuda a mejorar el rendimiento de los programas Java al compilar código de bytes en código de máquina nativo en tiempo de ejecución.
  • El compilador JIT está habilitado en todo momento, mientras que se activa cuando se invoca un método. Para un método compilado, la JVM llama directamente al código compilado, en lugar de interpretarlo. En teoría, si la compilación no requiriera tiempo de procesador ni uso de memoria, la velocidad de un compilador nativo y la de un compilador Java habrían sido las mismas.
  • La compilación JIT requiere tiempo de procesador y uso de memoria. Cuando la máquina virtual Java se inicia por primera vez, se invocan miles de métodos. La compilación de todos estos métodos puede afectar significativamente el tiempo de inicio, incluso si el resultado final es una muy buena optimización del rendimiento.

Diferencia entre JIT y JVM en Java

La máquina virtual Java (JVM) se utiliza en el entorno de ejecución de Java (JRE). La JVM original fue concebida como un intérprete de código de bytes. Esto puede resultar un poco sorprendente debido a problemas de rendimiento. Muchos lenguajes modernos están destinados a compilarse en código ejecutable específico de la CPU. Sin embargo, el hecho de que la JVM ejecute un programa Java ayuda a abordar los principales problemas asociados con las aplicaciones basadas en web.

El hecho de que la JVM ejecute un programa Java también ayuda a hacerlo estable. Dado que la JVM está a cargo, la ejecución del programa está controlada por ella. Por lo tanto, es posible que la JVM cree un área de ejecución limitada llamada sandbox que contenga el software, evitando que el sistema obtenga acceso ilimitado. La protección también se ve mejorada por algunas limitaciones en el lenguaje Java que existe. La arquitectura JVM de Java incluye un cargador de clases, un motor de ejecución, un campo de memoria, etc.

Para comprender las diferencias, profundicemos en los componentes ilustrando el funcionamiento de JVM. 

  • ClassLoader : El cargador de clases tiene el propósito de cargar archivos de clases. Ayuda a realizar tres funciones principales: carga, inicialización y vinculación.
  • JVM language Stacks : la memoria Java almacena variables locales y resultados parciales de un cálculo. Cada subproceso tiene su propia pila JVM, que se crea a medida que se crea el subproceso. Cuando se invoca el método, se crea un nuevo marco y luego se elimina.
  • Method Area: el área de métodos JVM se especializa en almacenar metadatos y archivos de código subyacente para aplicaciones Java.
  • PC Registers: los registros de PC guardan la dirección de instrucción de la máquina virtual Java que se está ejecutando actualmente. Cada hilo en Java tiene su propio registro de PC independiente.
  • Heap: en un montón se guardan todos los objetos, matrices y variables de instancia. Esta memoria se comparte entre varios hilos.
  • Execution Engine: es una forma de software que se utiliza para probar software, hardware o sistemas completos. El motor de ejecución de pruebas nunca contiene ninguna información sobre el producto que se está probando.
  • Native Method Libraries, que son el motor de ejecución, necesitan bibliotecas nativas (C, C++) y la interfaz de métodos nativos, que es un marco para la programación, es la interfaz de métodos nativos. Esto permite que el código Java que se ejecuta en una JVM llame a bibliotecas y aplicaciones nativas. Además, las pilas de métodos nativos tienen un comando de código nativo que depende de la biblioteca nativa. Asigna almacenamiento a montones nativos o utiliza cualquier tipo de pila.

Compilador Justo a tiempo (JIT)

Si bien Java se desarrolló como un lenguaje interpretado, para mejorar el rendimiento, no hay nada en Java que impida la compilación del código de bytes en código nativo sobre la marcha. Por esa razón, poco después del lanzamiento inicial de Java, se lanzó HotSpot JVM. HotSpot incluye un compilador de código de bytes justo a tiempo (JIT). Un compilador Just In Time (JIT) es parte de la JVM y, según la demanda pieza por pieza, porciones seleccionadas de código de bytes se compilan en código ejecutable en tiempo real. Es decir, como es necesario durante la ejecución, un compilador JIT compila código. Además, no se compilan todas las secuencias de códigos de bytes, sólo aquellas que se beneficiarán de la compilación.

Sin embargo, el método del justo a tiempo sigue generando un importante aumento de la ineficiencia. La función de portabilidad y seguridad todavía existe aunque se aplique la compilación dinámica al código de bytes, ya que la JVM todavía tiene el control del entorno de ejecución.

Para comprender las diferencias, profundicemos en los componentes ilustrando el funcionamiento de JIT.

Al interpretar el código de bytes, la implementación estándar de JVM ralentiza la ejecución de los programas. Los compiladores JIT interactúan con JVM en tiempo de ejecución para mejorar el rendimiento y compilar secuencias de código de bytes apropiadas en código de máquina nativo.

El hardware interpreta el código en lugar de JVM (máquina virtual Java). Esto puede conducir a mejoras de rendimiento en la velocidad de ejecución. Esto se puede hacer por archivo, por función o tal vez en cualquier fragmento de código arbitrario; El código a menudo se compila cuando está a punto de ejecutarse (de ahí el nombre “justo a tiempo”) y luego se almacena en caché y se reutiliza más tarde sin tener que volver a compilarlo. Realiza muchas optimizaciones: análisis de datos, traducción de operaciones de pila a operaciones de registro, reducción del acceso a la memoria mediante la asignación de registro, eliminación de subexpresiones comunes.

Por lo tanto, a partir del conocimiento anterior, llegamos a las diferencias concluyentes entre ellos como se menciona en la siguiente tabla:

Tabla de Diferencias entre JVM y JIT

JVMJIT
JVM significa Máquina Virtual Java.JIT significa compilación justo a tiempo.
JVM se introdujo para administrar la memoria del sistema y proporcionar un entorno de ejecución transportable para aplicaciones basadas en Java.JIT se inventó para mejorar el rendimiento de JVM después de muchos años de su lanzamiento inicial.
JVM consta de muchos otros componentes como área de pila, área de montón, etc.JIT es uno de los componentes de JVM.
JVM compila código de bytes completo en código de máquina.JIT compila solo el código de bytes reutilizable en código de máquina.
JVM proporciona independencia de plataforma.JIT mejora el rendimiento de JVM.

Diferencia entre código de bytes y código de máquina

El código de bytes es un código intermedio entre el código fuente y el código de máquina. Es un código de bajo nivel que es el resultado de la compilación de un código fuente el cual está escrito en un lenguaje de alto nivel. Es procesado por una máquina virtual como Java Virtual Machine (JVM) .

El código de bytes es un código que no se puede ejecutar después de que un intérprete lo traduce a código de máquina y luego es comprensible para la máquina. Está compilado para ejecutarse en JVM, cualquier sistema que tenga JVM puede ejecutarlo independientemente de su sistema operativo. Por eso Java es independiente de la plataforma. El código de bytes se conoce como código portátil.

Codigo de maquina:

El código de máquina es un conjunto de instrucciones que las máquinas pueden entender directamente y son procesadas por la Unidad Central de Procesamiento (CPU). El código de máquina está en formato binario (0 y 1), que es completamente diferente del código de bytes y del código fuente. Se considera como la representación de nivel más bajo del código fuente. El código de máquina se obtiene después de la compilación o interpretación. También se le llama lenguaje de máquina.

La siguiente figura ilustra el ejemplo de cómo el código fuente de Java se convierte en código de bytes y luego en código de máquina:

Diferencia entre código de bytes y código de máquina:

S.NO. Código de bytes Codigo de maquina
 01.Código de bytes que consta de instrucciones macro binarias, hexadecimales como (nuevo, agregar, intercambiar, etc.) y no es directamente comprensible para la CPU. Está diseñado para una ejecución eficiente mediante software como una máquina virtual.nivel intermedio Código de máquina que consta de instrucciones binarias que la CPU puede entender directamente.
 02. El código de bytes se considera código de nivel intermedio. El código de máquina se considera el código de bajo nivel.
 03. El código de bytes es un código no ejecutable generado después de la compilación del código fuente y depende de un intérprete para su ejecución. El código de máquina es un conjunto de instrucciones en lenguaje de máquina o en formato binario y es ejecutado directamente por la CPU.
 04. El código de bytes lo ejecuta la máquina virtual y luego la Unidad Central de Procesamiento. El código de máquina no lo ejecuta una máquina virtual, sino que lo ejecuta directamente la CPU.
 05.  El código de bytes es menos específico de la máquina que el código de máquina. El código de máquina es más específico para la máquina que el código de bytes.
 06. Es independiente de la plataforma ya que depende de la máquina virtual y el sistema que tiene una máquina virtual se puede ejecutar independientemente de la plataforma.  No es independiente de la plataforma porque el código objeto de una plataforma no se puede ejecutar en sistemas operativos diferentes. El objeto varía según la arquitectura del sistema y las instrucciones nativas asociadas con la máquina.
 07. No es necesario convertir todo el código fuente en código de bytes para su ejecución por la CPU. Parte del código fuente escrito por cualquier lenguaje específico de alto nivel se convierte en código de bytes y luego en código de bytes en código objeto para su ejecución por la CPU.Todo el código fuente debe convertirse en código de máquina antes de que la CPU lo ejecute.

¿Cómo es independiente la plataforma Java?

El significado de independiente de la plataforma Java es que el código compilado de Java (código de bytes) se puede ejecutar en todos los sistemas operativos. Un programa está escrito en un lenguaje que es legible por humanos. Puede contener palabras, frases, etc. que la máquina no comprende. Para que la máquina entienda el código fuente, debe estar en un lenguaje que entiendan las máquinas, normalmente un lenguaje a nivel de máquina. Entonces, aquí viene el papel de un compilador. El compilador convierte el lenguaje de alto nivel (lenguaje humano) a un formato comprensible para las máquinas. 

Por tanto, un compilador es un programa que traduce el código fuente de otro programa de un lenguaje de programación a código ejecutable. Este código ejecutable puede ser una secuencia de instrucciones de máquina que la CPU puede ejecutar directamente, o puede ser una representación intermedia interpretada por una máquina virtual. Esta representación intermedia en Java es el código de bytes de Java. 

Ejecución paso a paso del programa Java

  • Siempre que un programa se escribe en JAVA, javac lo compila.
  • El resultado del compilador JAVA es el archivo .class o el código de bytes y no el código nativo de la máquina (a diferencia del compilador C).
  • El código de bytes generado es un código no ejecutable y necesita un intérprete para ejecutarse en una máquina. Este intérprete es la JVM y, por lo tanto, la JVM ejecuta el código de bytes.
  • Y finalmente, el programa se ejecuta para dar el resultado deseado.

Ejecución del programa Java

En el caso de C o C++ (lenguajes que no son independientes de la plataforma), el compilador genera un archivo .exe que depende del sistema operativo. Cuando intentamos ejecutar este archivo .exe en otro sistema operativo, no se ejecuta, ya que depende del sistema operativo y, por lo tanto, no es compatible con el otro sistema operativo.

¿Por qué Java es independiente de la plataforma pero JVM depende de la plataforma?

En Java, el punto principal aquí es que la JVM depende del sistema operativo, por lo que si ejecuta Mac OS X tendrá una JVM diferente que si ejecuta Windows o algún otro sistema operativo. Este hecho se puede verificar intentando descargar la JVM para su máquina en particular; cuando intente descargarla, se le dará una lista de JVM correspondientes a diferentes sistemas operativos y, obviamente, elegirá la JVM destinada al sistema operativo que desee.

Estas corriendo. Entonces podemos concluir que JVM depende de la plataforma y es la razón por la cual Java puede volverse “independiente de la plataforma”. 

Puntos importantes: 

  • En el caso de Java, es la magia de Bytecode la que lo hace independiente de la plataforma .
  • Esto se suma a una característica importante del lenguaje JAVA denominada portabilidad . Cada sistema tiene su propia JVM que se instala automáticamente cuando se instala el software JDK. Para cada sistema operativo hay disponible una JVM independiente que es capaz de leer el archivo .class o el código de bytes.
  • Un punto importante a tener en cuenta es que, si bien JAVA es un lenguaje independiente de la plataforma, la JVM depende de la plataforma. Diferentes JVM están diseñadas para diferentes sistemas operativos y el código de bytes puede ejecutarse en diferentes sistemas operativos.

Nota: Como JVM no es independiente de la plataforma, Java no se considera completamente independiente de la plataforma. La máquina virtual de Java por tanto, es lo que hace que los programas en Java sean multiplataforma, rápidos y de alto rendimiento, y que esto formara parte de que Java sea un lenguaje masivamente utilizado.

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Universidad Hacking. Todo en Ciberseguridad. Curso Completo

Aprende Hacking Ético y Ciberseguridad sin necesitar conocimientos Previos. Practica Hacking Ético y Ciberseguridad aquí

Calificación: 4,6 de 5 (2.877 calificaciones) 15.284 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments Worldwide

Lo que aprenderás

  • Aprende Seguridad informática
  • Te enseñare Hacking Ético
  • Veremos Ciberseguridad
  • La base principal del Hacking, Redes
  • Programación (Python) Necesitaras saber Python para, Hacking con Python
  • Te enseñare Análisis de Malware, además haremos laboratorios, practicas y ejecutaremos Malware para que veas su comportamiento.
  • Te enseñare a reforzar tu Privacidad y Anonimato
  • Aprenderás una de las herramientas mas populares por excelencia en el mundo del Hacking, Metasploit
  • Es importante que aprendas Seguridad informática Mobile ya que usamos nuestro celular como una PC
  • Veremos también el top 10 de Owasp Web
  • Veremos también el top 10 de Owasp mobile
  • Veremos también el top 10 de Owasp API
  • Ante la demanda del mercado, te enseñare Seguridad informática para empresas
  • Veras también la suit de herramientas de seguridad informática en un sistema operativo, Kali Linux
  • Herramientas de hacking para el celular en Termux
  • Seguridad informática en WordPress
  • Análisis de trafico en Wireshark

El Hacking Ético y Ciberseguridad es Transversal a todo lo que sea Tecnología.

¿Esto que significa?

Que hoy más que nunca, se necesitan personas capacitadas en este rubro para trabajar.

Por esa razón cree esta formación profesional para compartirte mis conocimientos y experiencia en la materia y puedas iniciar en este mundo del Hacking Ético y Ciberseguridad.

Te voy a estar acompañando en el proceso de aprendizaje, donde si estas empezando desde 0, sin conocimientos previos, no es un impedimento ya que iniciaremos como si no supieras nada de la materia.

Y si sos una persona con conocimientos, podrás iniciar directamente en el nivel más avanzado o en el que tu elijas.

Como en todos mis cursos en udemy, tendrás muchísima practica para que materialices lo que vas aprendiendo.

Empieza a aprender ya mismo!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis de Programación

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools