Java del olvido a la entrada --Day02


Sección de Análisis de la memoria

Java memoria de la máquina virtual puede ser dividido en tres áreas: la pila, montón, de la zona método.

características de la pila
  1. modelo de memoria es el método de pila de ejecución descrito. Cada método se llama se crea un marco de pila (variables locales almacenados, operandos, las exportaciones de método)
  2. JVM crea una pila para cada hilo, la información hilo se almacena para realizar el método (parámetros reales, las variables locales, etc.)
  3. Pila pertenecen privada hilo, compartida entre los hilos no se puede lograr!
  4. características de almacenamiento de la pila es el "último en salir, LIFO"
  5. La pila se asigna automáticamente por el sistema, rápido! Stack es un espacio contiguo de memoria!
El montón de características
  1. Montón se utiliza para almacenar los objetos y las matrices creadas (arrays son objetos)
  2. Sólo un montón de JVM, compartida por todos los temas
  3. Montón es una memoria no contigua asignación de espacio flexible, lento!
características del distrito métodos
  1. JVM es sólo un área método es compartida por todos los hilos!
  2. El método actual es la zona montón, sólo para constantes de clase de almacenamiento de información relacionada!
  3. Se utiliza para almacenar los contenidos del programa serán siempre sin cambios o sólo contieneinformación sobre las clasesobjeto Class [],Las variables estáticas,método estático,constante de cadenaY así sucesivamente)

Muy buenos enlaces: ejecutar el programa, se explica .


artículos de recolección de basura

gestión de la memoria
  • espacio asignado: se puede crear un objeto utilizando la nueva palabra clave
  • Liberar espacio de objetos: los objetos se pueden asignar nula. recolector de basura recuperar el espacio de memoria será responsable de todos los objetos "inalcanzables".
el concepto de reciclaje de basura

Cualquier algoritmo de recolección de basura en general, hacer dos cosas básicas:

  1. encontraron objetos inútiles
  2. La recuperación del espacio de memoria ocupado por el objeto inútil.

objeto inútil se refiere al objeto sin ninguna referencia variables. recolector de basura de Java encontró objetos inútiles a través del algoritmo relevante, y la eliminación y el acabado.

Relacionada con algoritmo de recolección de basura

1. recuento de referencia
montón cada objeto tiene un recuento de referencia. Se referencia una vez, se incrementa el recuento, el valor de la variable de referencia se vuelve nulo, el cómputo es reducido hasta que el recuento es 0, entonces se convierte en objeto inútil. La ventaja es un algoritmo simple, la desventaja es "inútil objeto de referencia circular" no reconoce, tales como:

public class Student {
    String name;
    Student friend;
     
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
         
        s1.friend = s2;
        s2.friend = s1;        
        s1 = null;
        s2 = null;
    }
}

S1 y S2 de referencia entre sí, hacen que el contador de referencia no es cero, pero en realidad ha sido inútil, pero no puede ser reconocido.

2. Referencias hasta método (raíz algoritmo de búsqueda)
después de que todos los procedimientos a ser vistos como una referencia a la relación entre un mapa, desde un comienzo nodo raíz GC, encontrar el nodo de referencia correspondiente, encontrar el nodo, siguen buscando para este nodo de referencia, y cuando después de todos los nodos de referencia buscando se ha completado, los nodos restantes no se considera para ser una referencia para el nodo, el nodo que es inútil.

3. recolección de basura generacional
generacional mecanismo de recolección de basura se basa en el hecho: el ciclo de vida de los diferentes objetos no es lo mismo. Por lo tanto, los objetos de diferente ciclo de vida pueden tener diferentes algoritmos de recuperación, con el fin de mejorar la eficiencia de recuperación. Nos dividieron en tres estados: la generación joven, vieja generación, generaciones duraderos. La memoria de almacenamiento dinámico de JVM se divide en Edén, Survivor y Titular / espacio antiguo.

(1) la generación joven
de todos los objetos recién generadas en primer lugar en el área de Edén. El objetivo de la generación joven es recoger rápido de la corto ciclo de vida de esos objetos, que corresponde amenor GCCada GC Minor va a limpiar la joven generación de la memoria, el algoritmo utiliza una alta eficienciaalgoritmo de replicaciónoperaciones frecuentes, pero será un desperdicio de espacio de memoria. Cuando el área de "nueva generación" de almacenamiento lleno de objetos, el objeto se almacena en el área de generación de edad.

(2) la vieja generación de
experiencia en la generación joven en el N (por defecto 15) después de que los segundos objetos de recolección de basura siguen vivos, que se colocará en la generación titular. Por lo tanto, se considera la vieja generación se almacenan en algunas de ciclo de vida más largo del objeto. Cada vez son objeto de generación de más edad, tenemos que empezarMayor CG y GC completaUna limpieza de la generación joven integral y el área regional de vieja generación.

(3) la generación permanente
para almacenar archivos estáticos, como las clases de Java, métodos y similares. No hubo un impacto duradero significativo en la generación de recolección de basura.

GC distinguir tres tipos:

  • Menor GC: para la generación joven para limpiar la zona.
    la zona Eden está lleno, se disparará un GC Minor. Limpiar objetos inútiles, copiar objetos vivos, a zonas "" "Survivor1 Survivor2" (dos zonas, el tamaño del espacio es lo mismo, al mismo tiempo Survivor1 y Survivor2 único con un vacío)
  • Mayor CG: se utiliza para limpiar la región de edad.
  • Completa GC: se utiliza para limpiar la generación joven, área de generación de edad. Los costos más altos, tienen un impacto en el rendimiento del sistema.
