SlideShare a Scribd company logo
1 of 29
Dr. “Java Virtual         Machine”

              Otávio Fernandes
     otavio.fernandes@locaweb.com.br
         http://blog.emresumo.com/
Ou...
Como eu aprendi a parar de
 odiar Java e Amar a JVM
OMG! Ele disse
 “ódio”. Vamos ter
que inventar um novo
   Design Pattern.
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”;
É fato, existem inúmeros códigos
extremamente competentes em Java.

  Todas as plataformas implicam em
              limitações.
O futuro da
        linguagem Java?

• Compatibilidade com as versões anteriores;
• Apenas bug-fixes, poucas features;
• E assim, é cada vez mais difícil prosseguir;
Reinvento do “Java”

• 1993: Oak se transforma em Java;
• 2009: JVM é plataforma para (n+1)
  linguagens;


• Java está caminhando para ser o novo
  “Cobol”;
Aproveitar os excelentes códigos que já
   foram feitos e estão há anos em
        produção. Estabilidade.
JVM
“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;
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;
A Oracle/Sun afirma que a
JVM tem mais de 4.5 bilhões
      de instâncias.
Como a JVM trabalha?
Conjunto de Instruções
 •   Load/store;
 •   Arithmetic;
 •   Type conversion;
 •   Object creation and manipulation;
 •   Operand stack management (push/pop);
 •   Control transfer (branching);
 •   Method invocation and return;
 •   Throwing exceptions;
 •   Monitor-based concurrency;
No final, tudo se
resume ao Java Bytecode...
Java Bytecode
0 aload_0
1 invokespecial #3 <Method java.lang.Object()>
4 aload_0
5 aload_1
6 putfield #5 <Field java.lang.String name>
9 aload_0
10 iload_2
11 putfield #4 <Field int idNumber>
14 aload_0
15 aload_1
16 iload_2
17 invokespecial #6 <Method void storeData(java.lang.String, int)>
20 return
No seu cerne a JVM é dinâmica.
A melhor parte da JVM
Está sendo utilizada para
 outras linguagens. Mais
   modernas, outros
       paradigmas.
Exemplos:

• JRuby;
• Scala;
• Clojure;
• e muitas outras...
JRuby
Chamada as APIs do Java.
 Isso indica que eu poderia testar as
minhas aplicações Java (legadas ou não)
       com RSpec, por exemplo.
Implementação do
         JRuby:
• Predominantemente Java;
• A parte dinâmica do Ruby veio a partir de
  Reflections;
• Workarrounds:
 • Stripping Types;
 • Boxing Types;
 • Boxing Arrays;
Chamadas Reflexivas são sempre mais
lentas do que as convencionais, apesar
   de toda a evolução da JVM para
            melhorar isso.
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;
Obrigado.
Perguntas?
Agradecimentos especiais:

                      “Stanley Kubrick”
             William Markito (Ericsson)
                  Fábio Kung (Locaweb)
             Maurício Aniche (Locaweb)
               Ricardo Ruiz (Locaweb)

More Related Content

What's hot

Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
T07_LM3: Eventos em Javascript (2013-2014)
T07_LM3: Eventos em Javascript (2013-2014)T07_LM3: Eventos em Javascript (2013-2014)
T07_LM3: Eventos em Javascript (2013-2014)Carlos Santos
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...Gleicon Moraes
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma JavaEteg
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...Gleicon Moraes
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
QCon 2011
QCon 2011QCon 2011
QCon 2011Ismael
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem PráticaEder Magalhães
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVMSergio Lopes
 

What's hot (13)

Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
T07_LM3: Eventos em Javascript (2013-2014)
T07_LM3: Eventos em Javascript (2013-2014)T07_LM3: Eventos em Javascript (2013-2014)
T07_LM3: Eventos em Javascript (2013-2014)
 
Jugvale
JugvaleJugvale
Jugvale
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
QCon 2011
QCon 2011QCon 2011
QCon 2011
 
Visão geral type script
Visão geral type scriptVisão geral type script
Visão geral type script
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVM
 

Viewers also liked

Viewers also liked (20)

Dedicatórias
DedicatóriasDedicatórias
Dedicatórias
 
P E 4
P    E  4P    E  4
P E 4
 
Cultura La Paz Entre Ríos: Dos años de gestión
Cultura La Paz Entre Ríos: Dos años de gestiónCultura La Paz Entre Ríos: Dos años de gestión
Cultura La Paz Entre Ríos: Dos años de gestión
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1
 
Primavera
PrimaveraPrimavera
Primavera
 
Energia Fotovoltaica
Energia FotovoltaicaEnergia Fotovoltaica
Energia Fotovoltaica
 
69515 Um Dia No C
69515 Um Dia No C69515 Um Dia No C
69515 Um Dia No C
 
