Alysson Neves Bessani wrote:
> 
> >
> > Aproveitando, eu gostaria de fazer um alerta para todos em relacao
> > a performance. Muita gente assume que Java sera muito lento
> > para o que voce quer fazer, sem nunca ter experimentado (nao estou
> > dizendo que eh esse o caso). Isso acontece muito com programadores C.
> > Hoje em dia, em especial com as novas tecnologias como o HotSpot,
> > voce deve considerar com muito cuidado essa decisao. 
<parte sem relevancia removida>
> > Bruno.
> >
> 
>         Bruno, ou demais membros da lista, eh verdade que as atuais JVM's
> chegam a rodar um programa java com performance bastante semelhante a um
> programa em C++? Isto desconsiderando-se a "inicializacao" do programa,
> quando ha uma serie de "coisinhas" como as pilhas de constantes e
> variaveis da classe que a JVM tem que carregar do .class.
> 

(Desculpem a resposta longa, mas essa eh uma questao importante
para todos, e por mais que eu fale, nunca eh suficiente...)

Resposta rapida: as novas JVMs (em particular o HotSpot) trazem a
performance de Java (interpretado) para proximo da performance de C++ 
compilado. 

Resposta longa:
Observe que essas comparacoes sao bastante complicadas, ja que
para voce poder comparar bananas com bananas voce precisa estar falando
de um programa em C++ que faca o que um programa em Java faz. Ou seja,
um programa em C++ que entre outras coisas garanta:
        - alocacao e desalocaco de memoria corretamente
        - que nao existirao ponteiros perdidos no programa
        - realize checagens de execoes

Nao so isso, existe um outro lado que eh facilidade e o tempo de
desenvolvimento da aplicacao. A IDC estima que cerca de 75% do tempo
gasto debugando uma aplicacao provem de bugs direta ou indiretamente
realcionados com problemas na alocacao/desalocacao de memoria. Bugs
que nao existem na plataforma Java. Alem disso, bibliotecas como
threads, serializacao, gui, e mesmo coisas como tratamento de excessoes,
que fazem parte da plataforma Java, sao em geral adendos e/ou bibliotecas
proprietarias em C++. Nao so isso, mas a questao de portar a sua aplicacao
para 2 plataformas pode ser um trabalho que requer tanto tempo quanto
desenvolver a aplicacao, e em Java voce ganha a portabilidade para
diversas plataformas quase que de graca.

Por outro lado, performance eh algo sempre relativo. Quando C foi 
lancado, era cerca de 20x mais lento do que o assembler. Ainda hoje,
um programa escrito em C pode ser _varias_ vezes mais lento do que um
escrito em Assembler. Quantos nessa lista que programam em C prefeririam
programar em Assembler e acham que o programa ficaria melhor? Por
outro lado, quando Java nasceu, dependendo da aplicacao, era cerca de 10 
a 20 vezes vezes mais lenta do que C++. E Java ja esta mais de 20x
mais rapida do que a versao original...

Em geral, quando as pessoas comecam a fazer rodeios para responder eh
porque vao responder no final algo que nao agrada. Nao eh o meu caso,
eu so cito essas coisas todas porque sao importantes, e muitos de
voces nessa lista sao obrigados a convencer seus superiores, ou seus
clientes, de que Java eh uma tecnologia poderosa. Ou seja, existe
dezenas de coisas pelo menos tao importantes quanto performance ao
se desenvolver uma aplicacao, e se voce olhar apenas para uma delas,
voce estara completamente errado.

>         Alguem pode me indicar URL's que demonstram estes testes (se
> existirem).

Tudo isso dito, eu sugiro que voces deem uma olhada na URL:

        http://java.sun.com/features/1999/04/hotspot.html

Que mostra casos reais de utilizacao do HotSpot, quando era ainda
versao beta. E os numeros ja impressionantes dessa tecnologia ainda serao
muito melhores, ja que o HotSpot esta na sua primeira versao, e muitas
melhorias que nao foram incluidas ainda virao com a tecnologia. 

Vejam abaixo alguns trechos do artigo, leiam e passem pra frente.
No geral, Java eh a tecnologia ideal para o desenvolvimento das
novas aplicacoes de rede. Nao desperdice o seu tempo tentando
dar voltas porque voce considera que esse ou aquele problema eh
limitante. Nenhuma outra tecnologia de desenvolvimento tem tanta
gente, de tantas empresas, trabalhando para a melhoria da tecnolgia.
A versao 1.2 de Java (sem o HotSpot) eh 20 vezes mais rapida do que
a versao 1.0.2. Que outra tecnologia deu esse ganho de performance na
sua aplicacao em um periodo de apenas 4 anos? E isso so tende a
melhorar.

Abracos,

Bruno.

Vejam abaixo alguns trechos do artigo (_enfases_ adcionadas por mim):

(...)
The results were surprising and consistent. In _virtually_every_case_, 
these real-world application developers say that, _at_a_minimum_, simply 
installing the Java HotSpot performance engine _doubled_the_performance_ 
of their server-side Java technology-based applications. In some cases, 
depending on the nature of the application, the pluggable Java HotSpot 
performance engine _turbo-charged_runtime_performance_four-fold_.

(...)
Both systems are transaction intensive, seeing as many as 20 request 
processes per second on Sun SPARCTM servers. "We did some testing with an 
earlier beta version [of the Java HotSpot performance engine], and were very
impressed," says Dr. Michael Christiansen, Ph.D., a consulting programmer 
with the $968 million wireless messaging and information provider. "We saw 
an overall performance boost on server-side apps, which was very 
encouraging. And the amount of time per transaction was _decreased_four_fold_." 

(...)
Heir says the most recent Java HotSpot performance engine beta (RC2) 
has _pushed_the_performance_ of their Java technology-enabled servers to 
_nearly_that_of_compiled_C++_. 

> 
>         Valeu.
> 
> Alysson Neves Bessani
> mailto:[EMAIL PROTECTED]
> LES- Software Engineering Laboratory
> UEM- Universidade Estadual de Maringa
> 
>     --------------------------- LISTA SOUJAVA ---------------------------
>     http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
>     [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
>     [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
>     ---------------------------------------------------------------------

-- 


Bruno.
______________________________________________________________________
Bruno Peres Ferreira de Souza                         Sun Microsystems
System Engineer - Java Technologist         [EMAIL PROTECTED]
        if I fail, if I succeed, at least I live as I believe

    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
    [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a