Qué hacer si el centro de mecanizado está bloqueado

¿Qué debo hacer si el centro de mecanizado está bloqueado? Los dos subsistemas son el cargador de clases y el motor de ejecución; los
dos componentes son el área de datos de tiempo de ejecución y la interfaz nativa.
Cargador de clases (carga de clases): de acuerdo con el nombre de clase totalmente calificado (como: java.lang.Object) para cargar el archivo de clase en el área de método en el área de datos de tiempo de ejecución.
Motor de ejecución (motor de ejecución): ejecuta instrucciones en clases.
Interfaz nativa (interfaz nativa): interactúa con bibliotecas nativas, es una interfaz para la interacción con otros lenguajes de programación.
Área de datos de tiempo de ejecución (área de datos de tiempo de ejecución): Esto es lo que a menudo decimos la memoria JVM.
Proceso: Primero, el compilador convierte el código Java en código de bytes, y luego el cargador de clases (ClassLoader) carga el código de bytes en la memoria y lo coloca en el área de método del área de datos de tiempo de ejecución, y El archivo de código de bytes es solo un conjunto de especificaciones de conjunto de instrucciones de la JVM, y no se puede entregar directamente al sistema operativo subyacente para su ejecución. Por lo tanto, se requiere un motor de ejecución de analizador de comandos específico (Motor de ejecución) para traducir el código de bytes a las instrucciones del sistema subyacente y luego enviarlo Es ejecutado por la CPU, y en este proceso, la interfaz de la biblioteca nativa (Interfaz nativa) de otros idiomas necesita ser llamada para realizar la función de todo el programa.

Hablando del área de datos de tiempo de ejecución JVM, la
máquina virtual Java divide el área de memoria que administra en varias áreas de datos diferentes durante la ejecución del programa Java. Estas áreas tienen sus propios propósitos, así como el tiempo de creación y destrucción. Algunas áreas existen con el inicio del proceso de la máquina virtual, y algunas áreas se establecen y destruyen dependiendo del inicio y el final de los subprocesos. La memoria administrada por la máquina virtual Java se divide en las siguientes áreas:

En pocas palabras, es lo que el tiempo de ejecución de Java se coloca allí
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Registro del contador de programas: el indicador del número de línea del código de bytes ejecutado por el subproceso actual. El trabajo del analizador de código de bytes es cambiar el valor de este contador para seleccionar la siguiente instrucción de código de bytes que se ejecutará, bifurcación , Loop, jump, manejo de excepciones, recuperación de subprocesos y otras funciones básicas, todos necesitan confiar en este contador para completar;

¿Por qué necesitamos un contador de hilos? Porque el hilo no tiene la función de memoria

Java Virtual Machine Stack (Java Virtual Machine Stacks): cada método creará un marco de pila (Stack Frame) en la pila de máquina virtual Java para almacenar la tabla de variables locales, la pila de operandos, el enlace dinámico, la salida del método, etc. Informacion

El marco de la pila es la siguiente unidad en la pila de la máquina virtual Java

Pila de métodos nativos (pila de métodos nativos): la función es la misma que la pila de máquinas virtuales, excepto que la pila de máquinas virtuales sirve métodos Java y la pila de métodos locales sirve a la máquina virtual para llamar a métodos nativos;

El método de modificación de palabras clave nativas es invisible, la mayor parte del código fuente del método nativo es código C y C ++

Java Heap: todos los subprocesos comparten la mayor parte de la memoria de la máquina virtual Java. Aquí se asigna memoria a casi todas las instancias de objetos;

Área de método (Área methed): se usa para almacenar datos como información de clase, constantes, variables estáticas y código compilado justo a tiempo que la máquina virtual ha cargado.

Hay una descripción detallada del área de datos de tiempo de ejecución de JVM más adelante

Introducción detallada del contador del programa? (Comprensión importante) El
contador del programa es un pequeño espacio de memoria, se puede ver como: guardar la dirección (número de línea) de la instrucción de código de bytes que ejecuta el hilo actual

Como el subprocesamiento múltiple de la máquina virtual Java se implementa mediante el cambio de subprocesos y la asignación del tiempo de ejecución del procesador, un procesador solo puede ejecutar instrucciones en un subproceso. Por lo tanto, para restaurar la posición de ejecución correcta después del cambio de hilo, cada hilo tiene un contador de programa independiente, y los contadores de cada hilo no se afectan entre sí y se almacenan de forma independiente. Esto se llama memoria de "hilo privado". El área de memoria del contador del programa es la única área en la máquina virtual que no especifica OutOfMemoryError.

