Você está na página 1de 7

Mquinas Virtuais: Arquitetura Java e .

NET
Allef Sousa
1
, Amanda Moreira
1
, Leonardo M. Florentino
1

1
Instituto de Informtica Universidade de Franca (UNIFRAN)
Caixa Postal 082 14.404-600 Franca SP Brasil
allefsousa_1@hotmail.com, amanda_s_moreira@hotmail.com, leonardo_091096@hotmail.com
Abstract. This article is aimed at presenting the basics of virtual machine and
virtualization, and delve into the Java architectures, from Sun Microsystems,
and .NET Framework, from Microsoft, detailing as much as possible of the
main features of each architecture. So, coming to a conclusion about the
architectures, and showing advantages of the virtual machine.
Resumo. Este artigo tem objetivo de apresentar os conceitos bsicos de
mquina virtual e sua virtualizao, e aprofundar nas arquiteturas Java, da
Sun Microsystems, e .NET framework, da Microsoft, detalhando o mximo
possvel das caractersticas principais de cada arquitetura. Portanto,
chegando a uma concluso sobre as arquiteturas, e mostrando vantagens da
mquina virtual.
1. Introduo
1.1 Conceito de Virtualizao
A virtualizao uma tecnologia que oferece uma camada de abstrao dos
verdadeiros recursos de uma mquina, provendo um hardware virtual para cada sistema,
com o objetivo de esconder as caractersticas fsicas e forma como os sistemas
operacionais e aplicaes interagem com os recursos computacionais.
Com a virtualizao podemos executar diferentes sistemas operacionais em um
mesmo hardware simultaneamente, executar um sistema operacional (e suas aplicaes)
como um processo de outro, utilizar sistemas operacionais e aplicaes escritas para
uma plataforma em outra, etc.
1.2 Virtualizao e Emulao
Um emulador um agente escrito para tornar possvel a interao entre dois sistemas
distintos e incompatveis entre si e para isto, o emulador traduz as instrues entre um
sistema e outro, intermediando o processo. J a virtualizao, por sua vez, utiliza a
emulao e outras tcnicas para oferecer um conjunto completo de recursos, com o
objetivo de permitir que vrios sistemas executem sobre uma mesma plataforma visando
o mximo de desempenho. O foco da emulao fazer um sistema executar totalmente
sobre outro para o qual no foi originalmente construdo, mesmo que isto cause uma
perda de desempenho. De um modo contrrio, a virtualizao preocupa-se sempre com
o desempenho e executa o sistema virtual diretamente no hardware quando possvel.

1.3 Mquina Virtual e Mquina Real
Uma mquina virtual um espao virtual isolado com acesso ao hardware, onde
funciona um sistema virtual. Mquina virtual o termo a que nos referimos quando
estamos trabalhando com sistemas virtuais executando em uma mquina real. Uma
mquina real formada por vrios componentes fsicos que fornecem operaes para o
sistema operacional e suas aplicaes.
Em ambientes virtualizados as mquinas virtuais simulam uma rplica fsica de
uma mquina real. Dispositivos adicionais como drives de disquetes, CD-ROM e
dispositivos USB (Universal Serial Bus) tambm podem ser compartilhados entre as
mquinas virtuais e o sistema anfitrio (tambm chamado de sistema host).
Embora as funcionalidades das diversas mquinas virtuais sejam diferentes,
todos compartilham de atributos comuns como:

