3
respostas

JVM e versões.

Só para poder entender, quando desenvolvemos uma aplicação usando o jdk 1.8 e temos que coloca-la em produção, a máquina no qual receberá esta aplicação deverá conter a mesma versão ou poderá ter algo diferente?

3 respostas

Olá Raife, tudo bem com você?

Desde que a versão do código que você compilou seja inferior à versão do Java no ambiente de execução, não deve haver problemas. Por exemplo, se um arquivo .class tiver sido compilado pelo JDK 1.8, mas o JRE que está rodando na sua máquina estiver na versão 1.7, você receberá uma mensagem de erro alertando que as versões são incompatíveis. Agora, pegando esse mesmo caso, qualquer versão posterior ao Java 1.8 conseguiria rodar o arquivo .class sem problemas por conta da JVM ser compatível com versões anteriores (é capaz de executar o bytecode de versões mais antigas).

Espero ter ajudado, se ficou alguma dúvida é só avisar! Forte abraço e bons estudos!!

acho que ficou dúvida sim, hoje por exemplo tem vários ambientes em nuvem que você pode instanciar um serviço. Nesse caso se eu construir minha aplicação em java 1.8 e no ambiente do cliente possuir o Java 11, então nesse caso não será possível executar ?

Opa Raife, é confuso mesmo. Mas desde que o código da aplicação seja compilada em uma versão do Java anterior à que está no ambiente do cliente, o programa vai funcionar.

Então, respondendo a sua pergunta: sim, pelo menos na teoria, deveria funcionar!

Digo "na teoria" pois podem haver pequenas mudanças ao longo do tempo na linguagem que talvez quebrem parte do seu código (nunca em grande escala) - como funcionalidades que foram descontinuadas ou métodos que passaram a se comportar de forma diferente.

Mas, no geral, o pessoal do Java se esforça bastante para manter o código compatível independente da versão; o que facilita a migração de uma aplicação Java para versões mais novas, ao mesmo tempo que força o Java a não mudar seu design inicial para não quebrar nada em grande escala.

Só um último adendo: existem formas de compilar o código Java para rodar em ambientes com versões anteriores. Embora eu nunca tenha feito isso, isso é possível passando um parâmetro na linha de comando ou através do Maven, como podemos ver nesse site (em inglês).

Espero que isso tenha ajudado. Se algum ponto não fez sentido, estou à disposição!!