Qual éa diferença? So a velocidade de execução, ou o bytecode e especificamente so para as JVM’s?
ByteCode = multiplataforma!
Codigo Nativo = é Multiplataforma?
Qual é realmente a diferença para essa questão ??
// ATT ();
Qual éa diferença? So a velocidade de execução, ou o bytecode e especificamente so para as JVM’s?
ByteCode = multiplataforma!
Codigo Nativo = é Multiplataforma?
Qual é realmente a diferença para essa questão ??
// ATT ();
[quote=Narj-j2ee]Qual éa diferença? So a velocidade de execução, ou o bytecode e especificamente so para as JVM’s?
ByteCode = multiplataforma!
Codigo Nativo = é Multiplataforma?
Qual é realmente a diferença para essa questão ??
// ATT ();[/quote]
a grosso modo,
bytecode é um código intermediário que é executado sobre a jvm, ou seja, byte code É O “CÓDIGO NATIVO” da plataforma Java.
código nativo é um código executado sobre o seu computador, ou seja, é nativo à arquitetura do seu sistema, chamando instruções diretamente… (registradores, instruções, interrupções, etc… )
sobre velocidade, lógico que um código nativo é mais rápido… já foi mais rápido há alguns anos atrás, de 2000 e poucos pra cá a JVM melhorou a sua performance e a diferença caiu muito…
porém não é somente escolher qual é o mais rápido e pronto…o pessoal usa código nativo mais para chamar recursos diretos do hardware.
bytecode é multiplataforma porque ele roda em um ambiente virtual (JVM)…
código nativo não é multiplataforma porque ele roda sobre a arquitetura do seu computador.
A jvm é como um processador( só que virtual = software). O bytecode é o assembly da jvm.
A velocidade de execução é menor, devido a esse processador ser hipotético, ou seja, um software também. Isso faz com que o bytecode tenha que ser traduzido para código do seu processador real.
Existem micros e processadores java reais. JRMs(Java real machines).
Mas depois de compilado o codigo para bytecodes , e enterpretado pelo JVM , ele passa para codigo de maquina?
Por que da diferença de processamento entre os dois?
A diferença também se encontra no monitoramento que a JVM faz no código, sandboxing, tratamento de exceções, e principalmente no coletor de lixo.
A JVM também faz uma compilação just-in-time, onde o bytecode é analisado, e as partes que rodam com mais freqüência(HotSpot) são recompilados para irem mais rápido. É um tipo de otimização adaptativa. Em teoria pode bater até os códigos nativos.
[quote=Narj-j2ee]Mas depois de compilado o codigo para bytecodes , e enterpretado pelo JVM , ele passa para codigo de maquina?
Por que da diferença de processamento entre os dois?
[/quote]
porque a JVM não é máquina… o seu computador traduz a JVM e a JVM traduz o bytecode …
então…
vamos considerar uma coisa.
codigo nativo, seria o código executado por uma maquina, especificamente, (dai o nome nativo provavelmente).
bytecode seria o código nativo da maquina virtual java (nativo é um termo meio relativo, como disseram, a propria JVM é uma maquina “virtual”, como se fosse um emulador).
isso não quer dizer bytecode seja o nome dado para o código de maquinas virtuais em geral, mais sim é o nome do código desta maquina virtual, da JVM (pro caso de alguém ter intendido isso), o .net tb roda sobre uma VM mais o código gerado para essa vm se chama MSIL, Microsoft Intermediate Language.
como disseram, as VMs pegam o codigo nativo a elas e convertem para código da maquina onde elas estão rodando (além de fazer mais algumas coisas também que deixam um pouquinho mais lento também, Garbage Colector por exemplo), é um processo que tornaria esse código um pouco mais lento mesmo que um código nativo a propria maquina real, mais esse código sofrem certos aprimoramentos, melhorias visando a performance, isso pode fazer com que o software execute mais rapido, porém não é o código que executa mais rapido, mais sim que ele foi aprimorado.
pense da seguinte maneira:
tenho um processador intel que não entende assembly java, mas preciso rodar um software java nessa mpaquina. Para isso preciso de um processador que entende assembly java. Então, instalo um programa que se comporta como um processador, que é a jvm. Ela não é necessariamente um emulador, é quase isso.
Como disseram acima, o coletor de lixo é uma das coisas que consomem a performance do código. Após o bytecode ser traduzido para nativo, a perda é insignificante:
Tem um desenho que talvez possa te ajudar:
