¿Está familiarizado con las preguntas de la entrevista de JVM?

Principalmente sobre Hotspot JVM

1. ¿Qué es JVM?

La JVM es una computadora hipotética para el código Java , que incluye un conjunto de instrucciones de código de bytes, un conjunto de registros, una pila, un montón, un recolector de basura y un campo de método de almacenamiento.

1. El archivo fuente de Java se compila en un archivo de código de bytes .class a través del compilador de lenguaje Javac.

2. El intérprete de la JVM se compila en código de máquina en una máquina específica.

Los intérpretes de Java son diferentes en cada máquina, por lo que Java puede ser multiplataforma

Lenguajes compilados e interpretados

Vea un ejemplo interesante, como si quisiera comer

1. El lenguaje compilado es preparar la comida directamente y comerla directamente. Y está ahí cuando quieras comer.

2. El lenguaje interpretativo es hacer que los platos sean deliciosos. Si quieres comer, debes esperar a que cocine poco a poco y comer poco a poco.

Entonces hay lenguajes compilados y lenguajes interpretados

Cuando un programa Java comienza a ejecutarse, se crea una instancia de la máquina virtual JVM y aparecerán varias máquinas virtuales en varios programas. Los datos no se comparten entre varias instancias de máquinas virtuales.

2. El modelo de memoria de la JVM

Área privada de subprocesos: viva y muera con subprocesos, y cada subproceso se asigna directamente al subproceso nativo del sistema operativo.

Área compartida de subprocesos: iniciar/destruir con máquina virtual

Memoria directa: no está gestionada por la JVM, pero Java seguirá llamándola. Por ejemplo, muchos métodos de E/S llaman a esta área a través de funciones.

2.1 Contador de programa

        Un pequeño espacio de memoria es el indicador de número de línea del código de bytes ejecutado por el subproceso actual , y cada subproceso tiene su propio contador de programa.

2.2 Pila de máquinas virtuales

         Es el área donde Java ejecuta métodos. Cada método creará un marco de pila antes de la ejecución, que almacenará las variables, la pila de operandos, el enlace dinámico, la salida del método y otra información de este método. El método desde que se llama hasta que finaliza la ejecución corresponde al proceso de un marco de pila en la pila de la máquina virtual desde que se empuja hasta que se extrae.

        Se crea un marco de pila cuando se llama al método y se destruye cuando el método finaliza para almacenar datos y resultados parciales del proceso. También se usa para manejar enlaces dinámicos, valores de retorno de métodos y despacho de excepciones.

2.3 Área de métodos locales

        El área del método local es similar a la pila de Java, la diferencia es que la pila de la máquina virtual sirve al subproceso de Java y la pila del método local sirve al método nativo. HotSpot VM combina la pila de métodos nativos y la pila de máquinas virtuales en una sola .

2.4 montón

        El montón es el área de datos de tiempo de ejecución de Java, que es un área compartida por subprocesos. Los objetos y matrices creados se almacenan en la memoria del montón de Java, que también es el área de memoria más importante para la recolección de elementos no utilizados. Debido al algoritmo de recopilación generacional , el montón se divide en generación joven y generación anterior.

2.5 Área de método/Generación permanente/Metaespacio 

        Eso es lo que solemos llamar la generación permanente, que se utiliza para almacenar información de clase cargada por la JVM, constantes, variables estáticas, código compilado por el compilador, Meta y otros datos. HotSpot extiende la colección generacional de GC al área de métodos, es decir, la generación permanente del montón de Java se utiliza para implementar el área de métodos, de modo que esta memoria también se puede administrar a través de GC. Reciclar principalmente piscina constante y tipo de descarga.

En Java8, la generación permanente se eliminó y se reemplazó por un área denominada "área de metadatos" (metaespacio). metaespacio

La esencia del metaespacio es similar a la de la generación permanente.La mayor diferencia entre el metaespacio y la generación permanente es que el metaespacio no está en la máquina virtual, sino que utiliza la memoria local . Por lo tanto, de forma predeterminada, el tamaño del metaespacio está limitado únicamente por la memoria local. Los metadatos de clase se colocan en la memoria nativa, el grupo de cadenas y las variables estáticas de clase se colocan en el montón de Java, por lo que la cantidad de metadatos de clase que se pueden cargar ya no está controlada por MaxPermSize, sino por el espacio disponible real del sistema.

        El conjunto de constantes de tiempo de ejecución también forma parte del área de métodos, que almacena varios literales y referencias de símbolos generados durante la compilación en la clase.

3. Resumen

  • La JVM es una computadora imaginaria que se usa principalmente para ejecutar archivos de código de bytes de Java
  • JVM contiene cargador de clases, motor de ejecución, área de datos de tiempo de ejecución, interfaz de método local, etc.
  • La memoria JVM se divide principalmente en subprocesos privados, subprocesos compartidos y memoria directa. Privado se divide en contador de programa, pila de máquina virtual y pila de método local; compartido se divide en área de método y montón.

Supongo que te gusta

Origin blog.csdn.net/qq_37761711/article/details/130331675
Recomendado
Clasificación