DEV Community

Cristiano Rodrigues for Unhacked

Posted on

3

Como a escolha do Modo do Garbage Collector pode impactar sua aplicação em .NET

Existem diferentes modos de GC disponíveis no .NET, cada um com seus próprios prós e contras. Neste contexto, vamos explorar os diferentes modos de GC disponíveis no .NET e suas características. Ao entender melhor como os diferentes modos de GC funcionam, os desenvolvedores podem tomar decisões informadas sobre como otimizar o desempenho de seus aplicativos .NET.

Para entender como o tempo de pausa do coletor de lixo (GC) e os recursos consumidos são afetados, é importante compreender como funcionam os modos Concorrente e Não Concorrente.

O modo Não Concorrente (também conhecido como stop-the-world) interrompe todas as threads gerenciadas, paralisando a aplicação por completo. Durante essa pausa, não ocorre alocação de memória e a execução da aplicação fica suspensa até que o GC conclua sua tarefa.

Non-Concurrent

Já o modo Concorrente executa a maior parte do trabalho sem interromper as threads gerenciadas, minimizando o tempo de pausa da aplicação. Entretanto, esse modo não executa a compactação da memória.

Concurrent

Existem dois outros modos de GC além dos modos Concorrente e Não Concorrente, que são o Workstation e o Server.

O modo Workstation foi projetado para aplicativos em que a interatividade do usuário requer uma resposta rápida, oferecendo pausas tão curtas quanto possível. Para isso, o GC é executado com maior frequência, diminuindo o trabalho de coleta e, consequentemente, oferecendo menores pausas e menor consumo de memória. No modo Workstation, o GC é executado em uma única thread e não economiza recursos durante a execução. Além disso, os segmentos são menores.

Workstation

Por outro lado, o modo Server foi desenvolvido para maximizar o processamento simultâneo de aplicativos com múltiplas solicitações/requisições, o que significa que as pausas são imprevisíveis, uma vez que o objetivo é maximizar a quantidade de respostas e, portanto, o GC ocorrerá com menos frequência, podendo causar pausas mais longas. Como o GC é menos acionado, a tendência é que a aplicação consuma mais memória e, por haver mais objetos na memória para serem removidos, o consumo de CPU tende a ser maior também.

Para suportar essa maior carga de memória, várias heaps serão criadas, uma para cada core lógico, e será gerada uma afinidade entre elas. Com a criação de mais heaps, cada heap usará sua própria thread de GC. O modo Server maximiza o uso de recursos da máquina.

Server

Em resumo, a escolha do modo de GC mais adequado depende do tipo de aplicativo e das necessidades específicas de desempenho. Os modos Concorrente e Não Concorrente oferecem diferentes abordagens para o gerenciamento de memória, com o primeiro minimizando o tempo de pausa e o segundo interrompendo todas as threads gerenciadas para realizar a coleta. Já os modos Workstation e Server foram projetados para lidar com diferentes tipos de cargas de trabalho, oferecendo respostas mais rápidas para interatividade do usuário ou maximizando o processamento simultâneo de solicitações/requisições. Ao entender as características de cada modo de GC, os desenvolvedores podem otimizar o desempenho de seus aplicativos .NET e proporcionar a melhor experiência para os usuários.

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay