Java por
dentro
   @paulo_caelum
   Paulo Silveira
   paulo.silveira@caelum.com.br
Quem é
   Paulo
Silveira?
como minha mãe me vê
como minha mãe me vê   como meus estagiários
                            me vêem
como minha mãe me vê   como meus estagiários
                            me vêem




   como eu me vejo
como minha mãe me vê   como meus estagiários
                            me vêem




   como eu me vejo     como sou na verdade
Linguagem Java
-   O.O.
-   bibliotecas
-   parece C++
-   vários SOs
PLATAFORMA
Linguagem Java
PLATAFORMA JAVA
-   Portável
-   Facil
-   Segura
-   Onipresente
Máquina Virtual Java
Máquina Virtual Java

    Código


   Executável


    Windows
Máquina Virtual Java

 Código       Código       Código


Executável   Executável   Executável


  Linux       Windows        Mac
Máquina Virtual Java

             Código


           “Executável”




Linux       Windows       Mac
Máquina Virtual Java

                Código


             “Executável”

         Máquina Virtual Java JVM


Linux          Windows              Mac
Máquina Virtual Java

                Código         linguagem Java


             “Executável”      bytecode Java


         Máquina Virtual Java JVM


Linux          Windows              Mac
Bytecode????

CAFEBABE0003101DA060F90100118012A013014701570161063C696E69743E1032829
56104436F646510F4C696E654E756D6265725461626C651046D61696E1016285B4C6A
6176612F6C616E672F537472696E673B295610A536F7572636546696C6510A48656C6
C6F2E6A617661C07087017C01801910C6F6C612062797465636F6465701AC01B01C10
548656C6C6F10106A6176612F6C616E672F4F626A65637410106A6176612F6C616E67
2F53797374656D1036F757410154C6A6176612F696F2F5072696E7453747265616D3B
10136A6176612F696F2F5072696E7453747265616D1077072696E746C6E1015284C6A
6176612F6C616E672F537472696E673B2956021050600000201070801090001D01010
0052AB701B100010A0006010001090B0C01090002502010009B202123B604B100010A
000A0200030804010D00020E
Bytecode????
          B1 = lreturn
            12= ldc
         256 opcodes!

 http://java.sun.com/docs/books/jvms/
second_edition/html/Mnemonics.doc.html
Bytecode????
Compiled from "Onibus.java"
class Teste {
                                                      bytecode
    public static void main(java.lang.String);
      Code:
         0: new           #2 // class Onibus
         3: dup
         4: invokespecial #3 Onibus."<init>":()V
         7: astore_1
         8: aload_1
         9: ldc           #4 // String Jabaquara...
        11: putfield      #5
          // Field Onibus.linha:Ljava/lang/String;
                                                        Mac
        14: return
}
Bytecode????
Compiled from "Onibus.java"
class Teste {
                                                      bytecode
    public static void main(java.lang.String);
      Code:
         0: new           #2 // class Onibus
         3: dup
         4: invokespecial #3 Onibus."<init>":()V        JVM
         7: astore_1
         8: aload_1
         9: ldc           #4 // String Jabaquara...
        11: putfield      #5
          // Field Onibus.linha:Ljava/lang/String;
                                                        Mac
        14: return
}
Java, ufa!

public class Onibus {
	 String nome;
	 String linha;
}

class Teste {
	 public static void main(String args) {
	 	 Onibus o = new Onibus();
	 	 o.linha = "Jabaquara-Liberdade";
	 }
}
Paulo! Então esse tal de Java
                      é lento?




                 traduzir bytecode
                       toda hora!!!
for (int x = 0; x < 100; x++) {
   delete(x);
}
inc   x;
jmp   delete;
cmp   x, 100;
jmp   for;

                Como fazer melhor?
inc   x;
jmp   delete;
inc   x;
jmp   delete;
inc   x;
jmp   delete;
inc   x;
jmp   delete;
...
cmp   x, 100;
jmp   for
for (int x = 0; x < 100; x+=10) {
   delete(x);
   delete(x+1);
   delete(x+2);
   delete(x+3);
   delete(x+4);
   delete(x+5);
   delete(x+6);
   delete(x+7);
   delete(x+8);
   delete(x+9);
}
for (int x = 0; x < 100; x+=10) {
   delete(x);
   delete(x+1);
   delete(x+2);
   delete(x+3);
   delete(x+4);
   delete(x+5);
   delete(x+6);
   delete(x+7); O que seu chefe fará
   delete(x+8);   ao ver esse código?
   delete(x+9);
}
Chega de bla bla bla
 1 1 2 3 5 8 13 21

-XX:+PrintCompilation
Máquina Virtual Java

           Multi-plataforma
 Gerenciamento de memória
                 Segurança
                   Sandbox
               Otimizações
              JIT Compiler
  +rápida que estática?
IBM JVM?
 Oracle JVM?

 Especificação
      x
Implementação
PLATAFORMA JAVA
1. Maquina Virtual - JVM
2. Bibliotecas - api
3. Linguagem
    Java
PLATAFORMA JAVA
1. Maquina Virtual - JVM
2. Bibliotecas - api
3. Linguagem
    Java
PLATAFORMA JAVA
1. Maquina Virtual - JVM
2. Bibliotecas - api
            ns
3. Linguagem
    Java
Máquina Virtual Java

 Ruby        Scala    Python    Groovy

Clojure
                 bytecode      ?Android?




   Linux         Windows       Mac
Máquina Virtual Java

 Ruby        Scala        Python        Groovy

Clojure
                  bytecode             ?Android?

            Máquina Virtual Java JVM


   Linux          Windows              Mac
Por que tanto Java?

• Sistemas heterogêneos
• Em todos os lugares
• Concorrência
• Você vai usar a JVM
• Importante conhecê-la profundamente
Obrigado!


                  Paulo Silveira
  paulo.silveira@caelum.com.br

Plataforma java: detalhes da JVM