Resumen: también se le puede llamar contador de hilos

Ejemplo: en Java, la unidad de ejecución más pequeña es un subproceso. Un subproceso es ejecutar una instrucción. La operación final de la instrucción ejecutada es nuestra computadora, que es la CPU. Existe un factor muy inestable en la CPU, llamado estrategia de programación, que se basa en segmentos de tiempo, es decir, el nanosegundo actual se asigna a esa instrucción.

Si:

Un hilo de ver en directo
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

De repente, el hilo B a un teléfono de video, las arrebatará de rosca Una rebanada de tiempo, se romperá el hilo A, el hilo Un colgará
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Luego, la videollamada finaliza. ¿Qué debe hacer el hilo A?
(Thread es la unidad de ejecución más pequeña, no tiene una función de memoria, solo es responsable de hacerlo, luego esta memoria es registrada por: contador de programa)
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

¿Introducir la pila de la máquina virtual Java en detalle? (Énfasis en la comprensión) La
máquina virtual Java es privada para el hilo, y su ciclo de vida es el mismo que el hilo.

La pila de máquina virtual describe el modelo de memoria de la ejecución del método Java: cada método creará un marco de pila (Stack Frame) para almacenar la tabla de variables locales, la pila de operandos, el enlace dinámico, la salida del método y otra información durante la ejecución.

Explicación: Hay una unidad en la pila de la máquina virtual, la unidad es el marco de la pila, un método para cada marco de la pila. En un marco de pila, tiene que almacenar variables locales, pila de operandos, enlace dinámico, exportación, etc.

åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Analiza el marco de la pila:

Tabla de variables locales: se utiliza para almacenar nuestros 8 tipos de datos básicos temporales, dirección de referencia de objeto, tipo returnAddress. (ReturnAddress contiene la dirección de instrucción del bytecode que se ejecutará después de la devolución).

Pila de operandos: la pila de operandos se usa para operar. Por ejemplo, hay un i = 6 * 6 en el código. Operará al principio, leerá nuestro código y luego lo colocará en la tabla de variables locales después del cálculo. Ir

Enlace dinámico: si hay un método service.add () en mi método, quiero vincular a otro método. Este es el enlace dinámico, donde se almacena el enlace.
Exportar: ¿Qué es la exportación? Si la exportación es normal, la devolución es anormal. Si la exportación es anormal, se produce una excepción.

¿Un método llama a otro método para crear muchos marcos de pila?

Respuesta: se creará. Si hay un enlace dinámico en una pila para llamar a otros métodos, creará un nuevo marco de pila, la pila está en orden, un marco de pila llama a otro marco de pila, y el otro marco de pila se organizará debajo de la persona que llama

¿Qué significa el punto de pila para el montón?

¿Qué significa que la pila apunte a la pila, qué debe hacer si desea usar variables miembro en la pila? No se almacenan variables miembro en la pila, solo una dirección de aplicación

¿Las llamadas recursivas crearán muchos marcos de pila por sí mismos?

Respuesta: Si es recursivo, también se crearán varios marcos de pila, es decir, la pila se alineará de arriba a abajo.

¿Puede darme una introducción detallada al montón de Java? (Énfasis en la comprensión) El
montón de Java (montón de Java) es la pieza de memoria más grande administrada por la máquina virtual de Java y es un área de memoria compartida por todos los hilos, creada cuando se inicia la máquina virtual . El único propósito de esta área de memoria es almacenar instancias de objetos.

La descripción en la especificación de la máquina virtual Java es: Todas las instancias y matrices de objetos deben asignarse en el montón.

El montón de Java es el área principal administrada por el recolector de basura, por lo que también se llama "montón de GC".

Desde la perspectiva del reciclaje de memoria, el montón de Java se puede dividir en: la nueva generación y la vieja generación.

Desde la perspectiva de la asignación de memoria, los buffers de asignación privada de subprocesos múltiples se pueden dividir en el montón de Java compartido por subprocesos.

No importa cómo se divide, no tiene nada que ver con el contenido almacenado. No importa qué área esté almacenada, es una instancia de objeto. Una división adicional es reclamar mejor la memoria o asignar memoria más rápido.
De acuerdo con la Especificación de máquina virtual de Java, el montón de Java puede estar en un espacio de memoria físicamente discontinuo. Las máquinas virtuales principales actuales son todas extensibles (controladas por -Xmx y -Xms). Si no hay memoria en el montón para completar la asignación de instancias, y el montón ya no puede expandirse, se generará una excepción OutOfMemoryError.

¿Puedes explicar la pila de métodos locales?

La pila del método local es fácil de entender. Es muy similar a la pila, excepto que la palabra de pila con la palabra clave nativa en el método

Es el método de servicio de la pila de máquina virtual que ejecuta el método Java (es decir, el código de bytes) para la máquina virtual. El método de la
palabra clave nativa no es visible. Debe ir al sitio web oficial de Oracle para descargarlo y verlo, y la palabra clave nativa se modifica. La mayor parte del código fuente es código C y C ++.

Del mismo modo, los códigos C y C ++ están en la pila de métodos locales.

¿Puede explicar el área del método (centrarse en la comprensión)

El área de método es un área de memoria compartida por todos los subprocesos. Se utiliza para almacenar datos como información de clase, constantes, variables estáticas y código compilado por el compilador justo a tiempo que ha sido cargado por la máquina virtual Java.

Tiene un orden especial llamado Non-Heap (no heap). Cuando el área de método no puede cumplir con los requisitos de asignación de memoria, se genera una excepción OutOfMemoryError.

¿Qué es el motor de ejecución de bytecode JVM?

El componente principal de la máquina virtual es el motor de ejecución, que es responsable de ejecutar el código de bytes de la máquina virtual. Generalmente, el usuario primero lo compila en código de máquina y lo ejecuta.

"Máquina virtual" es un concepto relativo a "máquina física". El código de bytes de una máquina virtual no puede ejecutarse directamente en la máquina física. Necesita un motor de ejecución de código de bytes JVM, puede ejecutarse en la máquina física después de compilarse en el código de máquina.

¿Has oído hablar de la memoria directa?

La memoria directa (memoria directa) no forma parte del área de datos de tiempo de ejecución de la máquina virtual, ni es el área de memoria definida en la máquina virtual Java. Pero esta parte de la memoria también se usa con frecuencia, y también puede causar la excepción OutOfMemoryError, por lo que lo explicaremos aquí.

Entiendo que la memoria directa es una memoria intermedia basada en memoria física y memoria de máquina virtual Java

¿Conoces un sistema de recolección de basura?

Cuando el programa se está ejecutando, generará una gran cantidad de basura de memoria (algunos objetos de memoria señalados sin referencia son todos basura de memoria, porque estos objetos ya no son accesibles, el programa no puede usarlos, están muertos para el programa), para garantizar que el programa Rendimiento en tiempo de ejecución, la máquina virtual de Java realiza continuamente la recolección automática de basura (GC) durante el proceso de ejecución del programa.

El sistema de recolección de basura es el núcleo de Java, y también es indispensable. Java tiene su propio mecanismo para la recolección de basura, los desarrolladores no necesitan limpiar manualmente

Parte de la razón es que debido al poderoso sistema de recolección de basura de Java, Java lidera el mercado

¿Cuál es la diferencia entre las pilas?
image.png

Nota:

Las variables estáticas se colocan en el área del método.

Los objetos estáticos todavía se colocan en el montón.

La copia profunda y la copia
superficial (shallowCopy) solo agrega un puntero a la dirección de memoria existente.

La copia profunda (deepCopy) consiste en agregar un puntero y solicitar una nueva memoria, de modo que el puntero aumentado apunte a la nueva memoria,

Copia superficial: simplemente apunte a la dirección de memoria que se va a copiar. Si la dirección original cambia, los objetos copiados de la copia superficial también cambiarán en consecuencia.

Copia profunda: abra una nueva dirección de memoria en la computadora para almacenar el objeto copiado.

¿Habrá una pérdida de memoria en Java? Por favor explique por qué?
La pérdida de memoria significa que los objetos o variables que ya no están en uso siempre están ocupados en la memoria. En teoría, Java tiene un mecanismo de recolección de basura GC, es decir, los objetos que ya no se usan serán recogidos automáticamente por GC y eliminados automáticamente de la memoria.