Compatibilidade;
Isolamento;
Encapsulamento;
Desempenho.
2. Mquina Virtual Java (Java Virtual Machine)
2.1 Histria
Em 1990, a SUN Microsystems financiou um projeto de pesquisa interna com o
codinome Green que resultou no desenvolvimento de uma linguagem baseada em
C++. Seu criador, James Gosling, chamou de Oak em homenagem a uma arvore de
carvalho vista da sua janela na SUN. Descobriu-se mais tarde que j havia uma
linguagem de computador chamada Oak. Ento, quando uma equipe da SUN visitou
uma cafeteria local o qual tinha o nome de Java (cidade de origem de um tipo de caf
importado), decidiram utilizar o nome na linguagem. No incio da dcada de 1990, to
rpido como a SUN havia antecipado. O projeto corria o risco de ser cancelado. Por uma
feliz casualidade a World Wide Web em popularidade em 1993 e a equipe da SUN viu o
imediato potencial de utilizar Java para adicionar contedo dinmico, como
interatividade e animaes, as pginas da web. Isso deu nova vida ao projeto.
2.2 Funcionamento
Originalmente, os ambientes de suporte a execuo de programas escritos em Java eram
constitudos totalmente por interpretadores de bytecode. Para executar uma aplicao
escrita em Java era necessrio carregar o interpretador na memria, carregar o cdigo da
aplicao, e interpretar a instruo em todo o cdigo da aplicao. Desta forma, as
aplicaes Java tinham um desempenho muito inferior se comparado s aplicaes
executadas pelo hardware. Com isso o desenvolvedor no tem a necessidade de sem
importar com hardware e pode desenvolver sua aplicao visando somente o
desempenho do software.

2.2.1 Pilha
As instrues da JVM utilizam a pilha para armazenar resultados intermedirios, ao
invs de utilizar registradores como feito em arquiteturas concretas. Isto permite a
definio de um conjunto simples de instrues que so facilmente implementados em
diferentes arquiteturas de ambiente de execuo.
2.2.2 Compilador JIT (J ust I n Time)
A principal forma de melhorar o desempenho de programas Java foi a utilizao de
compiladores Just-In-Time (JIT) nas mquinas virtuais. A tcnica consiste em traduzir o
cdigo Java, bytecode, para cdigo nativo em tempo de execuo. Para isto,
compiladores especficos ficam permanentemente aguardando a requisio para a
transformao de um novo mtodo. Os mtodos traduzidos so, normalmente,
armazenados em memria para serem utilizados posteriormente sem a necessidade de
nova traduo. Isto faz com que a necessidade de memria aumente, uma vez que tanto
o compilador quanto os mtodos traduzidos ocupam memria extra durante o
processamento do programa, sendo necessrio de um processo de coleta de lixo
(Garbage Collector).
2.2.3 Garbage Collector
Responsvel pela procura e liberao de memria que no est mais sendo utilizada pela
aplicao.
2.2.4 Conjunto de Instrues
As instrues em bytecode da JVM so muito similares a instrues Assembly, e seus
arquitetos preocuparam-se em manter um mnimo de instrues para realizar as tarefas
com o mximo de eficincia.

2.2.5 Portabilidade Java
Atualmente, Java umas das linguagens mais utilizadas pela portabilidade que possui.
Isso significa que voc pode compilar um programa sobre qualquer sistema e rodar o
arquivo binrio executvel no mesmo sistema ou em qualquer outro sistema seja ele
um Mac, Windows 98, NT, XP, Solaris, Linux ou qualquer outra variedade de Unix.
As linguagens de programao tradicionais compiladas so transformadas em
cdigo binrio em nvel de mquina, isto , cdigo especfico para a mquina ou
plataforma para a qual est sendo compilada. A vantagem desse processo que um
cdigo binrio compilado roda mais rpido uma vez que ele est rodando na linguagem
nativa da mquina. A desvantagem que um programa escrito em uma linguagem
tradicional deve ser recompilado para cdigo binrio para cada plataforma de hardware
ou sistema operacional antes que possa ser executado na mquina.
Figura 1: Programa Hello World em Java Figura 2: Formato Bsico de instruo

