dalvikvm e jvm (victor nascimento)

46
http://bit.ly/2f9NeLy https://speakerdeck.com/victornascimento/ dalvikvm-e-jvm

Upload: concrete-solutions

Post on 09-Jan-2017

112 views

Category:

Technology


0 download

TRANSCRIPT

http://bit.ly/2f9NeLy

https://speakerdeck.com/victornascimento/dalvikvm-e-jvm

DalvikVM e JVM Cadê meu Java?

Victor Nascimentovictor.nascimento <at> concretesolutions.com.br

Gerente de Engenharia Android

Quando eu comecei...

- Background Javeiro

- Algumas brincadeiras com Swing™

- Não existia Java FX™

- Acreditava que Java era a melhor coisa já

inventada pela humanidade

- Me disseram que Android == Java

Android == Java?

?==

Dalvik VM == Java VM?

Um pequeno exemplo...

Javac -> JVM

Javac -> DX -> DalvikVM

Dalvik VM == Java VM??????

WTH is JVM?

Java Virtual Machine

- Máquina virtual de pilha (stack)

- Carrega e interpreta arquivos .class

- Possui JIT (Just in Time compilation)

- Possui duas principais áreas de memória:

- Heap: memória de instâncias

- PermGen (Metaspace): memória de classes, métodos,

construtores e estado de classe (estático)

WTH is Dalvik?

Dalvik Virtual Machine

- Máquina virtual de registros (register)

- Carrega e interpreta arquivos .dex

- Possui JIT (Just in Time) a partir de Android 2.2

- Possui diferentes estruturas de memória:

- Heap? PermGen? Method Area?

Objetivos da DalvikVM:

- 20MB!!! de RAM para a aplicação

- CPUs de 250-500MHz (pior que um Pentium 4)

- Executada na bateria (não na tomada)

https://sites.google.com/site/io/dalvik-vm-internals

Estratégia:

1. Formato de execução mais enxuto

a. .dex ao invés de .class e .jar

2. Diminuir o número de instruções na execução

a. register based VM ao invés de stack based VM

3. Compartilhar a inicialização dos processos

a. processo de fork da Dalvik (Zygote)

1 - .jar (.class)vs.dex

.dex

- Pool compartilhado de constantes entre todas as

classes:

- Strings

- Type ids

- Proto ids

- etc...

.jar (.class) vs .dex

http://davidehringer.com/software/android/The_Dalvik_Virtual_Machine.pdf

Problemas e limites da Dalvik

- Garbage Collector tem que respeitar o

compartilhamento de constantes

- Dex limit 65k

- Será que o Java não tem nenhum limite?

Testando o limite do Java

- Dex limit é quando temos mais que 65536 (2^16)

métodos OU atributos em um único arquivo.

- Vamos gerar um único arquivo Java (um .class)

que ultrapasse este número?

Quer dizer que .dex é um grande .class?

.dex não é um .class gigante

- Possuem os mesmos limites

- Possuem quase as mesmas estruturas

- Diferenciam nos opcodes (instruções virtuais)

- etc...

ATENÇÃO!!!

- Para diminuir o número de métodos gerados (e

ajudar a se manter longe do Multidex), evitem criar

métodos acessores sintéticos!

http://jakewharton.com/exploring-java-hidden-costs/

2 - Register based VM

- Diminui o número de instruções executadas

- Evita acesso à memória desnecessariamente

- Consome o fluxo de instruções de forma mais

eficiente (maior valor semântico por instrução)

Outras máquinas virtuais register based

3 - Fork da VM: Zygote

- O init.rc do Android inicializa um serviço daemon

chamado Zygote que é uma instância da DalvikVM

“purinha”

- Através de uma socket, o Zygote faz um fork de si

mesmo e retorna o pid para o ActivityManager

3 - Fork da VM: Zygote (parte 2)

- Um fork copia toda a memória do Zygote para um

espaço de memória reservado de forma bem

eficiente.

- Assim, ao abrir um app ele já possui uma instância

da VM “a quente”

mobilecom dezenas de milhões de downloads

Maior empresa de desenvolvimento

Perguntas?

www.concretesolutions.com.br

Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030

São Paulo - Av. Nações Unidas, 11.541 3º andar - Brooklin - (11) 4119-0449

Ajudamos empresas a criar produtos digitais de sucesso