Sin embargo, incluso si este es el caso, todavía hay una pérdida de memoria cuando el centro de procesamiento está bloqueado. La razón de la pérdida de memoria en Java es muy clara: es probable que los objetos de período largo que contienen referencias a objetos de corta duración tengan pérdidas de memoria. Aunque el objeto de corta duración ya no es necesario, no se puede reciclar porque el objeto de larga duración tiene su referencia. Esta es la aparición de pérdidas de memoria en Java.

Mecanismo y algoritmo de recolección de basura.
Breve descripción del mecanismo de recolección de basura de Java.
En Java, los programadores no necesitan liberar explícitamente la memoria de un objeto, sino la propia máquina virtual. En la JVM, hay un subproceso de recolección de elementos no utilizados, que es de baja prioridad y no se ejecutará en circunstancias normales. Solo cuando la máquina virtual está inactiva o la memoria del montón actual es insuficiente, la ejecución se activará. Haga referencia a los objetos y agréguelos a la colección para reciclarlos y reciclarlos.

¿Qué es el GC? Por qué GC
GC significa recolección de basura (Gabage Collection), el procesamiento de memoria es un lugar donde los programadores son propensos a problemas. Olvidar o recolectar incorrectamente la memoria hará que el programa o sistema se vuelva inestable o incluso se bloquee. La función GC proporcionada por Java se puede monitorear automáticamente Si el objeto excede el alcance para lograr el propósito de recuperar automáticamente la memoria, el lenguaje Java no proporciona un método de operación de visualización para liberar la memoria asignada.

Las ventajas y desventajas
de la recolección de basura Ventajas: El recolector de basura de la JVM no requiere que tratemos manualmente con objetos sin referencia, esta es la mayor ventaja

Desventajas: El programador no puede llamar al recolector de basura en un objeto o todos los objetos en tiempo real para la recolección de basura.

¿Cuál es el principio del recolector de basura? ¿Hay alguna forma de realizar la recolección de basura manualmente?
Para GC, cuando un programador crea un objeto, el GC comienza a monitorear la dirección, el tamaño y el uso del objeto.

En general, GC utiliza un gráfico dirigido para registrar y administrar todos los objetos en el montón. De esta forma, determine qué objetos son "accesibles" y qué objetos son "inalcanzables". Cuando el GC determina que algunos objetos son "inalcanzables", el GC es responsable de reclamar estos espacios de memoria.

Si El programador puede ejecutar manualmente System.gc () para notificar al GC que se ejecute, pero la especificación del lenguaje Java no garantiza que se ejecute el GC.

¿Qué tipos de referencia hay en la JVM?
Referencia fuerte: no se reciclará cuando ocurra gc.
Referencia suave: los objetos útiles pero no necesarios se recopilarán antes de que ocurra un desbordamiento de memoria.
Referencias débiles: objetos útiles pero no necesarios, serán reciclados en el próximo GC.
Referencia virtual (referencia fantasma / referencia fantasma): el objeto no se puede obtener a través de la referencia virtual. PhantomReference se utiliza para implementar la referencia virtual. El propósito de la referencia virtual es devolver una notificación cuando gc.

¿Cómo juzgar si el objeto puede ser reciclado?
Cuando el recolector de basura está haciendo la recolección de basura, lo primero que debe determinar es qué memoria debe reciclarse, qué objetos están vivos y cuáles no pueden reciclarse; qué objetos están muertos y necesitan reciclarse.

Generalmente hay dos formas de juzgar:

Método de contador de referencia: cree un recuento de referencia para cada objeto. Cuando hay una referencia de objeto, el contador es +1. Cuando se libera la referencia, el contador es -1. Cuando el contador es 0, puede reciclarse. Tiene la desventaja de que no puede resolver el problema de las referencias circulares (esto se ha eliminado)

Algoritmo de análisis de accesibilidad: busque hacia abajo desde GC Roots, y el camino que toma la búsqueda se llama cadena de referencia. Cuando un objeto está conectado a GC Roots sin ninguna cadena de referencia, demuestra que el objeto puede reciclarse. (Muy, muy ampliamente utilizado en el mercado)

¿Qué es Full GC?
Limpie todo el espacio de almacenamiento dinámico, incluidas las generaciones jóvenes y viejas y las generaciones permanentes.
Debido a que Full GC es para limpiar todo el espacio de almacenamiento dinámico, la velocidad de ejecución de Full GC es muy lenta. En el desarrollo de Java, es mejor asegurarse de que Full GC no se active.


