Tava lendo que alguns fabricantes possuem sua própria máquina virtual java como IBM e que essas JVM são implementadas com algumas tecnologias diferentes como JIT, HotSpot … alguém poderia me explicar isso n entendi…é como se a JVM fosse diferente dependendo da empresa é isso? tem algum ganho de uma em relação a outra?
Aew cara… é isso msm
eles fazem isso para ganhar alguma coisa em troca (geralmente performace).
por exemplo o HotSpot por exemplo ao inves de ultilizar o Garbage Collection ele ultiliza o
Generational Garbage Collection que divide o processo de limpeza da memória em fatias de tempo.
S
solonpereira
Amigo,
Onde eu posso encontrar mais sobre isso, em livros para certificação ou em material mesmo na net?
Pesquisei algumas coisas sobre Jikes, Javac, JIT mas ainda estou com dúvidas…
Agradeço pela força…
zinho
A JVM é uma especificação da Sun.
Apesar de a própria Sun possuir sua implementação, qualquer um pode construir sua próvia VM.
Até vc mesmo (se for pirado), basta seguir a especificação.
Vendors como a IBM, BEA, etc possuem sua própria implementação. http://java.sun.com/docs/books/jvms/
Essas tecnologias que vc citou como JIT e Hotspot não são exclusivas das implementações desses vendors.
A VM da Sun tb as possui.
R
rommul
Depois que uma empresa termina sua JVM ela precisa pagar para a sun certificar sua JVM.
Como existe uma especificação a ser seguida, se vc quer que a JVM seja certificada precisa entregar os a JVM a sun para ela certificar e pagar por isso.
Algumas JVM implementadas não seguem alguns padrões.
como Todos sabem que a classe String é uma classe e não um tipo primitivo, mas todos sabem que tentam ao máximo aproximar a classe String de um tipo primitivo.
E com tudo isso existe algumas JVM que se vc fizer isso aqui.
Stringa=“a”;Stringb=“b”;a=b;
algumas jvm atribuem a referencia da variavel b a variavel a.
e outras copiam o objeto de “b” a “a”.
ai quando fizer isso
a = “c”
algumas vão modificar o valor da variavel a e b e outras só vão mudar o valor da váriavel a.
Se eu não estou enganado é isso ai.
zinho
Acho que o que vc quis dizer é que, dada a especificação, como será a implementação não importa, desde que esta siga as especificações.
Agora, no caso do seu exemplo:
a = "a"
b = "b"
a = b
Sempre ocorrerá de ambas as referencias “apontarem” para o mesmo objeto.
Seja String ou qualquer outro objeto.
O objeto nunca será duplicado, como vc falou. Independente da JVM.
R
rommul
sim esta é a especificação mas ja encontrei JVM que não implementava isso…
e sim duplicava o meu objeto.
zinho
Qual?
R
rommul
Sei la…
Faz tempo.
que vi isso.
Era para linux, Testei e não dava certo ai debuguei e cheguei a essa conclusão.
zinho
Não querendo duvidar de você.
Mas acho praticamente impossível o operador de atribuição (=) se comportar de formas diferentes.
Antes de falarmos em implementações da JVM, isso faz parte da linguagem Java. É como se i++ pudesse significar coisas diferentes.
Imagina o que aconteceria.