2.3 Verses
2.3.1 Standard Edition
Utilizada para desenvolvimento em ambientes de trabalho. Define-se a maneira pelo
qual applets e aplicaes desktop fazem requisies e usam as funcionalidades das
classes disponveis atravs das bibliotecas Java SE.
2.3.2 Enterprise Edition
Baseia-se na coleo de classes de Java SE e ainda possui recursos para implementao
de webservices e componentes, alm de fornecer bibliotecas para gerenciamento e
comunicao; portanto voltada ao paradigma de Arquitetura Orientada a Servios
2.3.3 Micro Edition
Possui um ambiente flexvel para desenvolvimento, e execuo de aplicaes para
sistemas embarcados como telefones celulares, PDAs, smartcards e impressoras.
2.4 Ambientes de Desenvolvimentos Integrados
Atualmente, as duas IDEs mais conhecidas e utilizadas para o desenvolvimento de
software em Java so o Eclipse e o NetBeans, sendo timas opes aos
desenvolvedores, que muitas vezes se deparam com a dvida de qual escolher. Estes
dois ambientes possuem cdigo aberto e so gratuitos, podendo ser utilizados para o
desenvolvimento de aplicaes em outras linguagens, alm de Java, podendo tambm
serem executados em diversas plataformas, alm do Windows.
3. Mquina Virtual .NET
3.1 Introduo
Microsoft iniciou o desenvolvimento da plataforma .NET em meados da dcada 90,
lanando sua primeira verso em 2002. O framework .NET oferece diversas
caractersticas, exemplo de algumas:
Common Runtime Engine: arquitetura capaz de produzir um cdigo
intermedirio chamado Common Intermediate Language, e sendo possvel
interagir com vrias linguagens. Esta arquitetura tem o mesmo conceito de
Common Language Infrastructure (CLI).
Interoperabilidade: capacidade de se comunicar de forma transparente, ou seja,
oferece acesso s funcionalidades que so implementadas fora do ambiente
.NET.
Base Class Library: simples biblioteca runtime para linguagens modernas,
abrangendo todas as linguagens, e com a funcionalidade de equipar classes nas
quais encapsulam as funes possveis para o desenvolvimento de aplicaes.
Independncia da Linguagem: introduz o conceito de Common Type System
(CTS), cujo especificao define todas as estruturas e tipos suportados pela
CLR, permitindo que o framework .NET suporte desenvolvimento em mltiplas
linguagens de programao.

A plataforma .NET bastante anloga a plataforma JAVA, como apresentado
anteriormente, entretanto, a principal diferena entre as duas o modo de compilao: a
plataforma .NET sempre compila o cdigo fonte em tempo real (Just In Time), sendo
que uma aplicao Java pode ser interpretada, e depois compilada.


3.2 Arquitetura
3.2.1 Common Language I nfrastructure (CLI)
uma especificao a qual define um ambiente para a utilizao de mltiplas
linguagens de alto nvel, em diferentes plataformas. Sendo assim, no h necessidade
das aplicaes serem reescritas para uma arquitetura especfica.
3.2.2 Common Type System (CTS)
Sistema de tipo comum que define como os tipos so declarados, usados e gerenciados
pelo Common Language Runtime, e tambm tambm uma parte importante do suporte
em tempo de execuo para a interao entre linguagens.
3.2.3 Common Language Specification (CLS)
Conjunto de regras que se aplicam aos conjuntos gerados, e devem ser obedecidas para
garantir interoperabilidade com as outras linguagens CLS.
3.2.4 Metadata
Informaes geradas pelo compilador, independentes da linguagem usada, sobre a
estrutura do programa, o que torna mais fcil interpretar o cdigo escrito. A principal
vantagem do uso desse tipo de metadado a possibilidade das informaes serem
referenciadas entre vrias linguagens e ferramentas. Em geral, um metadado pode dizer
do que se trata um dado especfico, e como foi dito, facilitam o entendimento dos
relacionamentos e a utilidade das informaes dos dados.
Figura 4: Esquema de execuo de
um programa no framework .NET
Figura 3: Modelo de execuo para o
framework
.NET

