Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
7Activity
0 of .
Results for:
No results containing your search query
P. 1
Java Virtual Machine

Java Virtual Machine

Ratings: (0)|Views: 2,934|Likes:
Published by Tiago Caetano
Java Virtual Machine
Java Virtual Machine

More info:

Published by: Tiago Caetano on Feb 09, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/11/2013

pdf

text

original

 
JAVA VIRTUAL MACHINE (JVM)
Por Leandro Baptista, Marlon Palangani e Tiago Deoldoto, 11 de Abril de 2009 
A linguagem de programação Java proporciona o desenvolvimento aplicações que podem serexecutadas em diversos tipos de plataformas e Sistemas Operacionais. Tudo isso tornou-sepossível graças a Máquina Virtual Java. Nesse artigo você encontrará informações a respeito dofuncionamento, arquitetura e diversas vantagens que essa ferramenta proporciona, tanto parausuários simples como para desenvolvedores de sistemas.
O QUE É JAVA VIRTUAL MACHINE?
A JVM (do inglês Java Virtual Machine) é um programa que carrega e executa os aplicativos Java,convertendo os bytecodes em código executável de máquina, é apenas um aspecto do software Javaenvolvido na interação com a Web. A JVM é reponsável pelo gerenciamento dos aplicativos, à medida que
 
são executados.Graças à maquina virtual Java, os programas escritos em Java podem funcionar em qualquer plataforma dehardware e software que possua uma versão da JVM, tornando assim essas aplicações independentes daplataforma onde funcionam.A arquitetura de JVM permite um controle muito fino sobre as liberadas para o código que esta rodando naVM. Isso permite a execução de código confiável de fontes remotas, um modelo usado pelos applets. Os
 
applets rodam dentro de uma VM incorporada ao browser do usuário, exectando código baixado de umservidor HTTP remoto. O código remoto roda em uma sandbox, que protege o usuário de códigos maliciosos.O autor do applet pode aplicarum certificado para assinar digitalmente o applet como “seguro”, dando a elepermissão de sair do sandbox e acessar livremente a máquina onde esta rodando.Podemos dizer também que a maquina virtual Java é uma máquina de computação abstrata. Como umamáquina de computação real, tem um jogo de instrução e manipula várias áreas de memória no tempo deexecução. É razoavelmente comum executar uma linguagem de programação usando máquina virtual. Amáquina virtual mais conhecida, pode ser a máquina do P-Código de UCSD Pascal.A primeira execução do protótipo da máquina virtual de Java, emulou o jogo de instruções em um softwarehospedado por um dispositivo handheld que se assemelhasse a um assistente de Digitas pessoaiscontemporâneo (PDA). As execuções atuais da máquina virtual de Java, emulam em anfitriões de Win32 e desolaris em umas maneiras muito mais sofisticadas. Com a linguagem de programação Java, podemos, porexemplo, criar um aplicativo que rode tanto no Linux quanto no Windows, como foi dito acima. Mas não selimita a esses sistemas operacionais, sendo possivel desenvolver para uma infinidade de plataformas, paraisso basta que elas tenham uma JVM.Você ja deve ter usado Java antes e não sabe. Por exemplo, em uma fila de banco, onde você fica jogandoem seu telefone celular enquanto aguarda sua vez. Os aplicativos feitos em Java estão presentes em umainfinidade de dispositivos, desde relógios até mainframes, relembrando novamente que, tudo isso graças aMáquina Virtual Machine.
ENTENDENDO MELHOR O FUNCIONAMENTO DA JVM
Vamos tentar entender melhor como a JVM funciona. Quando se faz um programa em Java e o compila, setudo estiver certo, o compilador gera bytecodes desse programa. Bytecode é uma espécie de codificação quetraduz tudo o que foi escrito no programa para um formato que a JVM entenda e seja capaz de executar,
 
assim sendo capaz de rodar em qualquer sistema operacional que tenha a JVM. Isso ocorre porque nãoexiste bytecodes diferentes, isto é, os bytecodes dos programas em Java compilados no Windows sãoconstituiídos da mesma forma que bytecodes gerados se a compilação fosse feita em Mac OS. De certo que,podem haver algumas diferenças, que dependem da implementação da JVM e claro, do compilador. Quandoum código em Java é compilado, um arquivo com a extensão .class é gerado. Esse tipo de arquivo é obytecode, então quando o programa Hello.java for compilado, um arquivo chamado Hello.class deverá serexecutado. A imagem a seguir ilustra esse processo.Construir uma JVM não é fácil, ela envolve uma série de conceitos complexos, como instruções equivalentes
 