proceso de recolección de basura
  1. De nueva creación de objetos, en la gran mayoría serán almacenados en el Edén;
  2. Cuando Eden está lleno (un porcentaje) no puede crear un nuevo objeto, lo que provocó la recolección de basura (GC), limpiará objetos inútiles, y luego copiar los objetos restantes a un sobreviviente, como S1, mientras vacía Eden District;
  3. Cuando el área de Eden está llena de nuevo, el S1 del objeto no puede ser vaciado en otro almacenamiento superviviente, como S2, mientras que el área no vaciar Eden objeto, también copiado a S1, y S1 para asegurar Eden, son vaciar;
  4. Repetir varias veces objetos (por defecto 15) Survivor no se ha limpiado se copiarán a los viejos de la zona vieja;
  5. Cuando la zona vieja está llena, se dará lugar a una recolección de basura una vez completa (FullGC), antes de que la nueva generación de recolección de basura llamada (minorGC)

artículos Pérdida de memoria

GC completa

En el proceso de ajuste de la JVM, una gran parte de la obra se ajusta al GC completa. Las siguientes razones pueden conducir a la completa GC:

  1. la generación de edad (un puesto de titular) están llenos;
  2. generación Permanente (Perm) están llenos;
  3. System.gc () es una llamada explícita (GC recomienda aperturas de programas, en lugar de llamar GC), lo menos posible, se aplicará a partir completa GC, los altos costos y afectar el rendimiento del sistema;
  4. La última vez que la estrategia de asignación dinámica cambia cada dominio montón después de GC.
Operación probable que cause una pérdida de memoria
  • Crear una gran cantidad de objetos inútiles. Por ejemplo, cuando necesitamos una gran cantidad de concatenación de cadenas, se utiliza una cadena en lugar de StringBuilder.
  • El uso de un conjunto estático de clases. Al igual que pérdidas de memoria HashMap, Vector, Lista, etc., utilizando los más propensos a la misma ciclo de vida y la aplicación de estas variables estáticas, todos los objetos de objetos no puede ser liberado.
  • Varios objetos de conexión (IO objeto de flujo, la conexión de base de datos de objeto, un objeto de conexión de red) no está cerrada.
  • Uso oyente. Cuando se suelta el objeto, no elimine el oyente.

proceso de creación de objetos artículos

la creación de objetos

Constructor es una forma importante para crear objetos Java a través de la palabra clave nueva llamada al constructor, el constructor también hace devolver un objeto de la clase, pero el objeto no es el único responsable de la crea el constructor. Crear un objeto dividido en los cuatro pasos siguientes:

  1. Asignado espacio y miembro de objeto variable se inicializa a 0 o vacío
  2. Realización de valor de atributo de visualización de inicialización
  3. Constructor se ejecuta
  4. La dirección de retorno de un objeto a las variables relevantes
esta palabra clave
  • La esencia de esto es "crear una buena dirección de destino"!
  • Esto también puede ser usada para "objeto actual", es decir, el objeto a punto de inicialización en el constructor, y debe estar ubicado en un método de configuración.
  • esto no es un proceso estático.

árbol de herencia retroactiva

Atributo de orden de búsqueda / Método

Por ejemplo: Encontrar una variable h

  1. Encuentra la clase actual no tiene ninguna propiedad h
  2. Cada padre a su vez se remonta a ver si cada padre h hasta objetos
  3. Si no lo encuentra, se produce un error de compilación.
  4. Los pasos anteriores, acaba de encontrar h variable, entonces este proceso se termina.
Llamado por el fin del constructor

La primera frase es siempre constructor: super (...) para llamar al constructor de la clase padre correspondiente. Por lo tanto, el flujo es: Xianxiang remonta al objeto, luego girar hacia abajo el bloque y el método de la clase de inicialización constructor realizado hasta la subclase fecha actual.

NOTA: bloque de inicialización estática secuencia de llamada, con la misma secuencia de llamada del constructor, no se repite.


polimorfismo

notas:

  1. El polimorfismo esmétodoPolimórfica polimórfica no atributo (atributo independiente y polimorfismo).
  2. Hay varios estados han tres condiciones necesarias:Heredar,anulaciones método,Las referencias a objeto de clase de padres e hijos.
  3. Compilar mirada a la izquierda, mirar a la derecha para correr.
  4. Las referencias a objeto padre subclase, el proceso para la transición ascendente, son la conversión de tipo automático. Después de la transición a la clase padre variables de referencia sólo pueden llamarlotipo de compilaciónEl método, que no puede ser llamado tipo de tiempo de ejecución de método.
  5. Si el método único de tipos de operación necesidad de recurrir a la necesidad de que el tipo de conversión obligatoria, llamada abatido.
  6. En el proceso de transición hacia abajo, la variable de referencia debe ser transformada en subclase de tipo real (tipo de tiempo de ejecución), o al tiempo de ejecución aparecerá conversión de tipo ClassCastException anormal.
  7. Para evitar esta excepción, puede utilizaren vez deOperador de juzgar, y luego se vuelven fuertes.
Publicado 33 artículos originales · ganado elogios 9 · vistas 8690

Supongo que te gusta

Origin blog.csdn.net/Serena0814/article/details/104820046
Recomendado
Clasificación