Cuando el recolector de basura puede recolectar un objeto Cuando el objeto se vuelve inaccesible para la aplicación que actualmente usa el objeto, se puede recolectar el objeto.

La recolección de basura no ocurre en la generación permanente. Si la generación permanente está llena o excede el umbral, desencadenará una recolección de basura completa (GC completo). Si observa de cerca la salida del recolector de basura, encontrará que la generación permanente también se recicla. Es por eso que el tamaño correcto de generación permanente es muy importante para evitar el GC completo.

¿Cuáles son los algoritmos de recolección de basura JVM?
Algoritmo de marca-barrido: marca objetos inútiles y luego borra y recicla. Desventajas: la eficiencia no es alta y no se pueden eliminar los desechos de basura.

Algoritmo de copia: divida dos áreas de memoria de igual tamaño de acuerdo con la capacidad, cuando se agota un bloque, copie los objetos vivos en otro bloque y luego limpie el espacio de memoria usado una vez. Desventajas: el uso de memoria no es alto, solo la mitad del original.

Algoritmo de organización de marcado: marque objetos inútiles, mueva todos los objetos supervivientes a un extremo y luego limpie directamente la memoria más allá del límite final.

Algoritmo generacional: la memoria se divide en varios bloques de acuerdo con los diferentes ciclos de vida del objeto, generalmente la nueva generación y la generación anterior. La nueva generación básicamente adopta el algoritmo de replicación, y la generación anterior adopta el algoritmo de clasificación de etiquetas.

Marque el algoritmo de barrido
Marca objetos inútiles y luego los borra y recicla.

El algoritmo Mark-Sweep (Mark-Sweep) es un algoritmo básico común de recolección de basura, que divide la recolección de basura en dos etapas:

Etapa de marcado: marque los objetos que se pueden reciclar.

Fase de compensación: Recupere el espacio ocupado por los objetos marcados.

El algoritmo de marcado-barrido es básico porque los algoritmos de recolección de basura descritos más adelante se mejoran en base a este algoritmo.

Ventajas: implementación simple, no es necesario mover objetos.

Desventajas: la eficiencia del proceso de marcado y limpieza es baja, se genera una gran cantidad de fragmentos de memoria discontinuos y aumenta la frecuencia de recolección de basura.

Marcos - barrido realiza algoritmo de un procedimiento tal como se muestra
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Algoritmo de copia
Para resolver el problema de baja eficiencia del algoritmo de marca y barrido, se creó un algoritmo de copia. Divide el espacio de la memoria en dos áreas iguales, utilizando solo un área a la vez. Durante la recolección de basura, atraviese el área actualmente utilizada, copie los objetos supervivientes a otra área y finalmente recolecte los objetos reciclables del área actualmente utilizada.

Ventajas: Asignar memoria en secuencia, simple de implementar, eficiente de ejecutar, sin considerar la fragmentación de la memoria.

Desventajas: el tamaño de memoria disponible se reduce a la mitad del original, y el objeto se copia con frecuencia cuando la tasa de supervivencia es alta.

Copiar algoritmo de ejecución como se muestra abajo
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Algoritmo de marca y clasificación El algoritmo de
replicación se puede usar en la nueva generación, pero el algoritmo de replicación no se puede seleccionar en la generación anterior, porque la tasa de supervivencia de los objetos en la generación anterior será mayor, lo que provocará más operaciones de copia, lo que resultará en una menor eficiencia.

El algoritmo de barrido de marcas se puede aplicar en la generación anterior, pero no es eficiente y es fácil generar una gran cantidad de fragmentos de memoria después de recuperar la memoria. Por lo tanto, existe un algoritmo Mark-Compact, que es diferente del algoritmo Mark-Compact. Después de marcar los objetos reciclables, todos los objetos supervivientes se comprimen en un extremo de la memoria, de modo que se organizan de forma compacta. Juntos, y luego reclamar la memoria más allá del límite final. Después del reciclaje, la memoria usada y no usada está en cada lado.

Ventajas: resolvió el problema de la fragmentación de la memoria en el algoritmo de limpieza de marcas.

Desventajas: El objeto local aún necesita ser movido, lo que reduce la eficiencia hasta cierto punto.

