Sei q qd compilamos gera-se bytecodes e bla bla bla. Mas dia desses amigo meu me fez essa pergunta, “Java é uma linguagem compilada ou interpretada?”, daí n tive segurança suficiente pra responder e disse q n tinha certezaz, mas q achava q fosse compilada e interpretada!
Resumo da ópera: Alguem sabe de certeza se java é compilada interpretada, ou como eu disse, as duas ao mesmo tempo?
A linguagem de programação java é apenas compilada pela questão da multiplataforma onde dai sim de acordo cm cada plataforma o código cm extensão .class eh transformado em executável, pela JVM.
na verdade é compilada e intrepretada pela jvm,
ou seja, a jvm compila gerando bytecodes e a jvm
interpreta os bytecodes de acordo com o sistema operacional!
No modo default, a máquina virtual da Sun opera em “mixed mode”. Em mixed mode:
:arrow: Todos bytecodes são inicialmente interpretados;
:arrow: por meio de uma estratégia adaptativa, a máquina virtual detecta os “hot spots” - pontos de código de maior atividade - e compila esses bytecodes para código nativo. Isso é chamado de Just-In-Time compiling.
É possível, no entanto, alterar o modo de funcionamento da máquina virtual. No modo interpretado (-Xint), o JIT compiler é desativado e os bytecodes são simplesmente interpretados. No modo compilado (-Xcomp), a máquina virtual dispensa a estratégia adaptativa e compila o bytecode para código nativo logo de cara.
[quote=Giuliano Mega]No modo default, a máquina virtual da Sun opera em “mixed mode”. Em mixed mode:
:arrow: Todos bytecodes são inicialmente interpretados;
:arrow: por meio de uma estratégia adaptativa, a máquina virtual detecta os “hot spots” - pontos de código de maior atividade - e compila esses bytecodes para código nativo. Isso é chamado de Just-In-Time compiling.
É possível, no entanto, alterar o modo de funcionamento da máquina virtual. No modo interpretado (-Xint), o JIT compiler é desativado e os bytecodes são simplesmente interpretados. No modo compilado (-Xcomp), a máquina virtual dispensa a estratégia adaptativa e compila o bytecode para código nativo logo de cara.
Abraços, [/quote]
existe alguma diferença de performance significativa :?:
[quote=acolon]Sei q qd compilamos gera-se bytecodes e bla bla bla. Mas dia desses amigo meu me fez essa pergunta, “Java é uma linguagem compilada ou interpretada?”, daí n tive segurança suficiente pra responder e disse q n tinha certezaz, mas q achava q fosse compilada e interpretada!
Resumo da ópera: Alguem sabe de certeza se java é compilada interpretada, ou como eu disse, as duas ao mesmo tempo?[/quote]
è compilada (ByteCode) - .class e interpretada pela JVM.
[quote=acolon]Sei q qd compilamos gera-se bytecodes e bla bla bla. Mas dia desses amigo meu me fez essa pergunta, “Java é uma linguagem compilada ou interpretada?”, daí n tive segurança suficiente pra responder e disse q n tinha certezaz, mas q achava q fosse compilada e interpretada!
Resumo da ópera: Alguem sabe de certeza se java é compilada interpretada, ou como eu disse, as duas ao mesmo tempo?[/quote]
A resposta depende do que vc entende por compilar e interpretar.
Compilar é traduzir código legível por humanos (fonte) para codigo legivel pela máquina. Neste sentido java é compilada. Tem um compilador , o javac.
O codigo fonte é compilado em codigo máquina. A máquina é a JVM.
Se interpretar é executar sem gerar código nativo, então java é interperetado. A JVM executa o código sem gerar código nativo. Mas pode gerar código nativo, então ela é parcialmente interpretada. aliás a compilação total para código nativo mata várias funcionalidades do java como carregamento dinâmico de classes, mas a compilação parcial acelera a execução.
Java é executado. Não interessa como. Se vc quiser ser preciosísta: Java é compilado e interpretado.
Se quiser verificar a diferença, use o parâmetro -Xint (que força o Java a interpretar todos os bytecodes) ou -Xcomp (que força o Java a compilar todos os bytecodes.)
Use uma aplicação real, não um benchmark sintético que você tentou escrever.
java -Xint -cp . SeuTeste
Você vai ver que é má idéia usar tanto -Xint quanto -Xcomp para a maior parte das aplicações (no primeiro caso, elas ficam um pouco mais lentas, e não melhoram com o passar do tempo; no segundo caso, elas demoram bem mais para carregar, e gastam mais memória; outra coisa é que -Xcomp compila sem que a JVM tenha informações suficientes sobre o perfil da aplicação, ou seja, pode acabar compilando e gerando código inferior ao que seria obtido se ela usasse o modo default (“mixed mode”).