Una máquina virtual es exactamente lo que parece, una máquina que está virtualmente dentro del software. Un poco como Neo conciencia dentro de Matrix, una máquina digital que existe dentro de un sistema operativo más grande.
Este software se instala en un dispositivo local y luego se puede usar para ejecutar otros sistemas operativos bajo el existente. Un caso de uso específico y común es instalar VirtualBox en Windows o Mac y luego crear una instancia virtual de otro sistema operativo, como una distribución de Linux.
Si estás aquí, es porque has elegido la píldora roja y quieres explorar la madriguera del conejo de Java Wonderland. En esta publicación, vamos a discutir qué es una máquina virtual Java, cómo funciona y cómo solucionar problemas de la máquina virtual Java.
¿Qué es una Máquina Virtual Java?
Java Virtual Machine (JVM) es un programa que interpreta el código de bytes de Java para ejecutarlo como un programa, proporcionando un entorno de tiempo de ejecución para realizar este proceso. Además, está separado del entorno operativo, lo que respalda la filosofía de «escribir una vez, ejecutar en cualquier lugar».
Uno de los beneficios más importantes de usar Java es usar la JVM para ejecutar un programa Java en cualquier entorno operativo. En las siguientes secciones, cubriremos para qué sirve la JVM y los conceptos básicos para comprenderla.
Java Virtual Machine es una herramienta viral y ampliamente utilizada mantenida por desarrolladores de Java Corporation y la comunidad de código abierto. Sun Microsystems optó por Java de código abierto, lo que condujo al desarrollo de OpenJDK. El uso continuo y el soporte de OpenJDK se debió principalmente a la mayor parte de la carga de trabajo que soportan los desarrolladores de Oracle.
¿Para qué sirve la JVM?
Las máquinas virtuales Java tienen dos propósitos principales; el primero es garantizar que Java pueda ejecutarse en cualquier entorno. El segundo es mantener y optimizar la memoria del programa.
En el momento de la creación de Java «Escribe una vez, corre a cualquier lugar» La filosofía fue un cambio innovador que cambió el panorama del desarrollo del programa. Los programas escritos antes de esta nueva filosofía solo funcionaban en plataformas de destino específicas. En cambio, la gestión de la memoria del programa pertenecía a los programadores, lo que consume mucho tiempo.
Este cambio significa que los desarrolladores tienen una cosa menos complicada que considerar al codificar. Además, este nuevo enfoque es compatible con el principio del desarrollador «escribe una vez, ejecuta en cualquier lugar», lo que elimina la necesidad de volver a escribir el código para entornos operativos únicos.
Se suele considerar que la JVM tiene una doble definición -técnica e informal- destinada a explicar su uso según el usuario y su comportamiento.
- Definición técnica de JVM: JVM es una especificación de un programa que proporciona un entorno de tiempo de ejecución para ejecutar código Java.
- Definición informal de la JVM: la JVM ejecuta programas Java con los ajustes configurados para administrar los recursos del programa en tiempo de ejecución.
Muy a menudo, se piensa y se hace referencia a JVM como un proceso que se ejecuta en una computadora o servidor para controlar el uso de recursos de una aplicación Java. La especificación JVM describe los requisitos necesarios para construir un programa para realizar estas tareas.
Recolectando memoria y basura
La interacción más común con la JVM es observar el «montón y la pila» para el uso de la memoria y ajustar la configuración de la memoria de la JVM.
La memoria JVM se gestiona mediante la recolección de elementos no utilizados, a diferencia de los métodos utilizados por los lenguajes anteriores. En el pasado, la memoria del programa era una tarea que se dejaba a los programadores.
La recolección de basura es un proceso que observa constantemente un programa en busca de memoria no utilizada y la elimina para mejorar el rendimiento. El proceso de recolección de basura se maneja en la JVM, no en el programa. Este proceso de recolección de elementos no utilizados utiliza especificaciones del desarrollador y del operador para el uso de programas individuales.
Java no está «cerca del metal».
Los lenguajes anteriores como C, C ++ y otros se consideran «cercanos al metal», lo que significa que se ejecutan mucho más rápido. Además, estos lenguajes pueden administrar directamente la memoria del programa, mientras que el código Java no puede.
Java se lo deja a JVM, que fue un concepto que fue objeto de críticas durante sus inicios, ya que limitaba el control de los programadores sobre la gestión de la memoria.
Desde entonces, Java ha logrado avances significativos en la mejora de su recolección de basura y administración de memoria. Gracias al apoyo y desarrollo constantes, el proceso ha mejorado mucho y continúa haciéndolo al nivelar el paisaje.
Java Virtual Machine utiliza un llamado compilador Just-In-Time que compila bytecode en código de máquina para el entorno operativo. Esto es para aumentar la velocidad de ejecución del código que se ejecuta en la JVM.
Arquitectura de máquina virtual Java
La comprensión de la máquina virtual de Java se facilita al comprender su arquitectura y cómo funciona. Más adelante en esta publicación, cubriremos cómo funciona la JVM y cómo la arquitectura afecta la forma en que se ejecutan los programas Java.
1. El cargador de clases
Classloader se utiliza para cargar archivos de clase. Los archivos de clases son necesarios para que el cargador de clases realice sus tres funciones básicas, que son la vinculación, la carga y la inicialización.
2. El área del método.
El área de métodos de JVM es donde se necesitan diferentes tipos de estructuras de clase para ejecutar un programa Java.
3. caca
Todos los objetos, las variables de instancia relacionadas y las matrices se almacenan como memoria compartida en un montón donde se comparten entre varios subprocesos. Los subprocesos se crean para separar diferentes tareas de memoria y, por lo tanto, se mantienen separados fuera de la memoria compartida/compartida.
4. Pilas de lenguaje JVM
Las pilas de lenguaje Java almacenan variables locales y resultados parciales. Cada subproceso tiene su propia pila de JVM que se crea cuando se crea su subproceso. Cuando comienza la llamada al método, se crea un nuevo marco y luego se elimina cuando se completa la llamada al método.
5. Registros de PC
El registro de la PC almacena la dirección de las máquinas virtuales Java que actualmente ejecutan instrucciones. En Java, cada subproceso obtiene su propio registro de PC.
6. Pilas de métodos nativos
Las pilas de métodos nativos contienen instrucciones para el código nativo escrito en un lenguaje diferente, en lugar de Java, utilizando la biblioteca nativa.
7. Motor ejecutivo
Execution Engine es un tipo de software utilizado para probar hardware, software o sistemas completos; lo hace sin retener ninguna información sobre el producto probado.
8. Interfaz de métodos nativos
Native Method Interface es un marco de programación que permite que el código Java se ejecute en una JVM para invocar bibliotecas y aplicaciones nativas.
9. Bibliotecas de métodos nativos
Las bibliotecas nativas son una colección de bibliotecas nativas, como los lenguajes C requeridos por el motor de tiempo de ejecución.
Errores de la máquina virtual de Java
El error de la máquina virtual de Java, también conocido como error de JVM, se clasifica como un error generado por la máquina virtual de Java. Si encuentra este tipo de error, generalmente significa que la computadora no puede leer o comprender el código.
Error de inicio de la máquina virtual Java
El iniciador de la máquina Java falla porque los componentes necesarios no están disponibles al iniciar la JVM. Por ejemplo, si no hay clases requeridas al inicio, la JVM generará un error de inicio para alertar al usuario u operador del problema. Esto sucede antes de que se complete el inicio y generalmente es el resultado de la incapacidad de completar el inicio.
Este es un ejemplo de cómo se ve un error del iniciador de JVM.

Comida para llevar en una máquina virtual de Java
Para resumir, pasemos a los puntos más importantes a destacar de este post. Hemos discutido mucho sobre JVM, pero hay algunos puntos clave que deben destacarse sobre el resto, ya que son fundamentales para comprender estos conceptos.
- La forma completa de la JVM es la Máquina Virtual de Java. JVM es un motor que convierte código de bytes de Java en lenguaje de máquina.
- La arquitectura Java JVM incluye cargador de clases, área de métodos, montón, pilas de lenguaje JVM, registros de PC, pilas de métodos nativos, motor de tiempo de ejecución, interfaz de métodos nativos, bibliotecas de métodos nativos.
- En JVM, el código Java se compila en un código de bytes que se puede interpretar en diferentes máquinas.
- JIT significa Just-in-time Compiler y es parte de Java Virtual Machine (JVM), se utiliza para acelerar el tiempo de ejecución.
- En comparación con otras máquinas compiladoras, JVM en Java puede tener una velocidad de ejecución más lenta.








