JVM principio de la entrevista

1. ¿Cuál es la JVM

Es una abreviatura de JVM (Java Virtual Machine máquina virtual de Java), JVM es una especificación para un dispositivo de computación, que es un equipo ficticio, se hace pasar sobre la simulación por ordenador real de varias funciones implementadas en ordenador. máquina virtual Java incluye un conjunto de instrucciones de código de bytes, un conjunto de registros, una pila, un método de recolección de basura montón y un dominio de almacenamiento. JVM enmascarar la información asociada a una plataforma de sistema operativo en particular, por lo que sólo el programa Java para generar código objeto (código de bytes) que se ejecuta en la máquina virtual de Java puede ejecutarse sin modificaciones en múltiples plataformas. JVM código de bytes, cuando se ejecuta, de hecho, con el tiempo interpreta el código de bytes en instrucciones de máquina ejecutadas en una plataforma en particular.

2, JRE / JDK / JVM ¿Cuál es la relación

JRE (JavaRuntimeEnvironment, Java Runtime Environment), que es la plataforma Java. Todos los programas Java pueden ejecutarse bajo JRE. Los usuarios comunes sólo tienen que ejecutar el programa Java tiene buena desarrollada, puede instalar el JRE.

JDK (Java Development Kit) se utiliza para los desarrolladores de programas para compilar, depurar programa Java con el kit de desarrollo. herramientas del JDK es un programa Java, JRE también necesitan para funcionar. Con el fin de mantener la independencia y la integridad del JDK, durante la instalación del JDK, JRE es parte de la instalación. Por lo tanto, hay un directorio llamado JRE en el directorio de instalación de JDK para almacenar archivos de JRE.

JVM (JavaVirtualMachine, Java Virtual Machine) es una parte de la JRE. Es un equipo de ficción, está en la simulación por ordenador real de diversas funciones de la computadora de lograr. La JVM tiene su propia arquitectura de hardware de sonido, tales como procesadores, pilas, registros, etc., también tiene una instrucción correspondiente. La característica más importante del lenguaje Java es multiplataforma operación. El uso de JVM es apoyar independiente del sistema operativo, multiplataforma.

3, cómo la clase se carga en la JVM

archivo de clase se carga en la máquina virtual Java mediante la carga de una clase!

Por defecto hay tres tipos de cargador de Java: Inicio cargador de clases, el cargador de clases de extensión, el cargador de clases de aplicaciones, cargador de clases personalizadas.

1) Bootstrap cargador de clases: $ JAVA_HOME responsable de la carga en jre / lib / rt.jar en cada clase, implementado por C ++, subclase no cargador de clases.

2) Extensión cargador de clases: responsable de cargar la plataforma Java extender algún paquete frasco funciones, incluyendo $ JAVA_HOME en jre / lib / * jar jar o -Djava.ext.dirs especifica directorio del paquete.

3) Aplicación cargador de clases: a cargo de los registros especificados en el paquete frasco de ruta de clase y la clase directorio.

4, el cargador de clases proceso de trabajo

1) Cuando AppClassLoader cargar una clase, primero no lo hace propio para tratar de cargar esta clase, pero los delegados cargador de clases a los padres ExtClassLoader cargador de clases para completar.

2) Cuando ExtClassLoader cargar una clase, primero no lo hace propio para tratar de cargar esta clase, pero los delegados cargador de clases a BootStrapClassLoader para completar.

3) Si el BootStrapClassLoader no se carga (por ejemplo, $ JAVA_HOME / jre / lib no se encuentra en esta clase), se utilizará para tratar de cargar ExtClassLoader.

4) Si ExtClassLoader también no se puede cargar, se carga utilizando AppClassLoader.

5) Si AppClassLoader también no se puede cargar, se reportará el ClassNotFoundException anormal.

5, el procedimiento de carga de clases detalla

Cargador de carga en la JVM, entonces, de hecho dividida en varios pasos:

1) la carga, buscar y cargar el tipo de datos binarios, sino también crear un objeto de la clase java.lang.Class en el montón de Java.

2) de conexión, la conexión también contiene tres elementos: la verificación, la preparación, la inicialización.

    ① verificación, formato de archivo, metadatos, código de bytes, verificación de referencias simbólicas.
           ② listo para asignar memoria para las variables estáticas de la clase, e inicializado a los valores por defecto.
           ③ resolución, la clase se convierte en referencias directas símbolo de referencia.

3) de inicialización, dado el valor inicial correcto para la variable estática clase.

6, modelo de memoria JVM

modelo de memoria JVM pintura a base jdk1.8.

1) Montón: almacenar instancia de objeto, casi todas las instancias de objeto para asignar memoria aquí.

