NOTÍCIA

Java 9 trará ajustes de limite de memória em containers Docker

Java 9 ganhou uma mudança para que a JVM consiga perceber que está rodando dentro de um container e ajuste os limites de memória de forma apropriada.

Java 9 trará ajustes de limite de memória em containers Docker
Imagem: Redação iMasters

O Java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) → 9 ganhou uma mudança experimental para que a JVM consiga perceber que está rodando dentro de um container e ajuste os limites de memória de forma apropriada. Apesar do aumento da popularidade dos containers nos últimos anos, muitas ferramentas, incluindo a JVM, ainda dependem dos parâmetros do host para avaliar os recursos disponíveis, muitas vezes ficando sem memória com mensagens de erro desconcertantes. Essa mudança, que pode estar disponível para o público assim que o Java 9 for lançado, tenta prevenir vários destes cenários.

Tecnologias Container como Docker, Heroku ou Kubernetes são uma forma de máquinas virtuais leves baseadas no sistema operacional Linux↳Linux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps →. Assim, elas podem fornecer uma funcionalidade muito parecida com as máquinas virtuais mais rápidas e consumindo menos recursos, mas existem algumas desvantagens: enquanto as máquinas virtuais completas simulam uma pilha inteira de hardware dedicado, o que significa que o software existente funciona principalmente como esperado, as tecnologias de containers usam o hardware e o sistema operacional do host, o que significa que o software que se baseia em informações do host pode ignorar as restrições extras que os containers impõem.

[awprm urls=https://imasters.com.br/noticia/formatacao-de-data-e-hora-no-java-9-vai-se-aproximar-dos-unicode-locale-standards/,https://imasters.com.br/desenvolvimento/devops/anunciando-docker-enterprise-edition/]

Na JVM, se o limite máximo da memória é definido com -Xmx, ela irá configurá-lo como uma fração da memória física (tipicamente ¼, mas pode variar), e isso pode não levar em conta os limites impostos pelo container. A mudança proposta tenta prevenir esse problema ao verificar se a JVM está rodando dentro de um Control Group ou cgroup, uma tecnologia Linux como a maioria das tecnologias de container usadas para impor limites no uso de hardware e outros recursos. Se a JVM detecta que está dentro de um cgroup, ela tentará encontrar o limite de memória definido no container e considerará esse limite como a memória física disponível. Como ainda é experimental, a novidade somente será aplicada se ativada com a opção -XX:+UseCGroupMemoryLimitForHeap.

Incorporado ao Kernel do Linux em 2008 e redesenhado em 2013, o cgroups isola o uso de recursos e permite que aplicações controlem o acesso a memória, CPU, IO e rede, entre outros. Diferentes aplicações podem criar sua própria hierarquia de cgroups com limites diferentes por grupos, o que significa que uma aplicação não conhece, a priori, o grupo que a mesma irá executar. É por isso que a JVM só pode fazer uma suposição sobre cgroups e o limite de memória, divulgou o site InfoQ.

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Mais de Redação iMasters
Ver perfil →