Performance no Java

Todos desejamos performance nas nossas aplicações. No Java e apesar de alguns dizerem que é mais rápido que C++ isto nem sempre é verdade, mas vou falar disso noutra altura. Hoje o que queria colocar aqui é uma ajuda para quem tem que trabalhar com Java. Em vez de correr a JVM client o melhor para performance é mesmo correr a JVM server. Para isso terá que utilizar o terminal e correr os programas da seguinte forma

java -server -jar programa.jar

Ora para não ter que andar sempre a adicionar -server no terminal, o melhor é colocar o -server como default. Para isso basta editar o ficheiro jvm.cfg (que é um ficheiro de texto simples) e onde está:

-client KNOWN -server KNOWN

é só trocar a ordem para:

-server KNOWN -client KNOWN

Assim tudo o que for java vai correr na JVM server e só se chamarmos explicitamente a versão client é que será corrida aí.

Ganhos de performance? Sim bastante notáveis. Estive a experimentar calcular uma série de Fibonacci e posso dizer que o tempo de execução foi em média:

-client: 540ms -server: 397ms

o que dá para o mesmo programa um ganho de 143ms ou cerca de 26%, nada mau. O downside? Tradicionalmente o JVM -server demora um pouco mais a arrancar e come mais memória, mas se depois se tornar mais rápido… para quê queixarmo-nos…

no Mac OS X Tiger o jvm.cfg está em /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/jvm.cfg

Bem, por curiosidade o mesmo cálculo em C sem optimizações demorou 810ms e com optimizações -O3 cerca de 260ms. Mas como disse estas discussões são para outra altura.

iPhone sem Java um Erro?

laggos_270201739255.jpg

Java for iPhone urged by Sun official | InfoWorld | News | 2007-09-26 | By Paul Krill: “The Java platform may run on 2 billion handheld phones, but not on Apple’s trendy new iPhone. Apple’s stance was called a mistake by a Sun Microsystems executive Wednesday at the AJAXWorld conference in Santa Clara”

O erro será do ponto de vista de todos os que são externos à Apple. E porque é que para a Apple não é um erro? Não será certamente pelo risco de uma aplicação deitar abaixo toda a rede da AT&T.

A realidade é que tudo dependerá do controlo. Enquanto a Apple tiver o controlo total sobre o aparelho, poderá estabelecer parecerias comerciais a seu belo prazer, como por exemplo a recente com o Starbucks. No dia em que permitir que outras tecnologias se instalem no seu aparelho deixa de ter o poder de negociar acordos de exclusividade com algumas marcas que se queiram associar ao Elan da Apple através dos seus produtos.

A instalação de suporte Java no iPhone seria mesmo o pior que Apple poderia fazer em termos de controlo (pior, para a própria Apple, está claro), ainda para mais numa altura em que não há uma plataforma de desenvolvimento (SDK) pública para o iPhone. Ora entre o que os developers querem… e a Sun ultimamente quer muito da Apple (o ZFS, o Java no iPhone… ) e o que Apple quer (dinheiro) vai uma distância muito grande.

Jogando Lemmings!

A Universidade de Oxford produziu um emulador de x86 em Java e tem online um Demo desta máquina virtual a correr DOS (FreeDOS), mas a grande vantagem é que se alguém quiser matar saudades de jogar alguns jogos clássicos, esta máquina inclui no disco C:

Space Invaders

Lemmings

Prince of Persia

Super Mario

PacMan

King Kong

Ok, já chega de saudades… vamos lá voltar para a realidade…

Modelo Bak-Sneppen

Andámos todos de volta do modelo do Merton, que nem tive tempo para outras coisas, mas agora que a entrega no passado, pus-me a brincar com o modelo Bak-Sneppen, falado na aula de Matemática. Queria ver o boneco a funcionar… e depois de o implementar, não é que funciona?

Bak-Sneppen

Para quem quiser experimentar, criei o projecto no NetBeans e podem fazer download do projecto para o correr no vosso computador.