Centrais Termoelectricas
Centrais TermoelectricasCentrais Termoelectricas
Centrais Termoelectricas
 
Perfil República Dominicana
Perfil República DominicanaPerfil República Dominicana
Perfil República Dominicana
 
20120711 wum ss用
20120711 wum ss用20120711 wum ss用
20120711 wum ss用
 
Trigonometria
TrigonometriaTrigonometria
Trigonometria
 
Palavra a moeda e o vaso
Palavra   a moeda e o vaso Palavra   a moeda e o vaso
Palavra a moeda e o vaso
 
Copia de spot
Copia de spotCopia de spot
Copia de spot
 
Teste Convite
Teste ConviteTeste Convite
Teste Convite
 
eraispena
eraispenaeraispena
eraispena
 
Trigonometria ciclo e relações
Trigonometria  ciclo e relaçõesTrigonometria  ciclo e relações
Trigonometria ciclo e relações
 
2014 hradec kralove
2014   hradec kralove2014   hradec kralove
2014 hradec kralove
 
Leseprobe webtexten
Leseprobe webtextenLeseprobe webtexten
Leseprobe webtexten
 
As Fases Da Lua
As Fases Da LuaAs Fases Da Lua
As Fases Da Lua
 
Daniel Marx Couto
Daniel Marx CoutoDaniel Marx Couto
Daniel Marx Couto
 

Similar to JVM: Como aprendi a amar a máquina virtual Java

Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte I
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IMeetup ScalaCamp Curitiba, Fevereiro de 2017, Parte I
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IMauricio Fernandes de Castro
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Flame Graphs, uma (boa) alternativa para profiling de apps Java
Flame Graphs, uma (boa) alternativa para profiling de apps JavaFlame Graphs, uma (boa) alternativa para profiling de apps Java
Flame Graphs, uma (boa) alternativa para profiling de apps JavaPT.JUG
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parecejesuinoPower
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01Daniel Alves
 

Similar to JVM: Como aprendi a amar a máquina virtual Java (20)

Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Por dentro da jvm
Por dentro da jvmPor dentro da jvm
Por dentro da jvm
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
Groovy stack
Groovy stackGroovy stack
Groovy stack
 
Imergindo na JVM
Imergindo na JVMImergindo na JVM
Imergindo na JVM
 
I mini curso e torneio robocode.pptx
I mini curso e torneio  robocode.pptxI mini curso e torneio  robocode.pptx
I mini curso e torneio robocode.pptx
 
Introdução ao java
Introdução ao javaIntrodução ao java
Introdução ao java
 
Sistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOASistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOA
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte I
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IMeetup ScalaCamp Curitiba, Fevereiro de 2017, Parte I
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte I
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Flame Graphs, uma (boa) alternativa para profiling de apps Java
Flame Graphs, uma (boa) alternativa para profiling de apps JavaFlame Graphs, uma (boa) alternativa para profiling de apps Java
Flame Graphs, uma (boa) alternativa para profiling de apps Java
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 

JVM: Como aprendi a amar a máquina virtual Java

  • 1. Dr. “Java Virtual Machine” Otávio Fernandes otavio.fernandes@locaweb.com.br http://blog.emresumo.com/
  • 3. Como eu aprendi a parar de odiar Java e Amar a JVM
  • 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”;
  • 9. Aproveitar os excelentes códigos que já foram feitos e estão há anos em produção. Estabilidade.
  • 10. JVM
  • 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;
  • 13. A Oracle/Sun afirma que a JVM tem mais de 4.5 bilhões de instâncias.
  • 14. Como a JVM trabalha?
  • 15. Conjunto de Instruções • Load/store; • Arithmetic; • Type conversion; • Object creation and manipulation; • Operand stack management (push/pop); • Control transfer (branching); • Method invocation and return; • Throwing exceptions; • Monitor-based concurrency;
  • 16. No final, tudo se resume ao Java Bytecode...
  • 17. Java Bytecode 0 aload_0 1 invokespecial #3 <Method java.lang.Object()> 4 aload_0 5 aload_1 6 putfield #5 <Field java.lang.String name> 9 aload_0 10 iload_2 11 putfield #4 <Field int idNumber> 14 aload_0 15 aload_1 16 iload_2 17 invokespecial #6 <Method void storeData(java.lang.String, int)> 20 return
  • 18. No seu cerne a JVM é dinâmica.
  • 19. A melhor parte da JVM
  • 20. Está sendo utilizada para outras linguagens. Mais modernas, outros paradigmas.
  • 21. Exemplos: • JRuby; • Scala; • Clojure; • e muitas outras...
  • 22. JRuby
  • 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;
  • 29. Agradecimentos especiais: “Stanley Kubrick” William Markito (Ericsson) Fábio Kung (Locaweb) Maurício Aniche (Locaweb) Ricardo Ruiz (Locaweb)