O documento discute como o autor aprendeu a apreciar a máquina virtual Java (JVM) apesar de inicialmente odiar a linguagem Java. A JVM oferece excelentes recursos como o coletor de lixo automático e compilação just-in-tempo que tornam possível executar várias linguagens além de Java, como Ruby e Clojure. Apesar das limitações da linguagem Java, a JVM continua se adaptando para dar suporte a novas funcionalidades e paradigmas de programação.
4. OMG! Ele disse
“ódio”. Vamos ter
que inventar um novo
Design Pattern.
5. Porque “ódio” ao Java?
• Em primeiro lugar: Sarcasmo (ponto);
• Escreve-se mais do que o necessário;
• Necessidade imposta de uma IDE;
• Padrões impostos;
• Foco na plataforma e não no programador;
• Complexidade/Excesso dos Frameworks;
• Excessivamente “Enterprise”;
6. É fato, existem inúmeros códigos
extremamente competentes em Java.
Todas as plataformas implicam em
limitações.
7. O futuro da
linguagem Java?
• Compatibilidade com as versões anteriores;
• Apenas bug-fixes, poucas features;
• E assim, é cada vez mais difícil prosseguir;
8. Reinvento do “Java”
• 1993: Oak se transforma em Java;
• 2009: JVM é plataforma para (n+1)
linguagens;
• Java está caminhando para ser o novo
“Cobol”;
11. “Amor” a JVM
• Excelente Garbage Collector;
• HotSpot (foi comprado da LLC, para a v1.3);
• JIT (Just in Time) Compilation;
• Disponível em N plataformas e Java Cards;
• Adaptive Optimization (Hot Spots);
• Threads (das boas!);
• Startup Time Delay;
12. Otimizações na JVM
• Destaques:
• Gerações da Memória HEAP (onde estão
os objetos);
• Teoria da Mortalidade Infantil;
• JIT;
• Hot Spots;
• Startup Time Delay;
23. Chamada as APIs do Java.
Isso indica que eu poderia testar as
minhas aplicações Java (legadas ou não)
com RSpec, por exemplo.
24. Implementação do
JRuby:
• Predominantemente Java;
• A parte dinâmica do Ruby veio a partir de
Reflections;
• Workarrounds:
• Stripping Types;
• Boxing Types;
• Boxing Arrays;
25. Chamadas Reflexivas são sempre mais
lentas do que as convencionais, apesar
de toda a evolução da JVM para
melhorar isso.
26. Porem, no Java 7...
• Da Vinci Machine ou MLVM (Multi Language
Virtual Machine);
• Instrução do “invokedynamic”;
• JSR 292;
• Suporte nativo as linguagens dinâmicas;