Marcos - terminar la ejecución del algoritmo como se muestra en la figura
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

Algoritmo de recolección generacional
Todas las máquinas virtuales comerciales actuales utilizan la recolección generacional de algoritmos de recolección de basura. El algoritmo de colección generacional, como su nombre lo indica, divide la memoria en varios bloques de acuerdo con el ciclo de vida del objeto. Generalmente incluyendo la generación joven, años generaciones antiguas y permanentes, como se muestra en la Figura :( centraron explicará más adelante)
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

¿La recolección de basura ocurrirá en la generación permanente en la JVM?
La recolección de basura no ocurrirá en la generación permanente. Si la generación permanente está llena o excede el umbral, se activará un GC completo (GC completo). Si observa de cerca la salida del recolector de basura, encontrará que la generación permanente también se recicla. Es por eso que el tamaño correcto de generación permanente es muy importante para evitar el GC completo. Consulte Java8: desde la generación permanente hasta el área de metadatos
(Nota: la generación permanente se ha eliminado en Java8 y se ha agregado una nueva área de memoria nativa llamada área de metadatos)

recolector de basura y la nueva generación, de antaño, la generación permanente de
hablar de la nueva generación, de antaño, la generación permanente diferencia
åœ¨è¿ ™ é ‡ Œæ ?? 'å
¥ å ›¾ç ‰ ‡ æ ???? è¿ °

En Java, el montón se divide en dos áreas diferentes: la generación joven (Vieja) y la generación vieja (Vieja). La generación joven (Young) se divide en tres áreas: Eden, From Survivor, To Survivor. El propósito de esta división es permitir que la JVM administre mejor los objetos en la memoria de almacenamiento dinámico, incluida la asignación y el reciclaje de la memoria.

La nueva generación generalmente guarda objetos recién emergidos, por lo que se descubre que muere una gran cantidad de objetos cada vez durante la recolección de basura. Solo sobrevive una pequeña cantidad de objetos. Se adopta el algoritmo de replicación y solo se necesita un pequeño costo de replicación de los objetos sobrevivientes para completar la recolección.

En la generación anterior, los objetos que han sobrevivido durante mucho tiempo generalmente se conservan. Tienen una alta tasa de supervivencia y no hay espacio adicional para garantizarlo. Por lo tanto, deben usar el algoritmo "mark-clean" o "mark-sort".

La generación permanente es el área de método de la JVM. Aquí hay toda la información de clase, variables estáticas, constantes y otros datos cargados por la máquina virtual. Las cosas en esta área son más difíciles de reciclar que las viejas y nuevas generaciones.

¿Qué es GC menor, GC mayor, GC completo? GC
menor es un GC de nueva generación, que se refiere a la acción de recolección de basura que ocurre en la nueva generación. Dado que los objetos de Java están en su mayoría muertos, el GC menor es muy frecuente y la velocidad de recuperación es generalmente más rápida. (Generalmente use el algoritmo de copia para reciclar basura)

Major GC es un GC de generación anterior. Se refiere a un GC que ocurrió en la generación anterior. Generalmente, GC mayor se ejecutará junto con GC menor. El GC mayor es mucho más lento que el GC menor. (Se puede usar un método de marcado claro y un método de acabado de marcado)

Full GC es limpiar todo el espacio de almacenamiento dinámico, incluidas las generaciones jóvenes y viejas

GC menor, GC mayor, diferencias completas de GC y condiciones de
activación Las condiciones de activación de GC menor son generalmente:

Cuando el área edén está llena, se activa MinorGC. Es decir, al solicitar un objeto, se descubre que el área edén no es suficiente y se activa un MinorGC.

El GC menor se activa cuando el tamaño del objeto recién creado> el espacio restante de Eden

Las condiciones de activación para GC mayor y GC completo son generalmente:

El GC mayor suele ser equivalente al GC completo

Cada centro de mecanizado fue encerrado cómo hacer promoción al tamaño medio del objeto y la vejez> de edad restantes espacio de
supervivencia después de MinorGC objetos de edad de espacio restante
es insuficiente espacio permanente en nombre de
la System.gc Ejecutivo ()
del GC anormal CMS
asignación de memoria heap es Objeto grande

28 artículos originales publicados · Me gusta0 · Visitas 907

Supongo que te gusta

Origin blog.csdn.net/srhgsr/article/details/105545610
Recomendado
Clasificación