Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

Eai pessoal!

Estou com um problema pra rodar um teste unitário. Ao rodar o teste (seja com o run ou debug) estou tendo este erro aqui:

Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

Este erro ocorre apenas para rodar o teste. Para subir a aplicação esta mensagem não aparece. Pelo o que estou vendo esta mensagem não impacta na funcionalidade da api, pois o teste passa ou falha, além das outras funcionalidades da api.

Pesquisando, li artigos que trata da versão da jdk. Já troquei para 2 versões diferentes (estou utilizando a jdk 17), e não funcionou. Adicionei o caminho da jdk no diretório do windows (C:\Program Files\Java\jdk-17\bin) no variáveis de ambientes (path), mas não funcionou também.

Vi recomendações no stack para desabilitar este recurso no intelij:

Mesmo desabilitando o mesmo, não funcionou.

Alguém já teve esse erro e sabe como resolver?

Você pode adicionar o seguinte parâmetro à sua VM ao rodar os testes:
-Xshare:off

Mas você não precisaria se preocupar com o CDS (Class Data Sharing).

1 curtida

Eu testei das duas maneiras; apenas com o -Xshare:off, e como está aí na imagem; com o -ea (o que ele recomenda no example). Mas ambas as formas não funcionaram.

Na sua primeira postagem vc disse que teve um erro, mas a mensagem em vermelho que vc mostrou não é um erro, é só um aviso e sendo um aviso, vc pode ignorar.

Vc pode ver que seus testes rodaram de boa e estão verdinhos e isso que importa.

1 curtida

Minha dúvida era essa saca. Por que fiz outros testes e todos passaram, mas fiquei com receio de que isso pudesse impactar de alguma forma.

Tudo indica que não impacta. Inclusive foi numa destas repostas sugerindo usar -Xshare:off que o cara comentou que pode ignorar.

Mas eu gostaria de tentar reproduzir este seu problema. Vc pode passar mais informações? Eu queria saber o seguinte:

  1. Qual versão da IntelliJ vc está usando?
  2. Pelo print vc usou Java 17, mas de qual fornecedor? Foi da Oracle mesmo?
  3. Que tipo de projeto vc criou? O build system usado foi Maven, Gradle ou IntelliJ mesmo?

Eu fiz um teste aqui com o JDK 21 da Adoptium, no IntelliJ IDEA 2023.2.3 (Community Edition) e mesmo com aquela opção “instrumentings agent…” ativada, o aviso não apareceu.

1 curtida
  1. Qual versão da IntelliJ vc está usando?
  • 2022.3.3 (Ultimate)
  1. Pelo print vc usou Java 17, mas de qual fornecedor? Foi da Oracle mesmo?
  • Sim, do próprio site deles (Versão 17.0.6).
  1. Que tipo de projeto vc criou? O build system usado foi Maven, Gradle ou IntelliJ mesmo?
  • Criei uma api simples de cadastro de pessoas, fiz pra execução de testes unitários. Utilizei
    o Maven, pelo o star.spring.io.

Consegui reproduzir o aviso. Usei as mesmas versões que vc, mas testei também na versão mais recente da Community e apareceu também.

Pesquisando mais um pouco, encontrei este comentário:

E realmente vc pode só ignorar o aviso.

Acho melhor não usar o -Xshare:off, pois isso parece que desabilita umas optmizações lá, então é melhor evitar problema.

Outra opção é usar -XX:-PrintWarnings, mas também não acho bom porque vai que vc acaba escondendo avisos realmente importantes, né?

Então o melhor é só ignorar mesmo.

Por curiosidade eu testei com o Oracle JDK 21 e aparecem ainda mais avisos:

WARNING: A Java agent has been loaded dynamically (C:\Users\wldomiciano\.m2\repository\net\bytebuddy\byte-buddy-agent\1.14.8\byte-buddy-agent-1.14.8.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

Para esconder estes 4 primeiros avisos basta adicionar -XX:+EnableDynamicAgentLoading lá no Run Configuration.

1 curtida

Cara muito obrigado!!!
No caso vou ignorar os avisos e seguir testando. Valeu mesmo, tmj!!!

1 curtida

Isso só desabilita o CDS - Class Data Sharing
É um recurso que faz com que quando você tem várias instâncias da máquina virtual, elas compartilhem as mesma memória para algumas classes, basicamente as classes do rt.jar.

Mas é possível compilar um jar com mais classes fazendo o CDS.

2 curtidas