A fragmentação da memória ocorre quando um sistema contém memória que é tecnicamente livre, mas que o computador não pode utilizar. O alocador de memória, que atribui a memória necessária a várias tarefas, divide e aloca blocos de memória conforme eles são exigidos pelos programas; quando os dados são excluídos, mais blocos de memória são liberados no sistema e adicionados de volta ao pool de memória disponível. Quando as ações do alocador ou a restauração de segmentos de memória ocupados anteriormente levam a blocos ou mesmo bytes de memória que são muito pequenos ou muito isolados para serem usados pelo pool de memória, a fragmentação ocorreu. A fragmentação pode prejudicar significativamente a memória livre de um computador e costuma ser a causa de mensagens de erro frustrantes de falta de memória.
Fragmentação Interna
A fragmentação interna ocorre quando o alocador de memória deixa espaço extra vazio dentro de um bloco de memória que foi alocado para um cliente. Isso geralmente acontece porque o design do processador estipula que a memória deve ser cortada em blocos de certos tamanhos - por exemplo, os blocos podem ser divididos uniformemente por quatro, oito ou 16 bytes. Quando isso ocorre, um cliente que precisa de 57 bytes de memória, por exemplo, pode receber um bloco que contém 60 bytes, ou mesmo 64. Os bytes extras que o cliente não precisa vão para o lixo e, com o tempo, esses pequenos pedaços de memória não utilizada pode acumular e criar grandes quantidades de memória que não podem ser utilizadas pelo alocador. Como todos esses bytes inúteis estão dentro de blocos de memória maiores, a fragmentação é considerada interna.
Fragmentação Externa
A fragmentação externa acontece quando o alocador de memória deixa seções de blocos de memória não utilizados entre porções de memória alocada. Por exemplo, se vários blocos de memória são alocados em uma linha contínua, mas um dos blocos do meio na linha é liberado (talvez porque o processo que estava usando aquele bloco de memória parou de funcionar), o bloco livre é fragmentado. O bloco ainda está disponível para uso pelo alocador posteriormente se houver necessidade de memória que se encaixe naquele bloco, mas o bloco agora está inutilizável para necessidades maiores de memória. Ele não pode ser agrupado de volta com a memória livre total disponível para o sistema, já que a memória total deve ser contígua para que seja utilizável para tarefas maiores. Dessa forma, seções inteiras de memória livre podem acabar isoladas do todo, que geralmente são muito pequenas para uso significativo, o que cria uma redução geral da memória livre que, com o tempo, pode levar à falta de memória disponível para tarefas importantes.
A fragmentação pode significar grandes problemas para os sistemas
A fragmentação pode se tornar um problema porque se acumula com o tempo, criando blocos de memória pequenos e inúteis e limitando a quantidade de memória livre disponível em um computador. À medida que avança, a fragmentação pode fazer com que o desempenho do sistema fique lento e lento no curto prazo; a longo prazo, a fragmentação pode reduzir a vida útil de um computador ou servidor em 30%, em média. Dos dois tipos de fragmentação, a interna é mais previsível do que a externa, porque a quantidade de espaço desperdiçado é determinada pelos parâmetros do alocador de memória (o tamanho dos blocos alocados), que é uma constante. Além disso, a quantidade de memória geral perdida com a fragmentação interna é geralmente menor do que a perdida com a fragmentação externa, embora possa se acumular gradualmente. A fragmentação externa, por outro lado, é mais difícil de prever porque na maioria dos casos vários processos estão regularmente iniciando e parando no sistema e blocos de memória que são usados por períodos de tempo variados são liberados em uma ordem diferente daquela em que foram preenchidos, deixando lacunas na memória disponível.
Combatendo a Fragmentação para Melhorar o Desempenho
Quando se trata de otimizar a RAM, a única solução útil é reinicializar o sistema, o que limpa grande parte da memória em uso por programas de longa execução e dá ao computador um novo começo para alocar memória. As ferramentas que alegam desfragmentar a RAM são enganosas, pois o gerenciador de memória virtual em computadores modernos trabalha para otimizar o uso de RAM constantemente. Para o seu disco rígido, no entanto, alguma desfragmentação pode ser necessária para maximizar o desempenho do sistema. Se você executa o Windows Vista ou versões posteriores, o sistema desfragmenta automaticamente o espaço do disco rígido para você. Se notar um desempenho mais lento do sistema e quiser executar o desfragmentador por conta própria, você pode iniciar o processo manualmente clicando em "Iniciar" e em "Todos os programas | Acessórios | Ferramentas do sistema | Desfragmentador de disco". Finalmente, clique em “Desfragmentar agora”. O processo pode levar de minutos a horas, dependendo de como o disco rígido está fragmentado, mas a boa notícia é que você pode usar o computador enquanto o Desfragmentador de disco estiver em execução.
O problema de fragmentação não se aplica a todos os sistemas operacionais da mesma forma. Para computadores Mac, a desfragmentação não é necessária porque o Mac OS X otimiza automaticamente o espaço em disco quando os arquivos são gravados. As máquinas Linux também não requerem desfragmentação regular porque atribuem memória em um formato disperso em vez de contíguo, dando aos arquivos espaço para se expandir. Os usuários do Linux que perceberem uma queda no desempenho do sistema devem considerar o aumento do tamanho do disco rígido. Finalmente, você nunca deve desfragmentar uma unidade de armazenamento de estado sólido (como uma unidade USB), uma vez que a desfragmentação pode realmente encurtar a vida útil das unidades de estado sólido.