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:
//www.devmedia.com.br/articles/visualizacomponente2.asp?comp=2187