Flags de inicialização ajustam o comportamento da máquina virtual Java. As chamadas “flags de Aikar” ficaram conhecidas por combinar opções do G1GC para servidores Minecraft, mas copiá-las sem olhar o Java, o limite de memória e o comando fornecido pela hospedagem pode causar falha de inicialização ou encerramento por falta de memória.
Use este guia para entender a decisão e conferir uma configuração existente. Não existe conjunto de parâmetros que substitua escolher heap adequado, medir pausas ou investigar um plugin que retém objetos. Confirme sempre se as opções continuam suportadas pela versão do Java em uso.
O que as flags tentam controlar
O garbage collector recupera memória de objetos Java que já não estão acessíveis. Um servidor pode criar muitos objetos durante ticks e geração de chunks. O G1GC divide a heap em regiões e tenta manter pausas sob controle. As flags publicadas para Paper agrupam opções para ajustar coleta e metas relacionadas a essa carga.
Uma meta de pausa não é uma garantia de que cada coleta ficará abaixo de um número. Nem a lista de flags aumenta capacidade de CPU ou corrige pressão de memória nativa. Em muitas instalações modernas, os padrões do Java já são razoáveis; a documentação do Paper descreve a configuração como orientação para cenários específicos, com avisos sobre dimensionamento.
Descubra primeiro quem inicia o processo
Em hospedagem gerenciada, o painel pode montar o comando de Java ou impor argumentos próprios. Confira a linha de inicialização exibida e a versão realmente usada pelo processo, não apenas a saída de um terminal diferente. Em Linux, um shell interativo pode apontar para outro Java que o serviço executado.
Copie o comando atual antes de editar. Identifique -Xms e -Xmx, que controlam tamanho inicial e máximo da heap, e veja se o painel inclui limites de container. Preserve argumentos de diretório, arquivo jar e segurança que fazem parte do comando. Se o painel gera a linha automaticamente, prefira o campo documentado para opções extras.
Deixe margem além do heap
O limite total precisa acomodar heap Java e memória fora dela: metadados de classes, buffers diretos, threads, bibliotecas nativas e o próprio processo. Por isso, dar à heap todo o valor anunciado pelo plano pode resultar em encerramento pelo sistema, mesmo que o log não mostre Java heap space.
Defina o Xmx com folga dentro do limite efetivo. Não copie um valor recomendado por outro servidor sem considerar seus plugins, quantidade de mundos, jogadores, tamanho do plano e limites de container. Se a plataforma documenta uma reserva de memória, use essa orientação; acompanhe o pico real sob uma carga representativa.
Escolha flags apenas quando há uma razão
Comece pelo comando oficial do Paper para seu cenário e pela documentação do Java instalado. Não misture blocos de flags de guias diferentes: algumas opções se sobrepõem ou mudam de efeito entre versões. Retire parâmetros que seu Java rejeita em vez de adicionar mais opções até a mensagem desaparecer.
Se o objetivo é reduzir pausas, registre antes um período de coleta e uma carga repetível. Compare a configuração original com uma alteração de cada vez, verificando logs de GC e MSPT. Uma média boa pode esconder uma pausa longa; examine percentis e momentos de pico quando disponíveis.
Não acrescente flags para corrigir quedas causadas por plugins, geração de chunks ou gargalo de thread principal. O Spark pode ajudar a encontrar trabalho no servidor. Um profile durante a lentidão responde pergunta diferente de uma estatística de GC: use evidência adequada ao sintoma.
Valide a linha e faça rollback
- Guarde comando e configurações atuais.
- Confirme a versão do Java pelo processo de produção ou pelo painel.
- Confira no console se cada opção foi aceita durante a inicialização.
- Observe memória total e heap com jogadores e rotinas representativas.
- Compare coleta, MSPT e pausas sob condições parecidas.
- Reverta se o processo reiniciar, consumir a margem ou não mostrar benefício.
Teste primeiro numa instância de homologação. Parâmetro inválido pode impedir o processo de subir; um limite de heap grande demais pode passar na inicialização e falhar mais tarde, quando crescer o número de chunks ou jogadores.
Entenda sintomas comuns
Uma mensagem de opção não reconhecida normalmente aponta para incompatibilidade ou erro de digitação. Uma instância que inicia e depois é encerrada pode ter excedido o limite total do serviço. Um OutOfMemoryError tem causas e mensagens diferentes, e precisa ser tratado como diagnóstico próprio.
Se a coleta acontece continuamente, investigue volume de alocação e uso de plugins antes de perseguir flags. Se o processo está lento apesar de uma heap livre, o gargalo pode estar na CPU, no armazenamento ou em uma rotina síncrona. Heap maior pode até tornar certas pausas de coleta mais longas, portanto aumentá-la sem evidência não é solução automática.
Documente para a próxima manutenção
Registre Java, comando, Xmx, limite do plano, plugins e medições usadas na decisão. Isso torna possível comparar uma atualização e voltar para o estado conhecido. Releia a documentação quando atualizar o Java, o Paper ou o painel, pois defaults e recomendações podem evoluir.
Consulte a referência do Paper sobre flags de Aikar, a documentação do comando Java e a seção Oracle sobre investigação de memória. Use o comando de inicialização oficial da versão em produção, sem assumir que um trecho antigo ainda se aplica.
Quando o heap sobe e quando isso é esperado
O uso de heap pode crescer enquanto a JVM cria objetos e depois cair durante uma coleta. Uma linha isolada de monitoramento não demonstra vazamento: compare vários ciclos, carga, jogadores e estado do mundo ao longo do tempo. Heap comprometida também pode permanecer reservada mesmo depois de objetos terem sido liberados, então diferencie a memória alocada atualmente do espaço que a JVM mantém disponível para uso futuro.
Se os registros mostram que o consumo volta ao mesmo patamar após ciclos comparáveis, isso pode ser compatível com crescimento transitório. Se a linha de base sobe continuamente sob atividade parecida, procure retenção. Um relatório de heap precisa ser tratado com cuidado porque pode incluir dados internos; limite quem tem acesso e remova cópias temporárias depois de analisá-las.
Fontes e referências
- Paper: explicação das flags de Aikar
- Oracle: comando de início Java
- Oracle: investigar erros de memória Java
Documentação consultada em 2026-10-08. Os exemplos precisam ser conferidos na versão instalada; este guia não afirma que a configuração foi testada no seu ambiente.