Presentamos ZGC, el recolector de basura más nuevo del JDK
Fuente: Inside Java ZGC o Z Garbage Collector es el recolector de basura más moderno del JDK. Apareció originalmente en JDK 11 como una característica experimental. ZGC se convirtió en una característica de producción en JDK 15 después de que se aprobara la mejora JEP 377. En este artículo, analizaremos los objetivos y el futuro de ZGC.![Pausa para el café #132. Echemos un vistazo a ZGC, el recolector de basura más nuevo del JDK. ¿Cuál es la diferencia entre HashMap, LinkedHashMap y TreeMap en Java? - 1](https://cdn.javarush.com/images/article/3ae0fd98-4a0d-48dd-a049-eeef1aaa486f/800.jpeg)
Revisión de ZGC
ZGC está diseñado para ser un recolector de basura escalable y de baja latencia. El tiempo máximo de pausa durante el funcionamiento del ZGC rara vez supera los 250 microsegundos, sí, exactamente microsegundos, con un tiempo de pausa medio de decenas de microsegundos. ZGC es altamente escalable, con tamaños mínimos de almacenamiento dinámico que van desde 8 MB a 16 TB. Es importante tener en cuenta que el tiempo de pausa no aumenta con el tamaño del montón. Por lo tanto, incluso con un montón de varios terabytes de tamaño, el tiempo de pausa se seguirá midiendo en microsegundos. Aunque ZGC proporciona baja latencia y alta escalabilidad, tiene un costo de rendimiento que es aproximadamente un 10 % menor en comparación con G1. La reducción exacta del rendimiento depende del diseño de la aplicación, la arquitectura del sistema y las necesidades comerciales.Usando ZGC
Dado que G1 es el recolector de basura predeterminado a partir de JDK 9, deberá configurar el indicador VM -XX:+UseZGC para usar ZGC. Cuando se utiliza ZGC, la configuración más importante es establecer el tamaño máximo del montón, -Xmx. El tamaño del montón debe ser lo suficientemente grande para manejar el conjunto en vivo de su aplicación. También deberá contar con reserva adicional para realizar la recolección de basura. Cuanto más espacio esté disponible en el montón, con menor frecuencia será necesaria la recolección de basura. Pero tenga en cuenta que esto debe equilibrarse con el uso de la memoria.Mayor desarrollo de ZGC
Desde su lanzamiento como característica de producción en JDK 15, ZGC ha seguido desarrollándose activamente. Con el lanzamiento de JDK 16, introdujo el procesamiento paralelo de pila de subprocesos (JEP 376) y JDK 18 agregó la deduplicación de filas como una característica adicional. En el futuro, está previsto que ZGC sea multigeneracional, aunque aún no se ha establecido el plazo concreto para implementar esta mejora.Más información sobre ZDC
- PEC 377
- PEC 376
- ZGC: el futuro de la recolección de basura de baja latencia está aquí
- Documentación oficial de ZGC
¿Cuál es la diferencia entre HashMap, LinkedHashMap y TreeMap en Java?
Fuente: Rrtutors Si desea almacenar pares clave-valor en un programa Java, las colecciones de Java ofrecen muchas opciones para esto según sus necesidades. Estos incluyen LinkedHashmap , HashMap y TreeMap . Las diferencias clave entre estas tres clases residen en su implementación interna y la aplicación específica en determinados casos.![Pausa para el café #132. Echemos un vistazo a ZGC, el recolector de basura más nuevo del JDK. ¿Cuál es la diferencia entre HashMap, LinkedHashMap y TreeMap en Java? - 2](https://cdn.javarush.com/images/article/34f3b1aa-4888-4e78-a5d2-551c82828889/800.jpeg)
Diferencias entre HashMap, LinkedHashMap y TreeMap en Java
Estas son las principales diferencias entre las tres clases mencionadas según la implementación, el orden, la clasificación y la compatibilidad con claves y valores nulos.Implementación
Tanto HashMap como LinkedHashMap implementan la interfaz Map , mientras que TreeMap implementa las interfaces Map , NavigableMap y vSortedMap. LinkedHashMap se implementa como un depósito de lista de doble enlace, HashMap se implementa como una tabla hash y TreeMap se implementa como un árbol.Ordenar y clasificar
-
HashMap no ofrece garantías con respecto al orden de las iteraciones. Sin embargo, puede cambiar completamente cuando se agregan nuevos elementos.
-
LinkedHashMap iterará en el orden en que se colocaron las entradas en el mapa.
-
TreeMap itera según el “orden natural” de las claves según su método compareTo() (o Comparador externo). También implementa la interfaz SortedMap , que contiene métodos que dependen del orden de clasificación.
Claves y valores nulos
HashMaps y LinkedHashMap admiten valores nulos y valores clave, mientras que TreeMaps no admite valores nulos porque admiten tipos de elementos naturales. Para ver un ejemplo visual, creemos un HashMap , LinkedHashMap y TreeMap .
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class HashMap_LinkedHashMap_TreeMap {
public static void main(String[] args) {
Map Treemapu = new TreeMap();
Treemapu.put("First", "Java");
Treemapu.put("Second", "Python");
System.out.println("TreeMap values are: \n" + Treemapu);
Map Hashimapu = new HashMap();
Hashimapu.put("First", "Java");
Hashimapu.put("Second", "Python");
System.out.println("HashMap Values are: \n" + Hashimapu);
Map LinkedHashiMapu = new LinkedHashMap();
LinkedHashiMapu.put("First", "Java");
LinkedHashiMapu.put("Second", "Python");
System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);
}
}
En la salida obtenemos:
-
HashMap es un mapa basado en hash de claves. Admite operaciones get/put O(1). Las claves deben tener implementaciones consistentes de hashCode() y equals() .
-
Un LinkedHashMap es muy similar a un HashMap , pero tiene un orden en el que se agregan (o se accede a) elementos, por lo que el orden de iteración es el mismo que el orden de colocación (u orden de acceso, según los parámetros de diseño).
-
TreeMap es un mapeo basado en árboles. Sus operaciones de venta/obtención toman tiempo O(log n). Esto requiere que los elementos tengan algún tipo de mecanismo de comparación, ya sea con una comparación o un comparador. El orden de las iteraciones está determinado por este mecanismo.
GO TO FULL VERSION