3.2.5 Virtual Execution System (VES)
um sistema de tempo de execuo o qual fornece um ambiente para execuo do
cdigo gerenciado, alm de fornecer suporte para um conjunto de tipos de dados
embutidos. Em geral, o objetivo do VES fornecer apoio necessrio para execuo do
Common Intermediate Language. Uma vez que o cdigo executado, o VES especfico
da plataforma compila o CIL gerado para a linguagem nativa atravs do JIT, obedecendo
arquitetura de hardware.
3.2.6 Garbage Collector
A coleta de lixo do .NET obedece o mesmo princpio bsico seguido pelo JVM, mas se
diferencia em apenas pequenas polticas de otimizao.
3.2.7 Carregador de Classes
O carregamento de classes de um programa .NET, a plataforma carrega um arquivo do
tipo Portable executable (PE) que contm todos os metadados gerados nas fases
anteriores, e o cdigo referenciado e, inicialmente, submetido compilao em tempo
de execuo (Just In Time). Uma vez compilado, o cdigo nativo gerado estar pronto
para executar, sempre que necessrio.
3.2.8 Compilador JIT (J ust I n Time)
O compilador responsvel por transformar o CLI (Common Language Intermmedie) e
os metadados em arquivos executveis, os quais so teis ao hardware e sistema
operacional do usurio. O processo de compilao traduz o cdigo fonte para o
bytecode, trazendo ele para o cdigo nativo enquanto executado.
4. Concluso
Tanto JVM, quanto .NET foram feitos para facilitar o trabalho de muitos
desenvolvedores. Os seus conjuntos de instrues, conceito de metadados, segurana em
constante aprimoramento, e poltica de coleta de lixo, so todas caractersticas que
apoiam o desenvolvimento de programadores .NET e JVM. Sendo que a JVM pode-se
ser executado sob qualquer sistema operacional a qual esteja operando, e .NET
possibilita a integrao de vrios mdulos com diferentes linguagens de programao
numa nica aplicao.
5. Referncia
TANENBAUM, Andrew S.. Organizao Estruturada de Computadores. 5. ed. So
Paulo: Pearson, 2009.
DEITEL, Harvey M.. Java como programar. 8. ed. So Paulo: Pearson, 2009.
LINDHOLM, Tim; YELLIN, Frank; BRACHA, Gilad. The Java Virtual Machine
Specification: Java SE 7 Edition. 7. ed. Redwood City: Oracle, 2011. 590 p.
SOUZA, Diogo. Processo de Interpretao e Compilao: Entendendo o Java de uma
forma diferente. 2013. Disponvel em: <http://www.devmedia.com.br/processo-de-
interpretacao-e-compilacao-entendendo-o-java-de-uma-forma-diferente/24257>. Acesso
em: 27 maio 2014.

FERREIRA, Rodrigo Augusto Barbato. Uma implementao distribuda da Mquina
Virtual JAVA visando o compartilhamento do compilador "just-In-Time". 2001.
Disponvel em:
<http://www.bibliotecadigital.unicamp.br/document/?code=vtls000218853>. Acesso
em: 27 maio 2014.
COMPARANDO as IDEs NetBeans e Eclipse - Revista easy Java Magazine 22.
Disponvel em: <http://www.devmedia.com.br/comparando-as-ides-netbeans-e-eclipse-
revista-easy-java-magazine-22/25767>. Acesso em: 27 maio 2014.
.NET Framework. Disponvel em: <http://msdn.microsoft.com/pt-
br/library/aa496123.aspx>. Acesso em: 27 maio 2014.
COMMON Type System. Disponvel em: <http://msdn.microsoft.com/pt-
br/library/zcx1eb1e(v=vs.110).aspx>. Acesso em: 27 maio 2014.
INDEPENDNCIA da linguagem e componentes independentes da linguagem.
Disponvel em: <http://msdn.microsoft.com/pt-br/library/12a7a7h3(v=vs.110).aspx>.
Acesso em: 27 maio 2014.
[ADAMS e AGESEN] ADAMS, K. and AGESEN, O. A Comparison of Software and
Hardware Techniques for x86 Virtualization, VMWare.
[BARHAM et al] BARHAM, P., DRAGOVIC B., FRASER K., HAND, S., HARRIS
T., HO, A., NEUGEBAUER, R., PRATT, I. and WARFIELD, A. Xen and the Art of
Virtualization, In Proceedings of the 19th ACM Symposium on Operating Systems
Principles, pages 164177, Bolton Landing, NY, October 2003.
[BELLARD 2005] BELLARD, F. QEMU, A Fast and Portable Dynamic Translator,
USENIX Annual Technical Conference, USENIX Association, 2005.
[BELLARD 2007] BELLARD, F. QEMU Emulator User Documentation. February
2007. Disponvel em <http://fabrice.bellard.free.fr/qemu/qemu-doc.html>.

Você também pode gostar