Apresentando o ZGC, o mais novo coletor de lixo do JDK
Fonte: Inside Java ZGC ou Z Garbage Collector é o coletor de lixo mais moderno do JDK. Ele apareceu originalmente no JDK 11 como um recurso experimental. O ZGC se tornou um recurso de produção no JDK 15 após a aprovação do aprimoramento JEP 377. Neste artigo, veremos os objetivos e o futuro do ZGC.Revisão ZGC
O ZGC foi projetado para ser um coletor de lixo escalável e de baixa latência. O tempo máximo de pausa durante a operação do ZGC raramente excede 250 microssegundos, sim, exatamente microssegundos, com um tempo médio de pausa de dezenas de microssegundos. O ZGC é altamente escalável, com tamanhos mínimos de heap variando de 8 MB a 16 TB. É importante observar que o tempo de pausa não aumenta com o tamanho do heap. Assim, mesmo com um heap de vários terabytes de tamanho, o tempo de pausa ainda será medido em microssegundos. Embora o ZGC forneça baixa latência e alta escalabilidade, ele tem um custo de rendimento aproximadamente 10% menor em comparação ao G1. A redução exata do rendimento depende do design do aplicativo, da arquitetura do sistema e das necessidades de negócios.Usando ZGC
Como G1 é o coletor de lixo padrão começando com JDK 9, você precisará definir o sinalizador VM -XX:+UseZGC para usar ZGC. Ao usar ZGC, a configuração mais importante é definir o tamanho máximo de heap, -Xmx. O tamanho do heap deve ser grande o suficiente para lidar com o conjunto ativo do seu aplicativo. Também deverá possuir reserva adicional para realizar a coleta de lixo. Quanto mais espaço disponível no heap, menos frequentemente será necessária a coleta de lixo. Mas observe que isso deve ser equilibrado com o uso de memória.Desenvolvimento adicional do ZGC
Desde o seu lançamento como recurso de produção no JDK 15, o ZGC continuou a ser desenvolvido ativamente. Com o lançamento do JDK 16, ele introduziu o processamento paralelo de pilha de threads (JEP 376) e o JDK 18 adicionou a desduplicação de linhas como um recurso adicional. No futuro, está previsto que o ZGC se torne multigeracional, embora o prazo específico para a implementação desta melhoria ainda não tenha sido estabelecido.Mais informações sobre ZDC
- PEC 377
- PEC 376
- ZGC – O futuro da coleta de lixo de baixa latência está aqui
- Documentação oficial do ZGC
Qual é a diferença entre HashMap, LinkedHashMap e TreeMap em Java
Fonte: Rrtutors Se você deseja armazenar pares de valores-chave em um programa Java, as coleções Java oferecem muitas opções para isso, dependendo de suas necessidades. Estes incluem LinkedHashmap , HashMap e TreeMap . As principais diferenças entre estas três classes residem na sua implementação interna e na aplicação específica em certos casos.Diferenças entre HashMap, LinkedHashMap e TreeMap em Java
Aqui estão as principais diferenças entre as três classes mencionadas com base na implementação, ordenação, classificação e suporte para chaves e valores nulos.Implementação
Tanto HashMap quanto LinkedHashMap implementam a interface Map , enquanto TreeMap implementa as interfaces Map , NavigableMap e vSortedMap. LinkedHashMap é implementado como um intervalo de lista duplamente vinculado, HashMap é implementado como uma tabela hash e TreeMap é implementado como uma árvore.Ordenação e classificação
-
HashMap não oferece garantias quanto à ordem das iterações. No entanto, pode mudar completamente quando novos elementos são adicionados.
-
LinkedHashMap irá iterar na ordem em que as entradas foram colocadas no mapa.
-
TreeMap itera de acordo com a “ordem natural” das chaves de acordo com seu método compareTo() (ou Comparador externo). Ele também implementa a interface SortedMap , que contém métodos que dependem da ordem de classificação.
Chaves e valores nulos
HashMaps e LinkedHashMap suportam valores nulos, bem como valores-chave, enquanto TreeMaps não suportam valores nulos, pois suportam tipos de elementos naturais. Para um exemplo visual, vamos criar HashMap , LinkedHashMap e 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);
}
}
Na saída obtemos:
-
HashMap é um mapa baseado em hash de chave. Ele suporta operações get/put O(1). As chaves devem ter implementações consistentes de hashCode() e equals() .
-
Um LinkedHashMap é muito semelhante a um HashMap , mas possui uma ordem na qual os elementos são adicionados (ou acessados), portanto a ordem de iteração é igual à ordem de colocação (ou ordem de acesso, dependendo dos parâmetros de design).
-
TreeMap é um mapeamento baseado em árvore. Suas operações put/get levam tempo O(log n). Isto requer que os elementos tenham algum tipo de mecanismo de comparação, seja com uma comparação ou com um comparador. A ordem das iterações é determinada por este mecanismo.
GO TO FULL VERSION