Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida sobre portabilidade

Em todos os lugares que estudamos Java, sempre vemos falar muito sobre a portabilidade que a plataforma oferece por causa da JVM. Tenho a impressão de que é sempre ressaltado a portabilidade da JVM como maior, ou como mais vantajoso do que a portabilidade de compiladores como os de C, por exemplo.

Porém, não consigo bem enxergar a grande vantagem de máquinas virtuais em relação a compiladores no quesito portabilidade.

Precisamos ter um compilador diferente para cada SO. Ok... Mas também precisamos ter uma JVM diferente para cada SO, não é? Assim como escrevemos um código fonte Java uma vez só e transformamos em bytecode que é entendido pelas diferentes JVM's, também escrevemos códigos fonte C apenas uma vez que é entendido pelos diferentes compiladores, ou estou entendendo errado?

Entendo que o código fonte Java só é compilado uma vez (para bytecode) e que o código fonte em C precisa ser compilado para cada plataforma que ele for rodar. Mas é apenas aí que uma máquina virtual ganha de um compilador quando falamos de portabilidade? É ruim assim ter que compilar várias vezes um código fonte? Minha cabeça de principiante não consegue ver isso como um problema tão grande... Quando baixo programas que quero usar estou acostumado a ver versões para diferentes tipos de SO's... Não consigo ver isso como um problema.

Ah, quando falei que precisamos escrever o código fonte apenas uma vez... Ouvi dizer em alguns lugares que não é bem assim na prática... Nem para as JVM's, nem para os compiladores. Então de novo, pra mim vira tudo a mesma coisa...

Desculpem se a pergunta é boba, mas realmente queria entender as vantagens de uma JVM de verdade. Obrigado desde já :)

4 respostas

Bom dia.

No caso do C, você escreveu o seguinte:

"também escrevemos códigos fonte C apenas uma vez que é entendido pelos diferentes compiladores".

Na verdade existem bibliotecas específicas para Windows, por exemplo, que não funcionam no Linux (ou funcionam com algum ajuste). Por exemplo o conio.h. Por este motivo creio que é comum você ter um código fonte em C para cada Sistema Operacional.

No caso do Java você pode desenvolver um código só e ele irá funcionar em cada SO que tenha uma JVM.

Em Java você desenvolve um código só e ele funciona em vários SOs, pois a Oracle se encarrega de desenvolver as JVMs para estes SOs.

Abraço.

Oi, André. Obrigado pela resposta.

Mas assim como existem bibliotecas de C que só funcionam em sistemas específicos, não acontece o mesmo com algumas bibliotecas Java? Ouvi falar em alguns lugares que alguns códigos Java também necessitam de ajustes às vezes para funcionar em um sistema diferente. Vai ver ouvi mal... :p

Abraço

solução!

Sergio, já ouvi essa história e provavelmente é verdade em casos em que algum componente é muito específico do sistema operacional. Mas acredito que essa situação não seja muito comum. Pelo menos nos projetos que desenvolvemos em Windows e o server era Linux nunca tive esse problema, mas eram projetos Web, para Desktop, as telas que eu desenvolvia no Windows (em Java Swing) ficavam um pouco diferentes no Linux (Anti aliasing das fontes).

Isso mesmo