GDLauncher logo

Memória Java e Garbage Collection

Como o Minecraft usa memória

O Minecraft é um programa Java. Como todo programa Java, ele roda dentro de uma Java Virtual Machine (JVM) que recebe uma fatia fixa de RAM do sistema. Tudo que o Minecraft faz, chunks carregados, entidades, estado dos mods, texturas, vive nessa fatia.

Quando você define Instance Java Memory nas configurações de instância do GDLauncher, você está definindo -Xmx, o tamanho máximo de heap que a JVM pode usar. O código Java em si (alocações de objeto, estruturas de dados de mods, estado do mundo) vive nesse heap. Texturas e buffers OpenGL vivem fora, em memória nativa, e não são afetados pelo Xmx.

O verdadeiro gargalo é o garbage collector

O Java não libera memória à mão; tem um garbage collector que escaneia periodicamente o heap, acha objetos sem referência e recupera. O Minecraft moderno usa o coletor G1 por padrão.

O GC roda em dois modos:

  • Young GC. Curto, frequente. Escaneia uma “young generation” pequena de objetos recém-criados. Geralmente um ou dois milissegundos.
  • Old GC / Mixed GC. Mais longo, menos frequente. Escaneia o resto do heap. Pode levar dezenas de milissegundos ou mais em heaps grandes.

Quando o GC roda, o Minecraft pausa. Quanto maior o heap, mais longas as coletas grandes. Por isso adicionar mais RAM além do que o jogo precisa de verdade piora o stutter de pausa, não melhora.

É a coisa mais contraintuitiva do tuning de memória Java: alocar menos pode ser mais suave que alocar mais.

A quantidade certa de RAM

Diretrizes aproximadas, baseadas no que cabe no heap ativo sem thrashing:

WorkloadXmx recomendado
Minecraft vanilla2-4 GB
Mods leves (20-40, estilo Sodium)4 GB
Modpack médio (80-120 mods)4-6 GB
Modpack grande (ATM, FTB Continents, 250+ mods)6-8 GB
Modpacks “kitchen sink” (500+ mods, pregen de chunks profunda)8-10 GB

Acima de 10 GB raramente é útil, a menos que a documentação do pack diga explicitamente. Alguns packs realmente pedem mais (combos de mods famintos por memória tipo Better End com NetherEx); siga a recomendação do pack.

Como o slider do GDLauncher funciona

Abra uma instância, clique na aba Settings, desça até Instance Java Memory. Ligue o toggle pra ativar o override por instância e arraste o slider; vai de 1 GB até o total de RAM do sistema (com aviso acima de 80 %). O launcher converte o valor em -Xmx<n>M e passa pra JVM.

O mesmo slider existe no nível global em Settings → Java → Java Memory, como default pra qualquer instância que não sobrescreva. Deixe o global baixo pro uso casual e suba só os modpacks pesados.

Aikar’s flags

Lista longa de argumentos JVM que tunam o G1 pra priorizar pausas curtas em vez de throughput. Originalmente escritos pra servidores Minecraft, mas úteis em clientes modded também. Parecem com:

-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 ...

O GDLauncher não aplica por padrão. Pra usar, cole a string inteira no campo Instance Java Arguments na aba Settings da instância (ou em Settings → Java → Java Arguments pra aplicar globalmente). Efeitos variam; o benefício mais consistente é menos pausas longas em heaps de 6-10 GB.

Alguns alertas:

  • Tunados pra versões antigas do Java. No Java 17+ os defaults já são bem bons e os ganhos do Aikar são menores.
  • Assumem padrões de alocação tipo servidor. Em desktop com heap pequeno, podem prejudicar.
  • Não adicionam memória nem mudam quanto o jogo usa; só mudam como o coletor se comporta.

Sem motivo específico, deixe o campo Java Arguments do jeito que o GDLauncher deixou.

Diagnosticando stutter

Se o Minecraft pausa por centenas de milissegundos a cada poucos segundos:

  1. Abra a tela de debug F3. Olhe a linha “Mem:” (canto superior direito). Se oscila rápido entre baixo e alto, é churn de GC.
  2. Diminua o Xmx em 1-2 GB e teste. Contraintuitivo, mas heaps menores fazem GC mais rápido.
  3. Se um mod específico aloca feito louco (alguns mods de pregen ou render fazem isso), aparecerá em profilers do lado do mod (Spark, JmxMC). O mod talvez precise de atualização.
  4. Se seu CPU está em 100% durante as pausas, o GC está trabalhando duro mesmo. Baixe o Xmx mais ou tire mods famintos.

TL;DR

  • Coloque Java Memory em o suficiente, não no que você tem.
  • O gargalo é tempo de pausa GC, não tamanho bruto do heap.
  • Aikar’s flags ajudam em heaps grandes mas não são panaceia.
  • 4-6 GB é o certo pra quase tudo modded.