preguntas cara JVM detallada

  1. Descripción de la gestión de memoria de Java, así como el principio de herramientas de recolección de basura y de ajuste utilizan Java
    responsabilidades de gestión de memoria para la asignación de memoria, la memoria de recuperación. Sin automática de gestión de memoria lenguaje / plataforma propenso a
    errores.
    Los problemas típicos incluyen cuestiones colgando puntero, unas referencias de puntero una dirección de memoria que haya sido recuperado, lo que lleva a
    ejecutar el programa es completamente desconocido.
    Otro problema típico es pérdidas de memoria, la memoria ha sido asignado, pero no tiene ningún punto de ese puntero de memoria,
    lo que resulta en una pérdida de memoria. Los programadores pasan mucho tiempo en la depuración de este tipo de problemas.
  2. Descripción JVM principio mecanismo para cargar archivos de clase
    cargados en la clase JVM está determinada por el cargador de clases (cargador de clases) y sus subclases para lograr, de Java en la clase de
    cargador es un importante componente del sistema de tiempo de ejecución Java, que es responsable de ejecutar al buscar y cargar archivos de clase de la clase.
    Como la naturaleza multi-plataforma de Java, compilado el código fuente de Java no es un programa ejecutable, pero unos
    archivos o más clases. Cuando el programa necesita utilizar una clase Java, JVM se asegurará de que la clase ha sido cargada, la conexión
    (verificación, preparación y analítica) y la inicialización. Cargando refiere a la clase de los datos leídos en el tipo de archivo .class en la memoria,
    por lo general la creación de una matriz de bytes leídos en archivos .class y, a continuación, genera la clase de objeto correspondiente Clase cargado. Carga
    Al finalizar, objeto Class no es completa, por lo que en este caso la clase no está disponible todavía. Cuando después de la clase se carga en la fase de conexión,
    comprendiendo esta fase, la verificación, la preparación (memoria asignada como una variable estática y establecer un valor inicial predeterminado) y el análisis (símbolo
    de referencia se sustituye referencia directa) tres pasos. Por último, la clase JVM se inicia, que comprende: 1) Si hay una clase directa
    de la clase padre y la clase no se ha inicializado, entonces inicializar la clase padre; 2) si existe el estado de inicialización de clase,
    se lleva a cabo de forma secuencial el estado de inicialización.
    Clase es cargado por el cargador de clases se ha completado, el cargador de clases comprende: a raíz cargador (Bootstrap), además de la extendida
    Loader (la extensión), el sistema de carga (Sistema) y cargador de clases definidas por el usuario (el java.lang.ClassLoader
    subclase). A partir de Java 2 (JDK 1.2), el proceso de carga de clases adoptó padre encargado mecanismo (PDM). PDM
    Mejor garantizar la seguridad de la plataforma Java, en este mecanismo, JVM viene con el cargador de arranque es la raíz,
    el otro cargador tiene uno y sólo uno de los padres cargador de clases. Cargando primera clase los padres cargas cargador de clases de la solicitud, la clase padre, más
    impotentes cargador si sus propias cargas cargador subclase. Bootstrap JVM no prevé la programación Java
    referencia. La siguiente es una descripción de varias clases de cargador:
    en Bootstrap: en general, implementó el uso de código nativo, es responsable de bibliotecas del núcleo básico de carga JVM (rt.jar);
    la extensión: java.ext.dirs carga desde el atributo de directorio de la biblioteca del sistema especificado su matriz se carga
    en Bootstrap,
    el Sistema: cargador de clases aplicación llamada, su padre es de extensión. Es el cargador de clases más ampliamente utilizado.
    Se ruta de clase variable desde el medio ambiente o el directorio de sistema de atributo java.class.path descrito clase especificada de usuario
    predeterminado personalizado cargador cargador de los padres.
  3. JVM hablar de principios? La diferencia entre las pérdidas de memoria y desbordamiento? Cuando pérdida de memoria?
    Respuesta:
    el principio de JVM:
    la JVM es un acrónimo de Java Virtual Machine (Java Virtual Machine), que es todo el java lograr multiplataforma
    parte fundamental de todos los programas Java en primer lugar se compila en archivos de clase .class de estos archivos de clases puede ser en el virtual
    ejecución de la máquina, que la clase no se corresponde directamente con el sistema operativo de la máquina, sino indirectamente a través de una máquina virtual y
    la interacción del sistema operativo, por la máquina virtual llevará a cabo el procedimiento explicado en el sistema local. JVM es la base de la plataforma Java, y los bienes
    con motivo de la máquina, sino que también tiene su propio conjunto de instrucciones, y que operan en diferentes regiones de la memoria en tiempo de ejecución. Tirando JVM
    como la arquitectura del sistema operativo y la CPU se proporciona un método de ejecución de código de un independiente de la plataforma, es decir, con una puesta en práctica particular,
    independiente del hardware huésped, el sistema operativo anfitrión. JVM trabajo principal es explicar su propio conjunto de instrucciones (es decir, código de bytes) a la CPU
    conjunto de instrucciones o llamadas al sistema que corresponden a los usuarios a proteger de ser acoso malicioso. JVM en la parte superior de los archivos fuente de Java
    no se refiere, se refiere sólo archivos de origen generados por los archivos de clase (archivos .class).
    La diferencia entre las pérdidas de memoria y overflow: 1) un medio de pérdida de memoria asignados de la memoria no se puede recuperar. 2) los requisitos de desbordamiento de la memoria medios de memoria de programa más allá del alcance del sistema pueden ser asignados a desbordamiento. Tales como el uso
    de almacenamiento 10000 Este tipo byte variable de datos pertenece al desbordamiento de la memoria.
  1. desbordamiento de la memoria es proporcionar suficiente memoria; la pérdida de memoria es incapaz de proporcionar recursos de memoria.
    Cuando pérdida de memoria:
  2. colecciones estáticas: la necesidad de prestar especial atención cuando se utiliza el Conjunto, vector, HashMap y otra clase de colección, puede haber
    puede producirse una pérdida de memoria. Cuando estos conjuntos se definen como estática, debido a su ciclo de vida con la solicitud
    , siempre que, esta vez, no se puede producir una pérdida de memoria.
  3. Oyente: En Java, se utilizan a menudo para el oyente, como agregar un control-clic en el oyente
    addOnClickListener (), pero a menudo se libera cuando el objeto se olvide de eliminar los oyentes, que pueden causar interno
    pérdida de memoria. Buen camino, cuando se suelta el objeto, se debe recordar la liberación a todos los oyentes, que puede evitar la
    pérdida de memoria causada porque el oyente.
  4. Varias conexiones: conexiones incluyen conexión a la base de datos de Java, conexión de red y io conectado, si no hay ninguna llamada explícita a
    su método close () no se cierra automáticamente, estas conexiones no se pueden recuperar y GC provoca una pérdida de memoria. En general
    el caso, crear la conexión en el bloque try, se libera la conexión en una cláusula por último, es posible evitar dicha fuga de una memoria.
  5. módulo de referencia externa: llamar a un módulo externo cuando se debe tener cuidado para evitar pérdidas de memoria. El módulo A llama a
    un método externo del módulo B, tales como: registro public void (Object o) . Este método tiene el potencial de hacer
    un módulo contiene las referencias a objetos entrantes, esta vez necesidad de ver si el módulo B proporciona un método para la eliminación de las referencias, tales como el
    anular el registro (). Esta situación es fácil pasar por alto, y se produce una pérdida de memoria, es más difícil de detectar, debe ser por escrito
    debe prestar atención a estas cuestiones durante el código.
  6. Singleton: patrón Singleton para usar cuando no es probable que causen una pérdida de memoria. Después de la inicialización porque objeto único en
    la JVM en la memoria a lo largo del ciclo de vida, si se mantiene una objetos externos (ciclo de vida relativamente corto) referencias, que
    no se puede recuperar estos objetos externos, lo que resulta en una pérdida de memoria. Si el objeto externo también está llevando a cabo otros objetos de
    referencia, entonces las pérdidas de memoria serán más graves, que requieren una atención especial a estos casos. Esta situación debe ser considerada bajo el solo
    diseño del modelo -case no será un problema, ¿cómo debe asegurar que no pérdidas de memoria.
  1. GC hilo es un hilo de utilidad?
    hilo GC es un hilo daemon. hilo Daemon y el hilo se divide en hilos no daemon (es decir, hilo de usuario). Mientras el verdadero JVM actual
    caso no ha terminado en cualquiera de sobrevivir a un demonio sin rosca, un hilo de utilidad en el trabajo de todos, y sólo cuando el último no defensiva
    cuando la protección del extremo del hilo, con el protector del hilo JVM con el final de la obra.
  2. cargador de clases de Java lo son, cada cargador de clases tiene que cargar esas clases, lo que es el padre
    modelo de delegación, está haciendo qué?
    A:
    cargador de clases en una jerarquía, de arriba a abajo, se divide en los siguientes tres tipos:
    (1) inicio de la clase cargador (Bootstrap ClassLoader)
    el cargador de clases responsable almacenada en JAVA_HOME / lib, o parámetros son -Xbootclasspath
    ruta especificada, y una biblioteca de identificación de la máquina virtual se carga en la memoria de la máquina virtual. Inicio cargador de clases no puede
    ser referenciado directamente los programas Java.
    (2) el cargador de clases extendido (Extensión cargador de clases)
    El cargador es responsable de las variables lib / directorio JAVA_HOME / ext o del sistema de carga son java.ext.dirs
    todas las bibliotecas, ruta especificada desarrollador puede ser utilizado directamente extendida cargador de clases
    (3) cargador de clases de aplicación (ClassLoader la aplicación)
    esta carga es el valor de retorno del método ClassLoader getSystemClassLoader (), en general se
    llama el cargador de clases del sistema. Es responsable de cargar la ruta de clase de usuario (de rutas de clases) bibliotecas designadas, puede estar directamente
    conectada a través del cargador, si la aplicación no propio cargador de clase personalizada, en general, este es el
    programa de la clase por defecto del cargador
    padres delegado modelo:
    modelo de los padres delegación requiere, además de la clase cargador de arranque de alto nivel, el otro cargador de clases debe tener su propia clase padre
    cargador. Aquí una relación padre-hijo entre el cargador de clases a la herencia en general, no se implementó, pero el uso de una combinación de
    Relación con la reutilización del código del cargador matriz
    proceso de trabajo:
    Si se carga un cargador de clases de la clase recibió una solicitud, no lo hace primero propia para tratar de cargar esta clase, pero la
    solicitud se delega al cargador de clase padre para completar cada un nivel de cargador de clases es cierto, por lo que todo además
    petición de carga se debe pasar finalmente a la parte superior del cargador de clases de arranque, sólo cuando el padre retroalimentación cargador de clases que no puede terminar
    con esta solicitud (que no se encuentra en el rango de búsqueda cuando la categoría deseada), sub-loader intentará cargar el suyo propio.
    Beneficios:
    el cargador de clases Java como su clase en conjunto tienen una relación con un nivel de prioridad. Por ejemplo, la clase de objetos,
    lo puso rt.jar, independientemente del cargador de clases para cargar esta clase son en última instancia asignado al cargador de clases de arranque
    de carga, por lo que las clases de objetos están en varios programas entorno cargador de clases misma clase, dos clases determina
    si es o no la misma es por medio classloader.class esto, de modo que incluso en el mismo archivo de clase como
    si se cargan dos cargador de clases, que son diferentes clases.
    proceso de carga como se muestra:
  3. ¿Cuál es el recolector de basura lógica (GC) es? El recolector de basura puede recuperar inmediatamente la memoria?
    Observe cómo la recolección de basura máquina virtual?
    A:
    1, por GC, cuando un programador crear un objeto, GC comenzó a monitorear dirección, así como el tamaño del objeto de
    uso. Típicamente, GC utilizando los registros tienen todos los objetos y la gestión de la pila (heap) para la realización de la figura. Por lo que
    para determinar las formas en que los objetos son "accesibles", que los objetos son "inalcanzables". Cuando el GC identificar objetivos como "no
    cuando arriba", GC tiene la responsabilidad de recuperar el espacio de memoria.
    2, Can. Los programadores pueden realizar manualmente System.gc (), notificar a la carrera de GC, pero la especificación de lenguaje Java
    no garantiza la GC va a realizar.
  4. System.gc (); o Runtime.getRuntime () gc () .;
  5. pérdida de memoria de Java va a hacer, por favor describa.
    R: Debido a que hay teóricamente Java la recolección de basura (GC) no habrá pérdidas de memoria (que es también de Java es ampliamente
    pan usado para una causa importante de la programación del lado del servidor); sin embargo, en el desarrollo real, puede haber inútil, sino hasta
    los objetos que no se pueden recuperar GC pérdida de memoria puede ocurrir. Un ejemplo es la sesión de Hibernate
    objeto (caché) pertenece a un estado coherente, el recolector de basura no se recuperará estos objetos, sin embargo, estos objetos
    pueden estar presentes objeto basura inútil. El siguiente ejemplo también muestra lo que sucede en las pérdidas de memoria Java:
    Pena de paquete para com.bjsxt;
    Importación java.util.Arrays;
    Importación java.util.EmptyStackException;

