Java Garbage Collector – Implementações, Serial GC e Parallel GC (Parte 2)

Principais Implementações

A JVM possui várias implementações de Garbage Collector: Serial, Parallel, G1, Z … 

Cada coletor é otimizado para uma situação, e não necessariamente um é melhor que o outro, mas dependendo do objetivo de seu software conseguiremos escolher o mais adequado.

Coletor vs Otimização | Fonte OpenJDK

Nesta sessão iremos entender suas principais características, qual é usada por default nas distintas versões do Java, e como alterna-las se necessário.

Serial GC (Memory Footprint)

O Serial Collector usa uma unica thread para executar todo o trabalho do Garbage Collector. Como não há uma sobrecarga de comunicação entre as thread (em relação a um Parallel Collector) seu mecanismo é muito eficiente — porém com uma pausa maior de execução.

O Serial Collector não consegue tirar proveito de hardwares multi-processados, nesse caso, seu uso é adequado em equipamentos com apenas um core de processamento, ou em softwares com pequenos conjuntos de dados (até aproximadamente 100MB, segundo a documentação da Oracle). 

Representação de execução do Serial GC nas threads de um Software

Nota: O termo Stop-The-World(STW) apresentado na imagemé usado para representar uma das causas da execução de um evento do GC, no qual, ele pausa todas as threads da aplicação para completar sua ação com eficiência.

O Serial GC é otimizado para baixo consumo de memória (Memory footprint) e pequenos tamanhos de heap, ele está disponível em todas as versões do Java e é selecionado por padrão apenas em determinadas configurações de hardware e sistemas operacionais, ou pode ser habilitado explicitamente com o argumento: -XX:+UseSerialGC

Parallel GC (Throughput)

Podemos dizer que o Parallel GC (também conhecido como Throughput Collector)é similar ao Serial GC com a difereça que o Parallel utiliza várias threads para realizar suas operações, assim, em ambientes com vários núcleos de processamento o tempo de pausa em relação ao Serial será menor. Porém, o Parallel GC não funcionara tão bem quanto o Serial em ambientes que possuírem apenas um núcleo de processamento devido ao overhead causado pela sincronização das threads.

Comparação de execução do Serial GC e Parallel GC

Tendo como principal objetivo aumentar o Throughput da aplicação, o numero de threads utilizadas no Parallel GC depende da quantidade disponíveis de hardware threads (quantidade fisica de CPUs) da maquina, basicamente para hardwares com 8 ou mais CPUs utiliza-se por default uma fração de 5/8, já em hardwares com quantidade inferior a 8 CPUs, é utilizado a própria quantidade como valor. Caso queira alterar esse valor podemos utilizar o seguinte argumento: -XX:ParallelGCThreads=<N>

O Parallel GC é a melhor escolha para uma aplicação na qual o throughput é mais importante que a latência, ele foi definido como default no Java 8 e substituido pelo G1 GC no Java 9. Caso você queira habilitá-lo em outras versões utilize o argumento: -XX:+UseParallelGC


Veja a introdução: AQUI

No próximo artigo falaremos sobre a implementação G1 GC

Help DEV – Analista desenvolvedor Java / Android https://helpdev.com.br/zarelli

Java Garbage Collector – Implementações, Serial GC e Parallel GC (Parte 2)

3 pensou em “Java Garbage Collector – Implementações, Serial GC e Parallel GC (Parte 2)

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Rolar para o topo