GCJ – Conhecendo o compilador Java Livre – Parte II

 

 

Gerando um bytecode com o programa “OLA MUNDO” 

Para não gerar um código nativo e sim um bytecode, Basta utilizar o parâmetro -C. O comando gij utiliza a biblioteca libgcj para proporcionar ao sistema uma máquina virtual. Vale a pena ressaltar que a variável ambiental CLASSPATH do java é utilizada gij e gcj.

 

No exemplo abaixo geramos um bytecode e o executamos com o JVM da Sun e com o GIJ! Veja como é simples:

 

cabelo@linux:/neti/install/java/artigo> gcj -C BemVindo.java

cabelo@linux:/neti/install/java/artigo> ls BemVindo.class

BemVindo.class

cabelo@linux:/neti/install/java/artigo> gij BemVindo

Olá Mundo!cabelo@linux:/neti/install/java/artigo>

 

Agora teste o bytecode gerado como JVM do java:

 

cabelo@linux:/neti/install/java/artigo> java BemVindo

Olá Mundo!

cabelo@linux:/neti/install/java/artigo>

 

Outro ponto importantíssimo e que o gcj quanto o gij conseguem utilizar pacotes JAR na compilação e na execução de programa. O GCJ possui um utilitário similar ao jar, o fastjar, escrito inteiramente em C.

 

Para compilar aplicações com várias classes, basta utilizar o parametro -c, logo após cria o binário. Veja no exemplo abaixo:

 

cabelo@linux:/neti/install/java/artigo> gcj -c Classe1.java

cabelo@linux:/neti/install/java/artigo> gcj -c Main.java

cabelo@linux:/neti/install/java/artigo> ls

Classe1.java Classe1.o Main.java Main.o

cabelo@linux:/neti/install/java/artigo> gcj -o programa1 main=Main Classe1.o Main.o

cabelo@linux:/neti/install/java/artigo> ls

programa1 Classe1.java Classe1.o Main.java Main.o

cabelo@linux:/neti/install/java/artigo> ./programa

 

Testando a performance (compactando um vídeo mpeg)

Escolhi um programa em java que compacta um arquivo mpeg para testa a performance de execução. O principal motivo que levou a esta escolha, foi a compactação que exige um pouco de cálculo e a leitura e gravação em disco ( assim conseguindo obter resultado com I/O ).

 

Baixe o programa ( http://www.vivaolinux.com.br/scripts/verScript.php?codigo=831 ) Glauber Brilhante em Viva O Linux e descompacte com o programa unzip como no exemplo abaixo:

 

cabelo@linux:/neti/install/java/artigo/teste> unzip Zip.zip

Archive: Zip.zip

 

inflating: Zip/Zipando.java

cabelo@linux:/neti/install/java/artigo/teste>

 

O programa efetua a compactação de um programa informado pelo teclado. Como o objetivo é verificar a performance, efetuei algumas alterações para o código assumir sempre determinados valores. Abaixo menciono as linhas que a serem alteradas.

 

Quem preferir adquirir o código já alterado, efetue o download em (http://cabelo.linuxdicas.com.br/download/Zipando.java)

 

Para efeito de informação, explicarei passo a passo as alterações. Primeiro entre na pasta criada Zip e edite o programa Zipando.java.

 

cabelo@linux:/neti/install/java/artigo/teste> cd Zip/

cabelo@linux:/neti/install/java/artigo/teste/Zip> vi Zipando.java

 

Na linha 31 o programa solicita a digitação do nome do arquivo destino (arquivo zip a ser criado). Sendo assim comentei a linha 31 e atribui na linha 32 uma constante na variável SAIDA.

 

31 // saida = leia.readLine();

32 saida = "video.zip";

 

Já linha 55 o programa solicita a digitação do tipo de informação a ser compactada 1=arquivo e 2=pasta. Novamente comentei a linha 55 e atribui na linha 56 o retorno da constante 1.

 

55 //return leia.readLine();

56 return "1";

 

Agora na linha 89 o programa solicita a digitação do nome do arquivo origem (nome caso utilizei o arquivo de vídeo tst.mpg). Então comentei a linha 89 e atribui na linha 90 uma constante na variável nome.

 

89 // nome = leia.readLine();

90 nome ="tst.mpg";

 

Agora compile com o gcj, gij e com o javac o nosso programinha, execute com o comando time para analisarmos os resultados como no exemplo abaixo:

 

* ATENÇÃO: Ressalto que executei o programa 2 vezes para não criar falso resultados em função do cache de disco.

 

Compilando e executando com o java

cabelo@linux:/neti/install/java/artigo/teste/Zip> javac Zipando.java

cabelo@linux:/neti/install/java/artigo/teste/Zip> time java Zipando

Zipando.java

Zipando arquivos ou pastas

Digite o nome do arquivo a ser gerado:

Selecione..compactacao de:

1. Arquivo

2. Pasta

Opcao:

Digite o nome do arquivo a ser zipado:

Compactando: tst.mpg

Arquivo zipado com sucesso!

real 0m24.482s

user 0m19.613s

sys 0m1.380s

cabelo@linux:/neti/install/java/artigo/teste/Zip>

 

Compilando e executando com o gcj 

cabelo@linux:/neti/install/java/artigo/teste/Zip> gcj -o Zipando --main=Zipando Zipando.javacabelo@linux:/neti/install/java/artigo/teste/Zip> time ./Zipando

Zipando.java

Zipando arquivos ou pastas

Digite o nome do arquivo a ser gerado:

Selecione..compactacao de:

1. Arquivo

2. Pasta

Opcao:

Digite o nome do arquivo a ser zipado:

Compactando: tst.mpg

Arquivo zipado com sucesso!

real 0m12.600s

user 0m10.565s

sys 0m1.172s

cabelo@linux:/neti/install/java/artigo/teste/Zip>

 

Compilando com o gcj e executando com o gij 

cabelo@linux:/neti/install/java/artigo/teste/Zip> gcj -C Zipando.java

cabelo@linux:/neti/install/java/artigo/teste/Zip> time gij Zipando

Zipando.java

Zipando arquivos ou pastas

Digite o nome do arquivo a ser gerado:

Selecione..compactacao de:

1. Arquivo

2. Pasta

Opcao:

Digite o nome do arquivo a ser zipado:

Compactando: tst.mpg

Arquivo zipado com sucesso!

real 0m13.225s

user 0m9.365s

sys 0m0.988s

cabelo@linux:/neti/install/java/artigo/teste/Zip>


 

Abaixo os resultados:

 

Execução

Tempo

Java bytecode

24.482s

Código nativo

12.600s

gij bytecode

13.225s

 

Quero deixar bem claro que o objetivo deste documento não é gerar polêmica, muito menos classificar como melhor ou pior determinada tecnologia. E sim disponibilizar os teste efetuados na NETi TECNOLOGIA junto a equipe de desenvolvimento e pesquisa da empresa.

 

Para ler a primeira parte desta matéria, acesse:

http://www.devmedia.com.br/articles/visualizacomponente2.asp?comp=2187