MyStack clase pública {
Privado T [] Elementos;
Privada int size = 0;
estática privada int final INIT_CAPACITY = 16;
MyStack pública () {
Elementos = (T []) new new Object [INIT_CAPACITY];
}
empuje public void (T elem) {
el ensureCapacity ( );
Elementos [tamaño ++] = elem;
}
pública T POP () {
SI (tamaño == 0)
de banda nueva nueva EmptyStackException con ();
elementos de retorno [- size];
}
privada desierta la ensureCapacity () {
SI (= elements.length size =) {
Elementos = Arrays.copyOf (Elementos ,. tamaño 1 + 2 *);
}
}
}
los implementos de código por encima de una pila (último en salir (FILO) estructura), a primera vista parece que no hay Q significativa
Cuestión, que incluso puede ser a través de una variedad de pruebas de unidad que escribe. Sin embargo, uno de los métodos pop, pero hay una pérdida de memoria pedir a la
pregunta, cuando la pila de objetos que utilizan pop método pop, el objeto no se recolector de basura, incluso con una pila de
programas ya no se refieren a estos objetos, porque el mantenimiento pila interna la expiración de estos objetos referencias (obsoleto
referencia). En la recolección de basura soporte de idiomas, la pérdida de memoria es muy sutil, esta pérdida de memoria es en realidad
restos de objetos inconscientes. Si una referencia de objeto se mantiene hasta inconsciente, a continuación, el recolector de basura no al
objeto físico, no va a tratar con otros objetos en la referencia del objeto, incluso si sólo unos pocos de tales objetos, sino que también
puede causar una gran cantidad de objetos ellos no permiten la recolección de basura, lo que resulta en un impacto significativo en el rendimiento, en casos extremos se
llevará a paginación de disco (memoria física y los datos en el disco duro de intercambio de memoria virtual), e incluso causar
OutOfMemoryError.
579. GC ¿Qué es eso? ¿Por qué no debería ser GC?
A: GC es un medio de recogida de basura, manejo de memoria es donde los programadores propensas a los problemas, y olvidar o falso
programa de recuperación de memoria conducir a la inestabilidad del sistema o incluso se bloquea, la funcionalidad proporcionada por GC Java puede controlar automáticamente el objeto
excede el alcance con el fin de lograr el propósito de recupera automáticamente la memoria, el lenguaje Java no proporciona una liberación significativa de memoria asignada
método de operación se muestra. Los programadores de Java no tienen que preocuparse por la gestión de memoria, ya que el recolector de basura de forma automática será administrado. Para solicitud de
uno de los métodos de recogida de basura, invoque el siguiente :. System.gc () o Runtime.getRuntime () gc (), pero puede ser enmascarado JVM basura reciclaje pantalla de llamada.
La recolección de basura puede prevenir con eficacia las pérdidas de memoria, el uso eficiente de la memoria se puede utilizar. colector de basura es por lo general como
un hilo separado que ejecuta baja prioridad, en el caso de la longitud de tiempo impredecible o montón de memoria de DEAD
objetos entre no ser utilizado para limpiar y reciclar, el programador no puede ser llamado de recogida de basura en tiempo real a un objeto o dispositivo que
tiene objetos para la recolección de basura. Java en el nacimiento prematuro, la recolección de basura es uno de los principales aspectos más destacados de Java, ya que el servicio
final programador de la necesidad de la prevención eficaz de las pérdidas de memoria, pero las cosas han cambiado, y ahora la recogida de basura de Java tiene
algo para ser criticado convertido. IOS móviles a los usuarios finales inteligentes suelen pensar en un sistema mejor que el sistema Android
experiencia del usuario, en el que una razón profunda es que la naturaleza imprevisible del sistema Android de recolección de basura.
Añadido: recolección de basura no son muchos, entre ellos: la recolección de basura copia generacional, marcando la recolección de basura, la basura de vuelta gradual a
recoger otros medios. Java estándar procesar tanto el montón pila allí. Guardar las variables locales de tipo original de pila, guardar un montón para crear
el objeto. plataforma Java para la recuperación de la memoria de pila y la reutilización del algoritmo básico se llama marca y barrido, pero para Java
se ha mejorado, una "recolección de basura generacional." Este enfoque seguirá el ciclo de vida de un objeto de memoria de almacenamiento dinámico Java
se divide en diferentes áreas, el proceso de recolección de basura, el objeto podría moverse a diferentes áreas:
• Eden (Eden): Este es el nacimiento de la primera zona de destino, y para la mayoría de los objetos, donde son el único
uno existían en la zona.
• Los sobrevivientes Park (Survivor): Desde el Jardín del Edén sobrevivió hasta el objeto se trasladó aquí.
• Vida útil Yang Jardín (Titular): Este es el destino de la edad suficiente para sobrevivir objeto. La colección de la generación de jóvenes (Menor-GC)
proceso no va a tocar este lugar. Cuando la generación joven no puede cobrar objetos en el parque disfrutando de la vida, se disparará
una colección completa (Mayor-GC), también puede implicar la compresión, con el fin de liberar suficiente para el objeto grande
espacio.
Parámetros de recogida de basura relacionada JVM:
• -Xms / tamaño de la pila inicial -Xmx --- / máximo tamaño de la pila
• -Xmn --- el tamaño del montón generación joven
• -XX: -DisableExplicitGC --- vamos sistema. GC () no tiene ningún efecto
• -XX: + --- PrintGCDetail imprimir los detalles de la GC
• -XX: + PrintGCDateStamps --- impresión de fecha y hora operación GC

Supongo que te gusta

Origin www.cnblogs.com/linanana/p/12546332.html
Recomendado
Clasificación