a de processadores, controle de acesso à memória, registradores, etc. Isso pode até parecer estranho, mas énecessário entender que as JVMs atuam, de fato, como uma máquina.Muitos usuários relutam em instalar a máquina virtual Java, dizem que gastam memória, que ocupa muitoespaço desnecessário, mas a verdade é que bem configurado, ela se torna leve “como uma pluma”.Uma curiosidade que podemos citar, é que, um ponto que merece destaque na arquitetura desenvolvida pelaSun para a plataforma Java é o uso da máquina virtual em troca de um código compilado especifico para umcomputador. Diversos outros modelos necessitam que um determinado programa seja compilado para cadatipo de computador em que será utilizado, o que pode ser proibitivo para alcançar uma larga escala.
ARQUITETURA DA MAQUINA VIRTUAL JAVA
 
Principais subsistemas da máquina virtual Java (JVM):
- Carregador de classe
(class loader), carregar classes e interfaces a partir de nomes completamentequalificados.
- Máquina de execução
(execution engine), executa instruções das classes carregadas.
- Áreas de dados de execução
(runtime data areas), organizada em área de métodos (method area), áreade memória dinâmica (help), pilhas (stacks), contadores de programas (program counters ou pc) e pilhas dosmétodos nativos (native methods stacks). A especificação destas áreas varia de implementação paraimplementação para permitir que características especificas de uma dada arquitetura possam ser exploradas.Cada instância da máquina virtual tem uma área de métodos e uma “heap” que são compartilhadas por todasas “threads” sendo executadas na máquina virtual. Cada “thread” cria um registro de ativação (frame) na pilha
 
da “thread” contendo o estado do método, o que inclui parâmetros, variáveis locais, valor de retorno e cálculosintermediários.
- Interface de métodos nativos
(native method interface).A JVM é uma maquina de pilha. As instruções da JVM utilizam a pilha para armazenar resultadosintermediários, ao invés de utilizar registradores como é feito em arquiteturas concretas. Isto permite adefinição de um conjunto simples de instruções que é facilmente implementado em diferentes arquiteturas.Na JVM existem tipos primitivos, como byte, short, int, long, float e Double e referencias a objetos. O tamanhode uma palavra (“Word”) na JVM varia de implementação para implementação da JVM e deve ser grande osuficiente para armazenar um byte, int, float, uma referencia a um objeto ou um “return address”, este ultimoutilizado para implementar cláusulas finally em Java. Duas palavras devem ser capazes de armazenar ostipos long e Double.
OTIMIZANDO O USO DA MEMÓRIA EM APLICAÇÕES JAVA
Em Java, diferente de outras linguagens como C e C++, o programador não precisa desalocar memória,usando funções como free e delete. Java possui um coletor de lixo, uma thread de baixa prioridade que
 
executa junto com a Java Virtual Machine. Sua função é gerenciar a utilização de memória, procuranado
 
áreas de memória que não estejam mais em uso para realizar a liberação das mesmas.A execução do coletor de lixo é transparente para o programador, porém, podemos em algumas situações
 
desejar usar artifícios para otimizar o uso da memória pela JVM.
FUNCIONAMENTO DO COLETOR DE LIXO
O coletor de lixo libera a memória mantida por um objeto se não houver mais nenhuma referência para ele.Dependendo do algoritmo da coleta de lixo usado pela máquina virtual Java no qual o código está sendoexecutado, nem todo objeto não referenciado será desalocado pelo coletor de lixo. Um objeto mais antigo, delonga duração, é menos provável de estar não referenciado do que um objeto novo, de modo que umalgoritmo comum para coleta de lixo é analisar os objetos mais antigos com menos freqüência do que osobjetos mais novos.
 
Podemos ter uma métrica da eficiência da implementação do coletor de lixo utilizado pela sua JVM com ocódigo abaixo:
Runtime rt = Runtime.getRuntime();long mem = rt.freeMemory();System.out.println("Memória Livre: " + mem);// ... algum códigoSystem.gc();// ...mem = rt.freeMemory();System.out.println("Memória Livre: " + mem);
O código acima obtém o ambiente de execução com o método estático
getRuntime()
da classe Runtime. Ométodo
freeMemory()
retorna a memória disponível no ambiente runtime. A linha
System.gc()
faz achamada explícita do coletor de lixo. Em algumas implementações da JVM, o coletor de lixo pode ser ativado
 
através da chamada ao método
System.gc()
, embora a especificação não garanta isso. De todo modo, a

Activity (7)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
ditnux liked this
gueburah liked this
pcampa liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->