Comprensión profunda del área de datos de tiempo de ejecución de lectura de máquina virtual

Área de datos de tiempo de ejecución

  • Contador de programa (registro de PC)
    • El hilo es privado y el espacio es pequeño, que es el indicador del número de línea del código de bytes ejecutado por el hilo actual
    • Cuando el intérprete de bytecode está funcionando, la siguiente instrucción de bytecode se obtiene cambiando el valor del contador.
    • Dependencia de operaciones como bifurcación, bucles, saltos, manejo de excepciones y recuperación de subprocesos.
    • Método Java: la dirección de la instrucción actual de bytecode;
    • El método nativo está vacío.
    • La única área de memoria sin OutOfMemoryError
  • Pila de máquina virtual Java
    • El hilo es privado y describe el modelo de memoria cuando se ejecuta el método Java
    • Cuando se ejecuta el método, el marco de la pila se crea y se inserta en la pila.
    • Marco de pila: se usa para almacenar tabla de variables locales, pila de operandos, enlace dinámico, entrada y salida de métodos, etc.
      • Tabla de variables locales
        • Almacene los datos conocidos en tiempo de compilación, el espacio de memoria está completamente determinado en tiempo de compilación y no cambiará durante la operación
        • Varios tipos de datos básicos, 64 bits de largo y doble pila de dos espacios variables locales (ranura), el restante
        • Referencia de objeto (tipo de referencia, un puntero directamente a la dirección del objeto o un identificador al objeto)
        • Tipo returnAddress (apunta a la dirección de una instrucción de bytecode)
    • Situación anormal
      • La profundidad de la pila solicitada por el subproceso es mayor que la profundidad de ejecución de la máquina virtual y se genera StackOverflowError
      • Si la pila de la máquina virtual se ejecuta dinámicamente, cuando la expansión no puede solicitar suficiente memoria, se genera un OutOfMemoryError
  • Pila de métodos nativos
    • Similar a la pila de máquina virtual, pero sirve el método nativo
    • La excepción es la misma que la pila de máquinas virtuales.
    • La especificación de la máquina virtual no exige el lenguaje, el método y la estructura de datos utilizados en esta área, y puede implementarse libremente
  • Montón de Java
    • El espacio más grande, el uso compartido de subprocesos, creado cuando se inicia la máquina virtual, utilizado para almacenar instancias de objetos
    • El espacio de memoria es físicamente discontinuo
    • Especificación de máquina virtual Java: todas las instancias y matrices de objetos deben asignarse en el montón
    • Cuando no pueda expandirse dinámicamente, arroje OutOfMemoryError
    • Partición de memoria
      • joven: viejo predeterminado a 1: 2
      • Generación joven
        • Edén: Superviviente = 8: 1
        • Hay un área del Edén y dos sobrevivientes.
        • Edén
          • El objeto recién creado se almacena, cuando la parte se agota, se realiza gc joven (gc menor).
        • Superviviente
          • Cada vez que los jóvenes gc, los objetos que sobrevivieron al Edén y los objetos de otro Superviviente se clasifican en el servidor actual para garantizar la continuidad del espacio de almacenamiento del almacenamiento en sí y la inactividad de otro espacio.
      • Vejez
        • Por defecto, los objetos en Survivor que han pasado por Minor gc 15 veces se almacenan
        • O cuando Minor gc, Survivor tiene memoria insuficiente, confiando en la generación anterior para garantizar la asignación y transferir directamente el objeto a esta área
        • O cuando el objeto es más grande que cierto tamaño, se asigna directamente en la generación anterior
  • Área de método
    • Uso compartido de subprocesos, utilizado para almacenar constantes cargadas, variables estáticas, código compilado por un compilador justo a tiempo, etc.
    • Seguridad de subprocesos, cuando se carga la clase, solo un subproceso puede cargar cierta información de clase en el área de método
    • Generación permanente (eliminada después de 1.8): Hotspot extiende la colección de generación gc al área de método para facilitar la administración de memoria como un montón
    • Cuando no se puede cumplir el requisito de asignación de memoria, se lanza un OutOfMemoryError
    • Grupo constante de tiempo de ejecución
      • Los archivos de clase almacenan literales y referencias de símbolos generados durante la compilación, y se almacenan en esta área después de cargar la clase.
      • También almacene las referencias directas traducidas
      • Dinámico: permite ejecutar nuevas zonas variables durante la operación
      • Cuando no se puede cumplir el requisito de asignación de memoria, se lanza un OutOfMemoryError
  • Memoria directa
    • Memoria fuera del montón, no definida por la especificación de la máquina virtual, no restringida por la máquina virtual en sí
    • Sin gestión de recolección de basura
    • 1.4 La clase NIO introducida, basada en el método IO de canal y buffer Buffer, usa la función Native para asignar directamente memoria fuera del montón
    • Opere el objeto DirectByteBuffer en Java como referencia a esta memoria.
    • Especifique el tamaño por parámetros, el valor predeterminado es el mismo que el valor máximo del montón
    • Si se produce un desbordamiento de memoria al asignar memoria, no es para solicitar la asignación de memoria, sino para calcular la falta de memoria y lanzar manualmente una excepción
  • Metaspace
    • Almacenar información de clase cargada
    • El área de metadatos reemplaza a la generación permanente. La esencia es similar a la de la generación permanente. Todos implementan el área de método en la especificación JVM. La diferencia es que el área de metadatos no está en la máquina virtual, sino que usa memoria local. El área de metadatos se usa con frecuencia y también puede ocurrir una excepción OutOfMemory.
    • La expansión dinámica del área de metadatos, el valor predeterminado –XX: MetaspaceSize es una marca de límite superior de 21 MB. Una vez que se toca, se activará el GC completo y las clases no utilizadas se descargarán (el cargador de clases correspondiente a la clase ya no está activo), y luego se restablecerá la marca de límite superior. El valor de la nueva marca de límite alto depende del meta espacio lanzado después de GC. Si se libera poco espacio, se eleva esta marca de agua alta. Si hay demasiado espacio libre, la marca de agua alta cae.
Publicado 24 artículos originales · elogiado 0 · visitas 107

Supongo que te gusta

Origin blog.csdn.net/jiangxiayouyu/article/details/105606948
Recomendado
Clasificación