Análisis profundo de la creación y el uso de objetos en Java


1. ¿Cómo administra JVM la memoria?

  La siguiente figura muestra el diagrama de administración de memoria de la máquina virtual Java:

Inserte la descripción de la imagen aquí

1. Contador de programas

  • Concepto: puede verse como un indicador de número de línea del código de bytes ejecutado por el hilo actual
  • Características: hilo de memoria privada

2. Pila de máquinas virtuales Java

  • Concepto: describe el modelo de memoria de la ejecución del método Java. (Cuando se ejecuta cada método, se crea un marco de pila para almacenar la tabla de variables locales, el marco de pila de operaciones, el enlace dinámico, la salida del método y otra información. El proceso de cada método desde la llamada hasta la finalización corresponde a un marco de pila desde que entra en Pila hasta proceso pop)
  • Características: el hilo es privado y el ciclo de vida es el mismo que el del hilo. Hay dos excepciones en esta área: StackOverflowError: si la profundidad de la solicitud del hilo es mayor que la profundidad permitida por la máquina virtual. OutOfMemoryError: si la máquina virtual se puede expandir dinámicamente, si el Berserker no puede solicitar suficiente memoria.

3. Pila de métodos locales

  • Concepto: Es similar al rol que juega la pila de máquinas virtuales, la diferencia es que la pila de máquinas virtuales java sirve para ejecutar métodos Java , mientras que la pila de métodos locales sirve métodos locales .
  • Características: El hilo es privado y también se lanzan dos StackOverflowError y OutOfMemoryError diferentes.

4. Área de la pila

  • Concepto: es un área compartida por todos los hilos, creada cuando se inicia la máquina virtual.
  • Funciones: intercambio de subprocesos, almacenamiento de instancias de objetos (todas las instancias de objetos y matrices), el área principal de la gestión de GC. Puede estar en un espacio de memoria físicamente discontinuo.

5. Área de métodos

  • Concepto: Almacene datos como información de clase, constantes, variables estáticas y código compilado por el compilador Just-In-Time que ha cargado la máquina virtual.
  • Características: El área compartida de subprocesos arroja una excepción OutOfMemory cuando el área de método no puede cumplir con los requisitos de asignación de memoria.

  Para los principiantes, los tres espacios de memoria principales de la máquina virtual Java que debemos conocer son "pila de máquina virtual" (denominada pila), "área de método" y "área de pila".

  • Área de método :Información de la clase de almacenamiento
  • Pila :Almacene el marco de pila y las variables locales cuando se ejecuta el método
  • Montón :Almacene principalmente nuevos objetos y variables de instancia dentro de los objetos.

El área de método tiene datos primero, porque la clase se carga antes de que se ejecute el programa. La actividad de la memoria de la pila es la más engorrosa, porque el método se ejecuta y finaliza continuamente, y la pila se empuja y se abre.
Inserte la descripción de la imagen aquí

2. Describa brevemente los cambios de memoria de la máquina virtual JVM cuando se crea el objeto.

Código:

public class StudentTest {
    
    
    public static void main(String[] args) {
    
    
        int i=10;
        Student s1=new Student();
    }
}

Código estudiantil:

class Student{
    
    
    int no;
    String name;
    int age;
    boolean sex;
}

Los cambios de memoria durante la ejecución del código anterior son los siguientes:

  1. El primer paso es cargar la clase.
    Inserte la descripción de la imagen aquí
  2. El segundo paso es llamar al método principal para asignar un marco de pila (empujar la pila) al método principal
    Inserte la descripción de la imagen aquí
  3. El tercer paso es ejecutar int i = 10
    Inserte la descripción de la imagen aquí
  4. El cuarto paso es ejecutar new student () para crear objetos en el montón e inicializar las variables de instancia.
    Inserte la descripción de la imagen aquí
  5. El quinto paso es asignar la dirección de memoria del objeto del estudiante en el área del montón a la variable local s1.
    Inserte la descripción de la imagen aquíNota : La
      variable i y la variable s1 en la figura son variables locales, ambas en la memoria de pila, pero i es la variable básica tipo de datos int y s1 es el tipo de datos de referencia Student.
      Para el objeto s1 creado en el montón, los atributos internos no, nombre, edad y sexo del objeto son todas variables de instancia. Estas variables se inicializan cuando el objeto es nuevo. Si no se asignan manualmente, el sistema las asignará por defecto.
    La comprensión de "referencia" :
      después de que se completa la creación del "objeto" en el área del montón en la figura anterior, la dirección de memoria del objeto en el área del montón es: 0x1111. El = en el programa significa que la dirección de la memoria de pila de 0x1111 se asigna a la variable s1, en otras palabras, la variable s1 contiene la dirección de memoria del objeto de memoria de pila.s1 no es un objeto, sino una referencia a un objeto, El objeto está realmente en el área del montón, s1 contiene la dirección de memoria de este objeto.
      No existe el concepto de punteros en Java, por lo que los programadores de Java no tienen derecho a manipular directamente la memoria del montón y solo pueden acceder a los objetos en la memoria del montón a través de "referencias".

para resumir

  A través de la explicación anterior, debemos saber que las variables locales se almacenan en el área de la pila y las variables de instancia se almacenan en el área del montón . La inicialización de las variables de instancia es para inicializar y asignar valores mientras se crean objetos. Java accede a las variables de instancia del objeto mediante el nombre y el atributo del objeto .

Supongo que te gusta

Origin blog.csdn.net/m0_46988935/article/details/110144235
Recomendado
Clasificación