conocimiento java (2)

8. ¿Qué algoritmo de recolección de basura?

    1. ¿Cómo determinar que un objeto es basura

        1.1. El conteo de referencias

        1.2. Análisis de alcanzabilidad

    2. algoritmo típico de recogida de basura

        2.1 marca -algoritmo de barrido(Mark-Sweep)

        2,2 algoritmo de replicación (copia)

        2.3 marca -Algoritmo de clasificación(Mark-compacto)

        2.4. Algoritmo de recolección generacional (Colección generacional)

    3. Un colector de basura típica

        3.1. Serie / SerialOld

        3.2. ParNew

        3.3. ParallelScavenge

        3.4. paralelo viejo

        3.5. CMS

        3.6. G1

   1.1. El conteo de referencias

    En Java , la referencia y el objeto está asociado. Si desea utilizar el objeto debe ser una referencia. Por lo tanto, es evidente que una forma sencilla es mediante recuento de referencia para determinar si un objeto se puede reciclar. En pocas palabras, si un objeto que no está asociado con ninguna referencia, entonces es menos probable que se utilice el objeto, el objeto es objetos reciclables. Esta es la forma en que el recuento de referencias. El problema con este enfoque es que el problema no se puede solucionar las referencias circulares.

   1.2. Análisis de alcanzabilidad

    Con el fin de resolver el método de conteo de ciclo de referencia citado problema, el Java método que utiliza el análisis de alcanzabilidad. A través de una serie de "raíces GC" objeto como un punto de partida para la búsqueda. Si las "raíces GC" No hay un camino entre y hasta un objeto, se dice que el objeto a ser inalcanzable. Se hace notar que, objeto inalcanzable no es equivalente a la recuperable objeto, objeto reciclable convierte objetos inalcanzables es proceso de marcado al menos dos. Después de dos marcas siguen siendo objetos reciclables, se enfrentará a la recuperación.

    2. algoritmo típico de recogida de basura

    2.1 marca - algoritmo de barrido (Mark-Sweep)

    El algoritmo de recolección de basura más básico se divide en dos fases, marcado y se aclaró. marca de fase Marcar todos los objetos tienen que ser recuperado, la fase de recuperación está marcada espacio libre ocupado por un objeto.
    2.2 algoritmo de replicación (Copia)
    2.3 - numerales. Algoritmo de acabado (Compacto-Mark)
    2,4 algoritmo de recolección generacional (Colección generacional).

    Con el fin de resolver el Mark-Sweep algoritmo algoritmo de fragmentación de memoria defectuosa que se propone. memoria Pulse partición de la memoria en el tamaño dos iguales. Cada uso del tiempo sólo una copia a otro bloque cuando el objeto de ésta es todavía vivo después de la memoria está llena, la memoria ha sido aprobado para su uso.

    Una combinación de las anteriores dos algoritmos propuestos con el fin de defectos evitar. fase de Mark y Mark-Sweep mismo algoritmo, la etiqueta no se limpian el objeto, pero hacia el final de los objetos vivos en la memoria. A continuación, desactive el extremo exterior de la frontera del objeto.

    Método de recolección generacional es el método más utilizado por la JVM, la idea central se basa en el ciclo de vida de los diferentes objetos viva la memoria se divide en diferentes dominios, en general, el montón GC se divide en la vieja generación (Titular vieja generación /) y New Generation (Generación Young). Caracterizado por los objetos de vieja generación necesita sólo una pequeña cantidad se recupera cada una recolección de basura tiempo, las características de la nueva generación tiene un montón de basura se ha de recuperar cada una recolección de basura tiempo, es posible seleccionar diferentes algoritmos de acuerdo a las diferentes regiones.

    3. Un colector de basura típica

    3.1. Serie / Serial Viejo

    El más antiguo del colector, el colector es una colección de un solo subproceso, la basura cuando se la usa, debe suspender todas las hebras de usuario. Serial colector una para la nueva generación, utilizando Copia de algoritmo, y de serie anterior contra generación más antigua del colector usando Mark-compacto algoritmo. La ventaja es simple y eficiente, la desventaja es la necesidad de suspender hilo usuario.

    3.2. ParNew

    Seral / Serial Antiguo versión multi-hilo, usar múltiples hilos para la recolección de basura.

    3.3. Scavenge paralelo

    La nueva generación de colector paralelo, sin hacer una pausa durante la recuperación de otros hilos, utilizando Copia de algoritmo. El colector de los dos primeros colectores diferentes, principalmente con el fin de lograr un caudal controlado.

    3.4. paralelo viejo

    Scavenge paralelo de la versión antigua generación, el uso de la Marca-compacto algoritmo y multi-threading.

    3.5. CMS

    Marca actual de barrido colectores tiempo de recuperación mínimo es un objetivo colector concurrente pausa, utilizando así la Mark-Sweep Algorithm.

    3.6. G1

    G1 (basura Primera) borde delantero de la tecnología de colectores, con el lado orientado al servicio del colector, se puede hacer pleno uso de la CPU y el entorno multi-núcleo. Es un colector paralelo y concurrente, es posible establecer un modelo de tiempo de pausa predecible.


