JVM Máquina Virtual Java

Documentos relacionados
file.j. a Baseado no Jasmin User Guide. (

Arquitectura de Computadores II. Máquinas Virtuais

Como construir um compilador utilizando ferramentas Java

Compiladores Tópicos de JVM

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Capítulo 4 Nível da microarquitetura

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Palavras Reservadas da Linguagem Java

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagens de Programação Classificação

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

2. O gerador de código estende DepthFirstAdapter implementando a interpretação que gerará código Jasmin a partir de Smallpascal.

Ambientação com a Sintaxe de Java: parte 1

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Orientação a Objetos e Java

Sintaxe da linguagem Java

Módulo 04 Expressões, Estruturas de Seleção e Controle de Fluxo. Última atualização: 09/06/2010

MsC. João Maria MsC. Liviane Melo

Variáveis primitivas e Controle de fluxo

Linguagem de Programação II Implementação

AULA TEÓRICA 3 Tema 2. Introdução a programação em Java (JVM, JDK)

PHP: <?php echo("hello World");?> Printa Hello World na página do navegador, mais fácil do que no Java.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Estruturas de Controle

AULA 6 - ARRAYS. Array de 10 elementos

Notas de Aula 01: Introdução à linguagem de programação Java e ao ambiente de desenvolvimento NetBeans

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Programação de Computadores - I. Profª Beatriz Profº Israel

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C#

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

2 Referencial Teórico

Vetores Unimensionais

Java 2 Standard Edition Tipos, literais, operadores e controle de fluxo

INTRODUÇÃO A LINGUAGEM JAVA

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Programação Orientada a Objetos em Java. Introdução

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Aula teórica 4. Tema 3. Linguagem de Programação Java. Manipulação de informação simples (cont.)

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Lição 4 Fundamentos da programação

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Algoritmos I Aula 13 Linguagem de Programação Java

PROGRAMAÇÃO I A LINGUAGEM DE PROGRAMAÇÃO JAVA I

Métodos de implementação de linguagens. Kellen Pinagé

Programação com Acesso a BD. Programação com OO Acesso em Java

Estruturas de controle Parte 1

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

Programação Orientada a Objetos

DIRETORIA ACADÊMICA DE GESTÃO E TECNOLOGIA DA INFORMAÇÃO DIATINF TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TADS

Atributos e Métodos Estáticos

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Linguagem C Princípios Básicos (parte 1)

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Revisão C++ - Parte 1

Universidade Estadual de Santa Cruz

CAP. VII GERAÇÃO DE CÓDIGO

JAVA. Professor: Bruno Toledo

Organização de programas em Java

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Arquitetura da Máquina Virtual Java

Arquitetura e Organização de Computadores

Estrutura de Programas e Tipos de Dados Simples

Módulo 03. Identificadores, Palavras Reservadas, e Tipos

Aula 4 Estruturas de Controle

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Programação Orientada a Objetos (DPADF 0063)

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Simulado de Linguagem de Programação Java

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Computador Cleópatra

Linguagem C: Introdução

Organização de programas em Java

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Transcrição:

JVM Máquina Virtual Java Cristiano Damiani Vasconcellos cristiano.vasconcello@udesc.br

JVM - Introdução Processador virtual; Possui seu próprio conjunto de instruções; Arquitetura baseada em pilha de operandos; Responsável pela tradução e otimização do código, gerenciamento de memória (incluindo o coletor de lixo), tratamento de exceções e gerenciamento das threads.

JVM - Introdução Prog.java javac C1.class C2.class... Cn.class java

Arquivos.class Independente de plataforma; Representa uma classe ou interface; Executado pela JVM.

Formato do arquivo.class

Formato do arquivo. class Header : Número mágico, maior e menor versão. Constante pool : Strings, nomes de classes, nomes de interfaces, nomes de atributos, constantes numéricas maiores que dois bytes. Access rights : public, final, interface, abstract, super. Fields : Atributos (campos da classe). Methods : Métodos. Atributes : Alguns atributos do arquivo, como por exemplo o nome do arquivo fonte.

Tipos Básicos byte 8 bits. short 16 bits. int 32 bits. long 64 bits. char 16 bits (Unicode characters). float 32 bits. double 64 bits. boolean (em geral é armazenado como um inteiro). returnaddress ponteiros para opcodes. Referências classes, arranjos, interfaces e null.

Organização da Memória Pilhas - Cada thread possui sua pilha de execução que funciona de forma similar a pilha de outras linguagens de programação. Heap - Armazena instâncias de classes e arranjos. Runtime Constant Pool Uma por classe ou interface, contém a tabela de constantes armazenada no arquivo.class. Área de métodos Similar ao segmento de texto.

Organização da Memória Frames Pode ser visto como uma abstração para o registro de ativação dos métodos, os parâmetros e as variáveis locais são acessados através de um índice relativo ao frame. Cada posição indexada no frame possui 32 bits (alinhamento por palavra). Inclui também a pilha de operandos e uma área de dados.

Frames... 0 1 2 Parâmetros e variáveis locais Área de dados Frame 3 Pilha de Operandos. Frame 2 Frame 1 Pilha de execução (cada thread possui a sua)

Frames O tamanho do frame é calculado em tempo de compilação. Os parâmetros e as variáveis locais são acessados através de um índice. Em métodos de instância o índice zero, primeiro parâmetro, contém uma referência ao objeto para o qual o método foi chamado (this). A área de dados contém uma referência para a área de constantes, informações para o retorno do método e informações para o tratamento de exceções.

Instruções Opcode com apenas 1 byte. Algumas instruções possuem 1 ou mais parâmetros. A maioria das instruções opera sobre um tipo específico, nesses casos, a primeira letra no mnemônico da instrução informa esse tipo.

Algumas instruções p/ inteiros iconst_n Empilha uma constante (0,1,2,3,4 e 5) na pilha de operandos (e.g. iconst_0). iload <parâmetro> Empilha o valor inteiro armazenado em uma variável local na pilha de operandos. O parâmetro para iload é um índice do frame corrente (e.g. iload 4). istore <parâmetro> Desempilha o valor armazenado no topo da pilha de operandos, armazenando esse valor em uma variável local. O parâmetro para iload é um índice do frame corrente (e.g. istore 4). iadd Desempilha os 2 operando no topo da pilha executa a soma e empilha o resultado. bipush <parâmetro> Empilha o parâmetro (byte) como um int (e.g. bipush 27).

Exemplo int a, b, c; a = 1; b = 20; c = b + a * 2; iconst_1 istore 1 bipush 20 istore 2 iload 2 iload 1 iconst_2 imul iadd istore 3

Esquema de Tradução S id = E {gerar(istore, id.poslexval)} E E + T {gerar(iadd)} E T T T * F {gerar (imul)} T F F const {gerar (bipush, const.lexval)} F id {gerar(iload, id.poslexval)} F (E)

Algumas instruções p/ inteiros if_icmp<cond> <label> - Desvia a execução para o label se o resultado da comparação dos dois operandos no topo da pilha resultar em um valor verdade. eq valor1 = valor2 ne valor1 valor2 lt valor1 < valor2 le valor1 valor2 gt valor1 > valor2 ge valor1 valor2 (e.g. if_icompeq L10)

Algumas instruções goto <label> - Desvio incondicional. invokestatic <metódo> - Chama um método de classe. invokevirtual <método> - Chama um método de instância. ldc <índice> - Empilha um item da runtime constant pool.

B B 1 or M C B B 1 and M C B C C not C C (B) C E 1 rel E 2 M e {corrigir(b1.listaf, M.label); B.listav = merge(b 1.listav, C.listav); B.listaf = C.listaf;} {corrigir(b1.listav, M.label); B.listaf = merge(b1.listaf, C.listaf); B.listav = C.listav;} {B.listav = C.listav; B.listaf = C.listaf; C.listav = C.listaf; C.Listaf = C.listav; {C.listav = B.listav; C.Listaf = B.listaf;} C.listav = crialista(proxinst); C.listaf = crialista(proxinst + 1); gerar(if_icmp[rel] goto ); gerar(goto ); } {M.label = novolabel();}

Esquema de Tradução S if (B) M S {corrigir(b.listav,m.label); corrigir(b.listaf, novolabel()); } S if(b) M 1 S N else M 2 S {corrigir(b.listav, M1.label); corrigir(b.listaf, M2.label); corrigir(n.listav, novolabel());} S while M 1 (B) M 2 S {corrigir(b.listav, M2.label); gerar(goto M1.label) corrigir(b.listaf, novolabel());} N {N.listav = criarlista(proxinstr); gerar(goto );

Descritores de Tipos Representam os tipos de atributos e métodos em um arquivo.class; Usados no acesso a atributos e chamadas de métodos. Exemplos: [Ljava/lang/String; representa java.lang.string[] [[I representa int[][]

Tipos básicos: Z boolean; B Byte; C char; S short; I int; J long; F float; D double; V void. Descritores de Tipos

Descritores de Tipos Um descritor de classe representa o nome de uma classe ou interface, por exemplo: java.lang.string é representado por: java/lang/string Obs: Quando um descritor de classe ocorre na formação de um descritor de tipo, seu início é marcado com um L e seu final marcado com um ;. Um arranjo é representado por [.

Descritores de Métodos (<Descritor de Tipo>*)<Descritor de Tipo> Exemplos: O tipo do método int foo(int a, String s) é representado por: (ILjava/lang/String;)I O tipo do método void bar(int a, double b[]) é representado por: (I[D)V

Jasmin Montador para a JVM. Uso: java -jar jasmin MeuPrograma.j

Exemplos Jasmin.class public Alo.super java/lang/object.method public <init>()v aload_0 invokenonvirtual java/lang/object/<init>()v return.end method.method public static main([ljava/lang/string;)v.limit stack 2.limit locals 1 getstatic java/lang/system/out Ljava/io/PrintStream; ldc "Alo" invokevirtual java/io/printstream/println(ljava/lang/string;)v return.end method

Exemplos Jasmin public static void main(string args[]) { int b, a = 1; } while (a < 10) { b = a * 2; System.out.println(b); a++; }

.method public static main([ljava/lang/string;)v.limit stack 2.limit locals 4 iconst_1 istore_2 l1: iload_2 bipush 10 if_icmpge l2 iload_2 iconst_2 imul istore_1 getstatic java/lang/system/out Ljava/io/PrintStream; iload_1 invokevirtual java/io/printstream/println(i)v iinc 2 1 goto l1 l2: return.end method Exemplos Jasmin

Referências Java Virtual Machine Specification (2nd Edition). Tim Lindholm and Frank Yellin. Jasmin User Guide. Jonathan Meyer.