2) pila de la máquina virtual: la pila se describe en una máquina virtual método implementado modelo de memoria de Java: todos los métodos se realizará simultáneamente para crear un marco de pila (marco de pila) para almacenar tabla de variables locales, operación pila, proceso dinámico que une la exportación y otra información.

3) las pilas de método nativo: Método de pila local es utilizar una máquina virtual a un servicio de método nativo.

4) Método Area: almacenar máquina virtual ha sido información de metadatos clase cargada (espacio elemento).

5) Programa del contador: el número de fila de código de bytes designador ejecutado por el flujo de corriente.

7, la recolección de basura GC

La GC principio básico (Garbage Collection): mezcla A de objetos en memoria ya no se utiliza en el proceso de recuperación para recuperar el GC se conoce como el colector, ya que la GC requiere algunos recursos y consume mucho tiempo, los objetos de Java en el ciclo de vida de después del análisis, de acuerdo con la nueva generación, modo de generación de edad a los objetos de cobro revertido para acortar la pausa GC causada por la aplicación tanto como sea posible

En primer lugar, el reciclaje de basura de la JVM, la basura es lo que tenemos en el programa no se requiere de. El recolector de basura delante de la pila para el reciclaje, lo primero es determinar cuáles de estos objetos sigue "vivo" con la que había sido "muerto". Determinar qué objetos están "muertos" se utiliza a menudo en dos formas:

1) El conteo de referencias -> Se hace circular este problema difícil de resolver entre la referencia de objeto.

2) algoritmo de análisis de la accesibilidad -> corriente JVM se utiliza de esta manera.

8, el algoritmo de recolección de basura

1) marca - algoritmo de barrido

"Marcos - barrido" (Marcos-Sweep) algoritmo, como su nombre indica, el algoritmo se divide en "marca" y "transparentes" dos etapas: la primera marca de todos los objetos tienen que ser recuperados, que marca la finalización de una recuperación unificada después de estar todo objetos marcados.
       2) algoritmo de replicación

Se divide en la capacidad de memoria disponible por dos de igual tamaño, utiliza sólo uno de ellos. Cuando esta pieza de la memoria se agota, la copia también sobrevivirá objeto a otro de arriba, entonces el espacio de memoria se ha utilizado una vez y luego salga limpio.

3) marca - Algoritmo de clasificación

algoritmo de replicación frecuente operación de copia de destino con mayor tasa de supervivencia, se reducirá la eficiencia. Por lo tanto, ha habido una marcada - algoritmo de ordenación, el proceso de etiquetado con la marca - algoritmo de barrido, pero no es el objeto directo en una etapa posterior para limpiar, pero a todos los objetos que sobreviven se mueven a un lado, luego limpiar directamente al final fuera de los límites de la memoria .

4) algoritmo colección generacional

El almacenamiento dinámico de Java se divide en la vieja y la nueva generación de, por lo que puede utilizar el método de colección más adecuada en función de las características de cada época.

9, el orden de creación de instancias de clases

1) el miembro estático padre y el bloque de inicialización estática, en orden de aparición en el código ejecutan secuencialmente.

2) miembro de sub-estática y el bloque de inicialización estática, en orden de aparición en el código ejecutado de forma secuencial.

3) Ejemplos del bloque de clase padre y la inicialización ejemplo, en orden de aparición en el código ejecutado de forma secuencial.

4) el constructor de la clase padre.

5) instancia sub-clase y el bloque de inicialización de instancia, en orden de aparición en el código ejecutan secuencialmente.

6) constructor de la subclase.

10, el cargador de clases por qué los padres utilizan el modelo de delegado, no hay ninguna escena es romper este patrón

Padres modelo de delegación propósito importante es resolver el problema de la seguridad del proceso de carga de clases. Cuando una clase se recibe clases solicitud de carga, la clase no sería sí ir a la carga, pero será delegada en la clase padre, una clase padre a la carga, si la clase padre no se puede cargar en este momento, de nuevo a la subclase, la subclase cargado para completar la clase.

1) Supongamos que un desarrollador He escrito un programa llamado java.lang.Objectclase, tratando de engañar a JVM. Ahora quiere utilizar una costumbre ClassLoaderpara cargar sus preparación de java.lang.Objectclases.

2) Afortunadamente, sin embargo, el modelo de delegación de los padres no dejar que tenga éxito. Debido a que la JVM dará prioridad en Bootstrap ClassLoaderla siguiente ruta para encontrar la java.lang.Objectclase, y cargarlo

Si el cargador de clases de Java modelo de delegación debe seguir los padres?

1) En el desarrollo real, que puede costumbre cargador de clases, y reemplazar el método loadClass de la clase padre, para romper este mecanismo.

2) SPI es romper confiar la padres mecanismo (SPI: proporcionar descubrimiento de servicios).

 

 

 

Publicado 23 artículos originales · ganado elogios 33 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_33612228/article/details/104030453
Recomendado
Clasificación