9. ¿Cuáles son contenedor seguro para subprocesos tener?

    9.1 Mapa clase proporciona dos contenedores seguros para subprocesos


    java.util.Hashtable

    HashMap tabla hash y similares, son tablas hash, asignación de teclas de almacenamiento. La diferencia principal es que el HashTable son thread-safe. Cuando vemos el código fuente de Hashtable, se puede ver métodos Hashtable se llevan a cabo por la sincronización a nivel de método sincronizado, con el fin de lograr una acción thread-safe.

    java.util.concurrent.ConcurrentHashMap

    ConcurrentHashMap mejor tabla hash rendimiento. Mientras tanto thread-safe, con respecto a la Hashtable, han mejorado mucho en eficiencia. Podemos suponer, método seguro para subprocesos para lograr Hashtable es para ser sincronizado, es obvio, como ReentrantLock ser optimizado por otra forma concurrente. El ConcurrentHashMap utiliza ReentrantLock. El uso de técnicas de separación de bloqueo, es decir, de bloqueo en el bloque, en lugar de en el método aplicado. ConcurrentHashMap mientras que una característica es permitir que una pluralidad de operaciones de modificación simultáneas. Esto es interesante, se sabe generalmente escritos son mutuamente excluyentes, por eso mismo tiempo se puede escribir más? Eso es porque ConcurrentHashMap al mecanismo interno utilizando segmento, habrá ConcurrentHashMap dividido en muchos trozos pequeños. Mientras no se escribe en una pequeña piezas puede ser complicado para escribir.

  9. 2.Collection clase



    Colección parte es el uso de copy-on-write mecanismo de copia en escritura mecanismo de cuándo. Literalmente, puede ser capaz de entender lo que significa es que cuando añadimos elementos a un recipiente, el envase por primera vez la replicación, la copia de escritura. Después de la operación de escritura, el punto de referencia original a la nueva copia del buque de contenedores, para completar la redacción de un refresco.

     Desde su principio de ejecución, podemos ver que este mecanismo es la presencia de defectos. 1. huella de memoria: Sin lugar a dudas, cada vez que la necesidad de escribir de nuevo para copiar el recipiente de origen, si un montón de copia o el propio envase original es relativamente grande, por supuesto, tendrá una gran cantidad de memoria. La compresión del elemento de recipiente se puede emplear para evitar un consumo excesivo de memoria. 2. Los datos problema de la consistencia: Cuando escribimos ejercicio en el grupo de copia cuando, sólo después de que el extremo final de la sincronización de datos no puede ser sincronización en tiempo real , se puede ver, este mecanismo se aplica a una operación de lectura de largo en, escribir menos de escenarios.

     java.util.concurrent.CopyOnWriteArrayList

    Colección clase de contenedor seguro para subprocesos son enhebrar un uso seguro de la ReentrantLock principal implementado, CopyOnWriteArrayList no es una excepción. Cuando escrituras concurrentes, necesitan adquirir bloqueo. Cuando la lectura no necesita cerradura

     java.util.concurrent.CopyOnWriteArraySet

    CopyOnWriteArraySet aplicación se lleva a cabo en base a la realización CopyOnWriteArrayList lograr, decoradores utilizan. La diferencia entre los dos y la diferencia entre la lista y establece la misma.

    Vector

    De hecho, es seguro para subprocesos. Con respecto a otros recipientes, para proporcionar acceso aleatorio.

   9.3 StringBufferStringBuilder

    Cadena + durante el funcionamiento cuando la cadena nativa volverá a crear un objeto String para completar la concatenación de cadenas, esta operación significativamente más palabras aumentará la carga en el servidor. Así que tendremos que usar StringBuffer y StringBuilder. StringBuffer es thread-safe, StringBuilder no lo es. StringBuffer puede ser visto desde la fuente, que utiliza un método de sincronización sincronizado alcanzado. Pero añadió un mecanismo de sincronización, el rendimiento sin duda tendrá un impacto.

 


Publicado 36 artículos originales · ganado elogios 19 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_27182767/article/details/79703304
Recomendado
Clasificación