Ferramentas de Usuário

Ferramentas de Site


dev_geral:java:tutorial:19_desmistificar

Desmistificar o Java

As notas seguintes foram obtidas de várias fontes, pricipalmente de fontes oficiais, como as documentação da Sun e vários livros da especialidade, mas o que mais influenciou o texto, tendo mesmo dado origem às frases usadas nas perguntas, foram as FAQs escritas por Jeff Kesselman, que tal como o autor deste artigo, se fartou um pouco de ver sempre as mesmas perguntas, ideias e concepções erradas sobre Java.

O Java é lento?

A performance do código interpretado é mais que adequada à maioria das situações, e o código intermédio gerado, o bytecode, é criado com a compilação nativa em mente. Para aquelas onde alguma performance extra é necessária, o código interpretado pode ser compilado para a plataforma onde está a ser executado, tirando partido da compilação nativa e especifica para a arquitectura da máquina em questão, melhorando significativamente a performance.

É também necessário referir que existem dois tipos de JVMs standards, a cliente e a servidor, onde esta última executa código interpretado com maior eficiência e maior performance, com o custo de um arranque mais moroso.

Um exemplo de 1995, retirado do documento The Java™ Language: An Overview, pela Sun Microsystems, coloca a execução de cerca de 300,000 chamadas a métodos, provenientes de código interpretado que foi compilado de forma nativa, ao mesmo nível de chamadas a métodos ou funções de código nativo C e C++

Pois mas tenho um artigo com uma comparação que prova que o Java é lento!

Afinal o Java é ou não interpretado?

Não, Java não é interpretado. Java é executado pela JVM, como vimos em capítulos anteriores, mas a JVM é livre de escolher a estratégia de execução de código que melhor lhe convir. Desde a segunda geração de máquinas virtuais que o código é compilado através de compiladores JIT, que fazem as mesma coisa que compiladores C, compilam o código do mesmo modo, mas que o fazem apenas na altura de executar a aplicação.

Isto é, o programador cria a sua aplicação, ela é compilada para bytecode, esse bytecode é que vemos ao tentarmos abrir um ficheiro .class. Ao ser executado, esse bytecode vai ser compilado nativamente e toda a execução da aplicação é feita através de código nativo. Naturalmente todo este processo tem algumas desvantagens, como a aplicação ser recompilada a cada execução, já que o código compilado é perdido quando a aplicação termina, mas as desvantagens são insignificantes nos sistemas actuais.

O tempo perdido a compilar é, tipicamente, absorvido pelo tempo de arranque da aplicação.

Não poderíamos ter um Java pre-compilado como o C?

Java em jogos? Mas o Java não é demasiado lento para Jogos?

E até o John Carmack diz que o Java é lento!

OK, mas o meu programa feito em Java é lento...

O que se passa com a cena do Garabage Collecter, posso ignorá-lo?

Ouvi dizer que cálculos matemáticos em Java são mais lentos que em C.

E afinal, quanta memória consome a JVM?

Navegação

dev_geral/java/tutorial/19_desmistificar.txt · Última modificação em: 2018/05/14 21:37 (edição externa)