JVMs , qual é o melhor?

Bom, o que pouca gente sabe é que existem outras SDK e JVM pra java, alem da fornecida pela SUN… Gostaria de saber qual vocês acham as melhores para cada caso na plataforma Windows e Linux

JVM existentes:
Sun SDK/JVM
padrão, usado pela maioria das pessoas em Windows e Linux

IBM SDK/JVM
até bem pouco tempo, era considerado bem mais rapido que o JVM da Sun, ainda é???

HP JVM (Alpha)
ainda nao testei, alguem ja usou?

blackdown
Umas das primeiras implementações pra linux, nunca me passou confiança… ! alguem usa?

Acho que isso é meio questão de gosto - geralmente quem não usa a VM da Sun é meio fanático pela VM que usa, mas tb nao chega ao fanatismo dos usuarios das diversas distribuicoes de Linux que tem por ai :slight_smile:

Já usei a VM da IBM, e pra falar a verdade não senti diferenças grandes de performance. Então, sinceramente, pra mim tanto faz - eu não sou da área operacional, eu sou só desenvolvedor :wink:

PS: Faltou aí um monte de VM, ainda… BEA JRockit, Oracle OJVM, Apple JVM… :wink:

sim, eu sei que existe varias outras… mas eu relacionais apenas as que (eu pelo menos) escuto mais.

a JVM da Apple eh animal, da 1 show nas demais.
Eh a unica que usa shm pra compartilhar a versao jitted do runtime. Ou seja, basta manter 1 JVM que usa as classes mais comuns (collections, lang, io, net, ui) em background que o startup de outra aplicacao eh muito mais rapido

A idéia de usar memoria compartilhada pro JIT foi muito boa, mesmo… será que isso vai entrar na Tiger? :smiley:

Lembro de ter lido e escutado muito sobre isso, mas, de repente, todo mundo soh tava interessado nas novas features da linguagem e acho que esse assunto “morreu” :?

Falando em Apple, ouvir falar que o MAC OSX usa Java como linguagem padrão. Alguém poderia confirmar isso? Como isso afeta o MAC OS?

Grato,

Nao, o MacOS X usa Objective C como “linguagem padrão”, assim como a maioria dos Unices usa C, o Windows e o BeOS usam C++.

Mas, no caso do MacOS, devido à otima integração que a Swing da Apple JVM tem, dá a impressão de que as apps Java são praticamente nativas. De fato, já ouvi alguns comentários que desinstalar a VM no MacOS X dá tanto problema quanto tentar desinstalar o IE no Windows :slight_smile:

Já ouvi falar dessa linguagem. Quais são suas caracteristicas? É Orientada a Objetos? No que difere de C++ e de Java?

eu vi que a sun tava cogitando 1 JVM com shm pra 1.4.2, mas devido a algumas deadlines isso nao vai acontecer.
Porem se tudo der certo, provavelmente na Tiger vai acontecer.

Já ouvi falar dessa linguagem. Quais são suas caracteristicas? É Orientada a Objetos? No que difere de C++ e de Java?[/quote]

Objective C é uma mistura, um pouco estranha, no início, de K&R C com Smalltalk. As declarações e chamadas de métodos são feitos de uma maneira ‘smalltalkenta’, e todo o resto é C. Aqui vai um exemplo, pra dar uma idéia:

[code]+(Foo *)MakeFoo:(int)aValue;

  • initFoo:(int)aValue;
  • free;
  • (int)callFoo:(int)aValue;
  • (int)value;

int callFoo:(int)foo {
int count;
int result = 0;
HelperObject *anObject = [[HelperObject alloc] init];

for (count = 0; count < foo; count++)
result += [anObject value:count];
[anObject free];
return result;
}[/code]

[quote=“maxguzenski”]
blackdown
Umas das primeiras implementações pra linux, nunca me passou confiança… ! alguem usa?[/quote]

A vantagem de utilizar essa versão é que ela é compilada com a GCC
mais recente. As distros mais novas já vem com o gcc 3.2 , mas essa
última versão da Sun foi compilada com a gcc 2.92, o que ocasiona
alguns pequenos inconvenientes nos novos ambientes.

[quote=“cv”]A idéia de usar memoria compartilhada pro JIT foi muito boa, mesmo… será que isso vai entrar na Tiger? :smiley:

[/quote]

ja era previsto para a 1.4.2, e nao entrou/entrara

dizem que estao conversando bastante com a apple para resolver isso, mas algumas pessoas falam q deve ter algo meio nao standard na jogada que vai dar trabalho para implementar

pois é… ia ser maneiro se chegassem num acordo quanto às estruturas de dados dos JITs para as diversas arquiteturas… assim, mesmo tendo VMs diferentes rodando, seria possivel aproveitar o q ja foi JITado, ou ainda fazer um monte de coisa doida - profiling, ou re-otimizar algum codigo, por exemplo :slight_smile:

Posso estar viajando na batatinha, mas que tal isso:

[code]# java MinhaApp
(Ctrl-Z)

bg

jitshm -aggressive

fg[/code]

:smiley:

se é pra viajar pq não algo que o .net tem, ate o mono já implementou, que é offline compile.

javac -off oi.so oi.java
-> oi.so oi.class
javac -off oi.so *.java
-> oi.so *.class

o .so teria o código compilado das classes e tb 1 IR pra ser utilisado com o JITer. Ai sim seria possivel ter 1 warmup legal com java, quase compativel com o de 1 binario nativo.

Viajando ainda mais, poderiamos ter 1 modo --no-dynamic-class-loading
quando todas classes que a aplicação utliza podem ser determinadas estaticamente, permitindo o compilador fazer WPO, Whole Program Optimization.

BTW, alguem sabe de algum projeto ou plano de implementar offline compilation numa JVM?

Não sei de nenhum projeto assim, talvez exceto pelo GCJ, mas é uma boa idéia, de qqer maneira :slight_smile:

Não seria ruim, aliás, bolar um esquema fat-binary (tipo o dos apps MacOS 68k && PPC): um executavel q fosse tanto nativo qto .class :smiley:

não precisa ter 1 class nele
basta ter 1 IR voltado a JITIng, por sinal essa é outra coisa que seria muito legal, um format de arquivo class voltado a JITers e não interpretadores.
Isso foi 1 coisa que o .NET fez de muito estúpido.