SlideShare a Scribd company logo
1 of 50
Download to read offline
#Imergindo na JVM
Otávio Santana
@otaviojava
http://www.java.net/blogs/otaviojava/
http://otaviosantana.blogspot.com.br/
Comunidades
• @javabahia
• @soujava
• @java
• @soujavalivre
Sumário
● Falar da linguagem Java
● Histórico das versões
● Linguagens da JVM
● Tipo de valores para a JVM
● Registradores
● Bytecodes
● Gargage Collector
➢ Uma das linguagens mais usadas no
mundo
➢ Uma comunidade muito forte
➢ Recolhe memória de modo automático
➢ Multi-plataforma
➢ Linguagem
➢ Plataforma
➢ Máquina virtual
Funcionamento externo
• JCP (Java Community Process)
• JSR(Java Specification Requests)
• JEP (JDK Enhancement Proposals)
• JSR 336 = Java 7
1) JSR 203 : ("NIO.2")
2) JSR 292 : Invoke Dynamic
3) JSR 334 :COIN
JEP 174: Nashorn JavaScript Engine
JEP 156: G1 GC: Reduce need for full GCs
Histórico da Plataforma
• Em 1995 foram lançadas betas do Java
• 1.0 em janeiro de 1996 foi a primeira versão estável
• Na 1.1 lançada em fevereiro de 1997
Grande melhorias no evento do AWT
Inner classes, JavaBeans, JDBC , RMI
Reflection
Histórico da Plataforma
• No Java 1.2 de dezembro de 1998
• palavra-chave strictfp, Swing, JIT, Java Plug-in
• Java IDL,Collections framework
• No java 1.3 em maio de 2000
JavaSound, Java Naming and Directory Interface (JNDI),
Java Platform Debugger Architecture (ACDP)
Kestrel
Histórico da Plataforma
• No Java 1.4 fevereiro de 2002
• Primeira com o JCP, NIO, XML, JDBC 3.0, API de Loggin,
assert, expressões regulares
• No java 1.5 setembro de 2004
• Generics, Autoboxing/Unboxing, Varargs, Annotations
Merlin
Histórico da Plataforma
• No Java 1.6 dezembro de 2006
• JDBC 4.0, Rhino, Java Compiler API, API WebServices
• No Java 1.7 julho de 2011
• NIO2, OpenJDK referência, Diamond, Coin
Linguagem, Plataforma, JVM
• Linguagem: if, do, while,Object,
herança
• JSE ( NIO, Collections)
• JVM (Multiplataforma, GC)
Imergindo jvm[Apresentação ]
Class.class Stream
Instruções
Execução
Nativa
Imergindo jvm[Apresentação ]
tipos
•
Primitivos
Nome Tamanho variação Valor padrão Tipo
byte 8-bit -2⁷ até 2⁷ 0 inteiro
short 16-bits -2¹ até 2¹⁵ ⁵ 0 inteiro
integer 32-bits -2³² até 2³¹ 0 inteiro
long 64-bits -2 ³ até 2 ³⁶ ⁶ 0 inteiro
char 16-bits UFT-8 'u0000' inteiro
Float 32-bits 0 flutuante
Double 64-bits 0 flutuante
boolean inteiro false booleano
returnAddress nulo ponteiro
Registradores
• Heap: instâncias
• Method Area: classes
• Pilha Java: métodos java
• Pilha navita: pilhas nativas
• PC Counter: execução
Imergindo jvm[Apresentação ]
PC e Pilha Navita
• PC
• Pilha Nativa
Pilhas Java
• Definida no tempo de
compilação
• Unidade 32 bits
• Byte, short, chart para
int
Operação e
variável
• public int doInscante(int a, double b);
• public static int doClass(int a, double b);
Operação e
variável
• public int doInscante(int a, int b);
• DoInstance(10,20);
Operação e
variável
• public double doInscante(double a, double
b);
• DoInstance(10.10d,20.20);
MethodArea
• O qualified da classe
• O qualified da classe pai
• Informação se é uma classe ou interface
• Os modificadores
• A lista com os qualifieds das interfaces
• Constant Pool (informações dos métodos,
atributos, referência da classe, referência da
ClassLoader)
Code Cache
• Código Compilado pelo
JIT
• Just In TIME (Deixa o
código mais rápido em
tempo de execução o
tranformando em
nativo)
• Junto com o Heap
Estrutura de uma classe
• Magic: #CAFEBABE
• Menor e maior
Estrutura de uma Classe
➢
JDK 1.0 -> major version 45 e minor version 3
➢
JDK 1.1 -> major version 45 e minor version 3
➢
JDK 1.2 -> major version 46 e minor version 0
➢
JDK 1.3 -> major version 47 e minor version 0
➢
JDK 1.4 -> major version 48 e minor version 0
➢
JDK 1.5 -> major version 49 e minor version 0
➢
JDK 1.6 -> major version 50 e minor version 0
➢
JDK 1.7 -> major version 51 e minor version 0
Estrutura de uma Classe
●
ACC_PUBLIC - flag método, atributo públicos
●ACC_PRIVATE - flag para para privados
●ACC_PROTECTED - protected
●ACC_STATIC - stático
●ACC_FINAL - final
●ACC_SYNCHRONIZED - indica um método sincronizado
●ACC_BRIDGE - indica que o método foi gerado pelo compilador
●ACC_VARARGS - indica que é varags
●ACC_NATIVE - nativo
●ACC_ABSTRACT - abstrato
●ACC_STRICT - indica que o método é strict
●ACC_SYNTHETIC - indica que o método não é “original”
Estrutura de uma Classe
●
ACC_PUBLIC - flag método, atributo públicos
●ACC_PRIVATE - flag para para privados
●ACC_PROTECTED - protected
●ACC_STATIC - stático
●ACC_FINAL - final
●ACC_SYNCHRONIZED - indica um método sincronizado
●ACC_BRIDGE - indica que o método foi gerado pelo compilador
●ACC_VARARGS - indica que é varags
●ACC_NATIVE - nativo
●ACC_ABSTRACT - abstrato
●ACC_STRICT - indica que o método é strict
●ACC_SYNTHETIC - indica que o método não é “original”
Constant Pool
●
Métodos
●
Atributos
●
Índice e um vetor
B byte signed byte
C char
D double
F float
I int
J long
L Classname ; referência
S short
Z boolean
[ referência de um vetor
[[ referência de uma matriz
double dobro(double d) =(D)D
Double dobro(Double d) =(Ljava/lang/Double;)Ljava/lang/Double
void processar(Object o)(Ljava/lang/Object;)V
Int somar(int a, float f);=(IF)I
Byte Codes
●
Byte ação ou operação
●
Tipos específicos
●
Byte, short, chart para int
✔i para inteiro
✔l para long
✔s para short
✔b para byte
✔c para char
✔f para float
✔d para double
✔a para referência
Byte Codes
✔ adicionar: iadd, ladd, fadd, dadd.
✔ subtrair: isub, lsub, fsub, dsub.
✔ multiplicar: imul, lmul, fmul, dmul.
✔ divisão: idiv, ldiv, fdiv, ddiv.
✔ resto: irem, lrem, frem, drem.
✔ negação: ineg, lneg, fneg, dneg.
✔ deslocar: ishl, sidh, iushr, lshl, lshr, lushr.
✔ bit a bit 'or': ior, lor.
✔ bit a bit 'and': iand, a terra.
✔ bit a bit ou exclusivo: ixor, lxor.
✔Variável local incremente: iinc.
✔ Comparação: dcmpg, dcmpl, fcmpg, fcmpl, lcmp.
✔Conversão(promoção): i2l, i2f, i2d, l2f, l2d, e f2d
✔Conversão (encurtar): i2b, i2c, i2s, l2i, f2i, f2l, d2i,d2l, e
d2f
Byte Codes
✔invokevirtual - chama um método de uma instância
✔invokeinterface -chama um método de uma interface
✔invokespecial -chamada de um método privado ou da
super classe
✔invokestatic -realiza a chamada de um método estático
✔invokedynamic - método que constrói um objeto
✔ireturn,lreturn, freturn, dreturn e areturn - retorno
✔athrow -exceção
✔monitorenter e monitorexit - sincronizados
Demos
Heap
Instâncias
Gerenciamento de memória
Pool de objetos
Informações da classe
representação do array=n*[referência
Criar Objetos
Carregar o arquivo para a JVM
✔Implementa a interface java.lang.Class
✔ClassLoader: boot-strap, não-definido
✔Linkar: verificar código de segurança, estrutura
✔Chamar o método construtor
Linkar
Objeto
Class Loarder
✔Bootstrap- linguagem (código confiável)
✔Extension – plataforma
✔System – da aplicação
✔Usuario – a gosto do freguês (servidores)
Garbage Collector
✔Coletor de Lixo
✔Mark Sweep
✔Alto tempo
✔Maior collector
Garbage Collector
✔Objetos não duram
✔Alocado logicamente, mas não fisicamente
✔Copiados por gerações
✔Minor collector
Serial
✔Monocore
✔Pequenos dispositivos
✔Pequenas aplicações
✔Multi-core com pequena memória
Paralelo
✔MultiCore
✔Aplicações com Objetos com pouco tempo de Vida
Concorrente
✔MultiCore
✔Objetos com Muito tempo de vida
✔Minimiza o tempo de pausa
✔Menores Pausas com Maior frequência
Concorrente Incremental
Multi-core
Objetos com Muito tempo de vida
Similar ao anterior
Tempo definido no processador
G1
✔MultiCore
✔Grande Volume de Memória
✔Calculo de Objetos vivos
✔Cópia para o espaço em Branco
✔O que ficou é espaço Vazio
✔Prioriza espaço com menor Objetos vivos
OpenJDK
Projeto Open Source
Faça Parte você também
Comece usando
OpenJDK
. (root) configurações comuns para compilar a OpenJDK
hotspot o código fonte para construir o OpenJDK (baseado no fonte do hotspot) Nesse projeto é encontrado as implementações
do GC
langtools o código fonte para o compilador e utilitários para a linguagem
jdk o código fonte da plataforma JSE, por exemplo, java.lang.String, java.lang.Object, etc.
jaxp o projeto JAXP
jaxws o projeto JAX-WS
corba o projeto Corba
nashorn o projeto nashorn
Código Específico para o SO
Códigos comuns ficam em Share
JNI
Interface entre o código Java e o Nativo
Legal para conhecer melhor sobre o
funcionamento( GC, Alocação de memória, IO)
Código Legal em outras linguagens
Comunicar com outras Plataformas
JNI
Tipo em Java Tipo Nativo
boolean jboolean
byte jbyte
char jchar
double jdouble
float jfloat
int jint
long jlong
short jshort
void void
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
javac HelloWorld.java
javah -jni HelloWorld
gcc -o libHelloWorld.so -shared -I$JAVA_HOME/include
-I$JAVA_HOME/linux HelloWorld.c
java -Djava.library.path=. HelloWorld Otávio 4
SouJavaLivre
• Blog:http://soujavalivre.blogspot.com.br/
• Twitter: @soujavalivre
• Página no facebook: soujavalivre
• Lista de discussão:
• http://java.net/projects/javali/lists/openjdk
• Envie um e-mail
para: sympa@javali.java.net com assunto:
lista de discussão openjdk
E-Book
http://www.slideshare.net/otagonsan/imergindo-na-jvm
#Obrigado
Otávio Santana
@otaviojava
http://www.java.net/blogs/otaviojava/
http://otaviosantana.blogspot.com.br/

More Related Content

What's hot

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Resolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerResolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerRodrigo Alves Vieira
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerFrevo on Rails
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiJoao Galdino Mello de Souza
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadMario Guedes
 

What's hot (20)

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
drools + robocode
drools + robocodedrools + robocode
drools + robocode
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Resolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerResolvendo problemas com o Bbundler
Resolvendo problemas com o Bbundler
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o Bundler
 
Robocode
RobocodeRobocode
Robocode
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
Robocode
RobocodeRobocode
Robocode
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
 
52 java
52 java52 java
52 java
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Sistemas Distribuídos - Multithreading
Sistemas Distribuídos - MultithreadingSistemas Distribuídos - Multithreading
Sistemas Distribuídos - Multithreading
 
Erros comuns em java
Erros comuns em javaErros comuns em java
Erros comuns em java
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 

Viewers also liked

Introdução à Linguagem Ruby - Fundamentos
Introdução à Linguagem Ruby - FundamentosIntrodução à Linguagem Ruby - Fundamentos
Introdução à Linguagem Ruby - FundamentosEduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Desenvolvimento web com php parte1
Desenvolvimento web com php parte1Desenvolvimento web com php parte1
Desenvolvimento web com php parte1Eduardo Mendes
 
Movendo o java para Frente- Parte 1
Movendo o java para Frente- Parte 1Movendo o java para Frente- Parte 1
Movendo o java para Frente- Parte 1Otávio Santana
 

Viewers also liked (9)

Ekaaty day 2010
Ekaaty day 2010Ekaaty day 2010
Ekaaty day 2010
 
Introdução à Linguagem Ruby - Fundamentos
Introdução à Linguagem Ruby - FundamentosIntrodução à Linguagem Ruby - Fundamentos
Introdução à Linguagem Ruby - Fundamentos
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Desenvolvimento web com php parte1
Desenvolvimento web com php parte1Desenvolvimento web com php parte1
Desenvolvimento web com php parte1
 
Javaonebrasil2010
Javaonebrasil2010Javaonebrasil2010
Javaonebrasil2010
 
Movendo o java para Frente- Parte 1
Movendo o java para Frente- Parte 1Movendo o java para Frente- Parte 1
Movendo o java para Frente- Parte 1
 
GWT revista espirito
GWT revista espiritoGWT revista espirito
GWT revista espirito
 
Porque java
Porque javaPorque java
Porque java
 

Similar to Imergindo jvm[Apresentação ]

Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotFabiano Santos
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
Ruby & GCs (versão 2.1.2) - VI Secot UFScar Sorocaba
Ruby & GCs (versão 2.1.2) - VI Secot UFScar SorocabaRuby & GCs (versão 2.1.2) - VI Secot UFScar Sorocaba
Ruby & GCs (versão 2.1.2) - VI Secot UFScar SorocabaFabio Akita
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaCDS
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias IncluídasJonh Edson
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de MemóriaCDS
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLRaul Oliveira
 

Similar to Imergindo jvm[Apresentação ] (20)

Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpot
 
Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
Ruby & GCs (versão 2.1.2) - VI Secot UFScar Sorocaba
Ruby & GCs (versão 2.1.2) - VI Secot UFScar SorocabaRuby & GCs (versão 2.1.2) - VI Secot UFScar Sorocaba
Ruby & GCs (versão 2.1.2) - VI Secot UFScar Sorocaba
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
ANTLR & ANTTLRWorks
ANTLR & ANTTLRWorksANTLR & ANTTLRWorks
ANTLR & ANTTLRWorks
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de Memória
 
Nosql4java
Nosql4javaNosql4java
Nosql4java
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias Incluídas
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de Memória
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Automatizando Nmap com NSE
Automatizando Nmap com NSEAutomatizando Nmap com NSE
Automatizando Nmap com NSE
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 

More from Otávio Santana

NoSQL design pitfalls with Java
NoSQL design pitfalls with JavaNoSQL design pitfalls with Java
NoSQL design pitfalls with JavaOtávio Santana
 
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Otávio Santana
 
Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Otávio Santana
 
Arquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaArquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaOtávio Santana
 
Build, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endBuild, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endOtávio Santana
 
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudJakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudOtávio Santana
 
ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?Otávio Santana
 
Jakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeJakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeOtávio Santana
 
Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Otávio Santana
 
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Otávio Santana
 
Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Otávio Santana
 
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Otávio Santana
 
The new generation of data persistence with graph
The new generation of data persistence with graphThe new generation of data persistence with graph
The new generation of data persistence with graphOtávio Santana
 
Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Otávio Santana
 
Stateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaStateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaOtávio Santana
 
Stateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoStateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoOtávio Santana
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseEclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseOtávio Santana
 
Management 3.0 and open source
Management 3.0 and open sourceManagement 3.0 and open source
Management 3.0 and open sourceOtávio Santana
 
Building a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEBuilding a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEOtávio Santana
 

More from Otávio Santana (20)

NoSQL design pitfalls with Java
NoSQL design pitfalls with JavaNoSQL design pitfalls with Java
NoSQL design pitfalls with Java
 
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
 
Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]
 
Arquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaArquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com Java
 
Build, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endBuild, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to end
 
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudJakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
 
ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?
 
Jakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeJakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud Age
 
Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0
 
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
 
Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]
 
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
 
The new generation of data persistence with graph
The new generation of data persistence with graphThe new generation of data persistence with graph
The new generation of data persistence with graph
 
Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11
 
Stateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaStateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - Guatemala
 
Stateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoStateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - Mexico
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseEclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
 
Polyglot persistence
Polyglot persistencePolyglot persistence
Polyglot persistence
 
Management 3.0 and open source
Management 3.0 and open sourceManagement 3.0 and open source
Management 3.0 and open source
 
Building a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEBuilding a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EE
 

Imergindo jvm[Apresentação ]

  • 1. #Imergindo na JVM Otávio Santana @otaviojava http://www.java.net/blogs/otaviojava/ http://otaviosantana.blogspot.com.br/
  • 3. Sumário ● Falar da linguagem Java ● Histórico das versões ● Linguagens da JVM ● Tipo de valores para a JVM ● Registradores ● Bytecodes ● Gargage Collector
  • 4. ➢ Uma das linguagens mais usadas no mundo ➢ Uma comunidade muito forte ➢ Recolhe memória de modo automático ➢ Multi-plataforma ➢ Linguagem ➢ Plataforma ➢ Máquina virtual
  • 5. Funcionamento externo • JCP (Java Community Process) • JSR(Java Specification Requests) • JEP (JDK Enhancement Proposals) • JSR 336 = Java 7 1) JSR 203 : ("NIO.2") 2) JSR 292 : Invoke Dynamic 3) JSR 334 :COIN JEP 174: Nashorn JavaScript Engine JEP 156: G1 GC: Reduce need for full GCs
  • 6. Histórico da Plataforma • Em 1995 foram lançadas betas do Java • 1.0 em janeiro de 1996 foi a primeira versão estável • Na 1.1 lançada em fevereiro de 1997 Grande melhorias no evento do AWT Inner classes, JavaBeans, JDBC , RMI Reflection
  • 7. Histórico da Plataforma • No Java 1.2 de dezembro de 1998 • palavra-chave strictfp, Swing, JIT, Java Plug-in • Java IDL,Collections framework • No java 1.3 em maio de 2000 JavaSound, Java Naming and Directory Interface (JNDI), Java Platform Debugger Architecture (ACDP) Kestrel
  • 8. Histórico da Plataforma • No Java 1.4 fevereiro de 2002 • Primeira com o JCP, NIO, XML, JDBC 3.0, API de Loggin, assert, expressões regulares • No java 1.5 setembro de 2004 • Generics, Autoboxing/Unboxing, Varargs, Annotations Merlin
  • 9. Histórico da Plataforma • No Java 1.6 dezembro de 2006 • JDBC 4.0, Rhino, Java Compiler API, API WebServices • No Java 1.7 julho de 2011 • NIO2, OpenJDK referência, Diamond, Coin
  • 10. Linguagem, Plataforma, JVM • Linguagem: if, do, while,Object, herança • JSE ( NIO, Collections) • JVM (Multiplataforma, GC)
  • 15. Primitivos Nome Tamanho variação Valor padrão Tipo byte 8-bit -2⁷ até 2⁷ 0 inteiro short 16-bits -2¹ até 2¹⁵ ⁵ 0 inteiro integer 32-bits -2³² até 2³¹ 0 inteiro long 64-bits -2 ³ até 2 ³⁶ ⁶ 0 inteiro char 16-bits UFT-8 'u0000' inteiro Float 32-bits 0 flutuante Double 64-bits 0 flutuante boolean inteiro false booleano returnAddress nulo ponteiro
  • 16. Registradores • Heap: instâncias • Method Area: classes • Pilha Java: métodos java • Pilha navita: pilhas nativas • PC Counter: execução
  • 18. PC e Pilha Navita • PC • Pilha Nativa
  • 19. Pilhas Java • Definida no tempo de compilação • Unidade 32 bits • Byte, short, chart para int
  • 20. Operação e variável • public int doInscante(int a, double b); • public static int doClass(int a, double b);
  • 21. Operação e variável • public int doInscante(int a, int b); • DoInstance(10,20);
  • 22. Operação e variável • public double doInscante(double a, double b); • DoInstance(10.10d,20.20);
  • 23. MethodArea • O qualified da classe • O qualified da classe pai • Informação se é uma classe ou interface • Os modificadores • A lista com os qualifieds das interfaces • Constant Pool (informações dos métodos, atributos, referência da classe, referência da ClassLoader)
  • 24. Code Cache • Código Compilado pelo JIT • Just In TIME (Deixa o código mais rápido em tempo de execução o tranformando em nativo) • Junto com o Heap
  • 25. Estrutura de uma classe • Magic: #CAFEBABE • Menor e maior
  • 26. Estrutura de uma Classe ➢ JDK 1.0 -> major version 45 e minor version 3 ➢ JDK 1.1 -> major version 45 e minor version 3 ➢ JDK 1.2 -> major version 46 e minor version 0 ➢ JDK 1.3 -> major version 47 e minor version 0 ➢ JDK 1.4 -> major version 48 e minor version 0 ➢ JDK 1.5 -> major version 49 e minor version 0 ➢ JDK 1.6 -> major version 50 e minor version 0 ➢ JDK 1.7 -> major version 51 e minor version 0
  • 27. Estrutura de uma Classe ● ACC_PUBLIC - flag método, atributo públicos ●ACC_PRIVATE - flag para para privados ●ACC_PROTECTED - protected ●ACC_STATIC - stático ●ACC_FINAL - final ●ACC_SYNCHRONIZED - indica um método sincronizado ●ACC_BRIDGE - indica que o método foi gerado pelo compilador ●ACC_VARARGS - indica que é varags ●ACC_NATIVE - nativo ●ACC_ABSTRACT - abstrato ●ACC_STRICT - indica que o método é strict ●ACC_SYNTHETIC - indica que o método não é “original”
  • 28. Estrutura de uma Classe ● ACC_PUBLIC - flag método, atributo públicos ●ACC_PRIVATE - flag para para privados ●ACC_PROTECTED - protected ●ACC_STATIC - stático ●ACC_FINAL - final ●ACC_SYNCHRONIZED - indica um método sincronizado ●ACC_BRIDGE - indica que o método foi gerado pelo compilador ●ACC_VARARGS - indica que é varags ●ACC_NATIVE - nativo ●ACC_ABSTRACT - abstrato ●ACC_STRICT - indica que o método é strict ●ACC_SYNTHETIC - indica que o método não é “original”
  • 29. Constant Pool ● Métodos ● Atributos ● Índice e um vetor B byte signed byte C char D double F float I int J long L Classname ; referência S short Z boolean [ referência de um vetor [[ referência de uma matriz double dobro(double d) =(D)D Double dobro(Double d) =(Ljava/lang/Double;)Ljava/lang/Double void processar(Object o)(Ljava/lang/Object;)V Int somar(int a, float f);=(IF)I
  • 30. Byte Codes ● Byte ação ou operação ● Tipos específicos ● Byte, short, chart para int ✔i para inteiro ✔l para long ✔s para short ✔b para byte ✔c para char ✔f para float ✔d para double ✔a para referência
  • 31. Byte Codes ✔ adicionar: iadd, ladd, fadd, dadd. ✔ subtrair: isub, lsub, fsub, dsub. ✔ multiplicar: imul, lmul, fmul, dmul. ✔ divisão: idiv, ldiv, fdiv, ddiv. ✔ resto: irem, lrem, frem, drem. ✔ negação: ineg, lneg, fneg, dneg. ✔ deslocar: ishl, sidh, iushr, lshl, lshr, lushr. ✔ bit a bit 'or': ior, lor. ✔ bit a bit 'and': iand, a terra. ✔ bit a bit ou exclusivo: ixor, lxor. ✔Variável local incremente: iinc. ✔ Comparação: dcmpg, dcmpl, fcmpg, fcmpl, lcmp. ✔Conversão(promoção): i2l, i2f, i2d, l2f, l2d, e f2d ✔Conversão (encurtar): i2b, i2c, i2s, l2i, f2i, f2l, d2i,d2l, e d2f
  • 32. Byte Codes ✔invokevirtual - chama um método de uma instância ✔invokeinterface -chama um método de uma interface ✔invokespecial -chamada de um método privado ou da super classe ✔invokestatic -realiza a chamada de um método estático ✔invokedynamic - método que constrói um objeto ✔ireturn,lreturn, freturn, dreturn e areturn - retorno ✔athrow -exceção ✔monitorenter e monitorexit - sincronizados
  • 33. Demos
  • 34. Heap Instâncias Gerenciamento de memória Pool de objetos Informações da classe representação do array=n*[referência
  • 35. Criar Objetos Carregar o arquivo para a JVM ✔Implementa a interface java.lang.Class ✔ClassLoader: boot-strap, não-definido ✔Linkar: verificar código de segurança, estrutura ✔Chamar o método construtor Linkar Objeto
  • 36. Class Loarder ✔Bootstrap- linguagem (código confiável) ✔Extension – plataforma ✔System – da aplicação ✔Usuario – a gosto do freguês (servidores)
  • 37. Garbage Collector ✔Coletor de Lixo ✔Mark Sweep ✔Alto tempo ✔Maior collector
  • 38. Garbage Collector ✔Objetos não duram ✔Alocado logicamente, mas não fisicamente ✔Copiados por gerações ✔Minor collector
  • 41. Concorrente ✔MultiCore ✔Objetos com Muito tempo de vida ✔Minimiza o tempo de pausa ✔Menores Pausas com Maior frequência
  • 42. Concorrente Incremental Multi-core Objetos com Muito tempo de vida Similar ao anterior Tempo definido no processador
  • 43. G1 ✔MultiCore ✔Grande Volume de Memória ✔Calculo de Objetos vivos ✔Cópia para o espaço em Branco ✔O que ficou é espaço Vazio ✔Prioriza espaço com menor Objetos vivos
  • 44. OpenJDK Projeto Open Source Faça Parte você também Comece usando
  • 45. OpenJDK . (root) configurações comuns para compilar a OpenJDK hotspot o código fonte para construir o OpenJDK (baseado no fonte do hotspot) Nesse projeto é encontrado as implementações do GC langtools o código fonte para o compilador e utilitários para a linguagem jdk o código fonte da plataforma JSE, por exemplo, java.lang.String, java.lang.Object, etc. jaxp o projeto JAXP jaxws o projeto JAX-WS corba o projeto Corba nashorn o projeto nashorn Código Específico para o SO Códigos comuns ficam em Share
  • 46. JNI Interface entre o código Java e o Nativo Legal para conhecer melhor sobre o funcionamento( GC, Alocação de memória, IO) Código Legal em outras linguagens Comunicar com outras Plataformas
  • 47. JNI Tipo em Java Tipo Nativo boolean jboolean byte jbyte char jchar double jdouble float jfloat int jint long jlong short jshort void void JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/ javac HelloWorld.java javah -jni HelloWorld gcc -o libHelloWorld.so -shared -I$JAVA_HOME/include -I$JAVA_HOME/linux HelloWorld.c java -Djava.library.path=. HelloWorld Otávio 4
  • 48. SouJavaLivre • Blog:http://soujavalivre.blogspot.com.br/ • Twitter: @soujavalivre • Página no facebook: soujavalivre • Lista de discussão: • http://java.net/projects/javali/lists/openjdk • Envie um e-mail para: sympa@javali.java.net com assunto: lista de discussão openjdk