Optimización del rendimiento | Aprenda rápidamente el mecanismo de asignación de memoria JVM

Estructura general de JVM

  • El área compartida por los subprocesos del montón es también el área a ser recolectada por el recolector de basura, este lugar almacena principalmente objetos creados por los usuarios. Por ejemplo, new User (), este objeto se almacena en el montón.
  • La pila se utiliza para almacenar variables locales, valores de retorno de métodos y enlaces dinámicos generados por la operación del método.
  • Este par de pilas de métodos se utiliza para guardar la estructura de pila de la ejecución del método nativo (nativo)
  • El área de método ha sido renombrada como metaespacio en jdk1.8, y los siguientes contenidos se almacenan principalmente en ella:
    • Clasificar información
      • El nombre completo del tipo
      • El nombre completo de la superclase
      • Nombre completo de la superinterfaz directa
      • Indicador de tipo (si la clase es un tipo de clase o un tipo de interfaz)
      • Descriptor de acceso de clase (público, privado, predeterminado, abstracto, final, estático)
    • Piscina constante
    • Información de campo
      • Modificadores de campo (público, protegido, privado, predeterminado)
      • Tipo de campo
      • Nombre del campo
    • Información del método
    • Variable de clase
    • Varias referencias
      • Referencia a instancia de clase
      • Referencia del cargador
    • Tabla de métodos La tabla de métodos es una matriz creada con la latitud de una clase no abstracta Los elementos de la matriz son referencias directas a cada método de la clase para mejorar la eficiencia del acceso.
  • Contador de programa El contador de programa se utiliza para guardar el número de línea donde el hilo ejecuta la instrucción antes de cambiar. Esto es principalmente para resolver el problema de cambio de hilo en el caso de multihilo. Si solo hay un hilo, el contador de programa es innecesario.

¿Cómo se divide el área del montón?

Los estudiantes que han conectado jvm deben saber que el montón está dividido en edades antiguas y nuevas, que es principalmente una estructura diseñada para la recolección de basura. Inserte la descripción de la imagen aquí

Parámetros de JVM relacionados con las edades nueva y antigua

  • -XX: NewRatio establece la proporción de las generaciones nuevas y antiguas, como -XX: NewRatio = 5 significa que la proporción de las generaciones nueva y antigua es 1: 5, la nueva generación ocupa 1/6 de la memoria del montón y la la generación antigua ocupa 5/6; el jvm predetermina las generaciones nueva y antigua 1: 2; Debe tenerse en cuenta que si el programa comienza a especificar el valor -XX: MaxNewSize, entonces la relación de configuración del parámetro no será válida y el valor de la generación anterior es el tamaño de la memoria del montón menos MaxNewSize;
  • -XX: SurvivorRatio Establece la proporción de eden y dos áreas de Survivo en la nueva generación. Por ejemplo, -XX: SurvivorRatio = 8, luego eden: s1: s2 = 8: 1: 1, y la proporción predeterminada es 8: 1: 1.

El GC joven ocurre en la generación joven y el GC COMPLETO ocurre en todo el espacio del montón. Generalmente, si el espacio en la generación anterior no es suficiente, se lanzará el GC COMPLETO.

Análisis de escape

El análisis de escape se utiliza principalmente para analizar qué objetos dentro del método se pueden asignar en la pila, porque los objetos generales se asignan en el montón y los objetos asignados en el montón deben esperar a que el recolector de basura los recopile, y siempre lo harán. ocupan el espacio del montón, pero si está dentro de un método, se puede asignar un objeto en la pila si cumple las siguientes condiciones:

  • Es una variable local
  • Sin asignación a la variable miembro
  • No saltó como valor de retorno

Antes de jdk1.7, debe utilizar el parámetro -XX: + DoEscapeAnalysis para activar, jdk1.7 activa el análisis de escape de forma predeterminada y, si necesita desactivarlo, utilice el parámetro -XX: + DoEscapeAnalysis para activar apagado

¿Qué es la tecnología de compilación justo a tiempo?

¿Cuáles son los modos de funcionamiento de la JVM?

  • El modo de interpretación ejecuta una línea de código de bytes y la compila en una línea de código de máquina para su ejecución
    • Características: Al usar el modo interpretado, la velocidad de inicio de la JVM es rápida, pero la ejecución de los comandos es lenta y debe compilarse línea por línea.
  • El modo de compilación primero compila todos los códigos de bytes en código de máquina y luego carga todos los códigos de máquina para su ejecución a la vez
    • Características: Usando el modo de compilación, la velocidad de inicio de la JVM será un poco más lenta, porque necesita ser compilada, pero casi no hay consumo al ejecutar
  • El modo mixto utiliza el modo interpretado para ejecutar el código, pero si encuentra algunos puntos calientes o fragmentos de código compartido, se ejecutará en el modo compilado y el contenido compilado se almacenará en caché para reducir la compilación repetida, mejorando así la eficiencia de ejecución del código. Este es también el predeterminado utilizado por la JVM El modo de compilación, esto es JIT (tecnología de compilación Just-in-time)

Supongo que te gusta

Origin blog.csdn.net/weixin_34311210/article/details/109407023
Recomendado
Clasificación