O título do tópico foi a seguinte frase de um cara que me entrevistou numa empresa. Depois de ter gasto uma grana com uma equipe de desenvolvedores Java para um projeto que durou 6 meses e que não teve êxito o diretor de ti da empresa decidiu “matar” a equipe e voltaram para o desenvolvimento em Delphi.
Depois disso fiquei pensando, Java para desktop pode até ser pesado (acho) mas para web ele é tão bem cotado, existem vários sistemas de banco e do governo desenvolvidos em Java, eu particularmente ADORO Java.
Já percebi também que, aqueles que mais “chegam o reio” em outras linguagens são porque não tem muito conhecimento dela e sempre acabam puxando a sardinha pro seu lado.
Comparando C#.Net e Java são parecidíssimas!! Até as classes de conexão com banco são praticamente iguais e já me disseram que C#.Net abstraiu toda a funcionalidade boa de Java.
Por que esse povo que não sabe muito bem Java fala tão mal de Java?
Java para desktop é mesmo pesadão?
E para Web?
Para as maquinas de hoje, que tem no minimo 1gb de ram e outras coisas… java não é pesado.
mas se for usar uma maquina de 5 anos átras aí sim ele pode se tornar pessado…
Porque Java pra Desktop era ruim. Podem me ignorar ou falar que estou errado, mas antes era lento e não tem nada que me faça pensar o contrário. Me desculpem a grosseria, mas já vi muita gente comentando que não é lento, que é só saber programar direito, mas ainda assim não me convenci.
Hoje é um pouco diferente… Ocorreram algumas alterações no Java 6 Update 10 (se não me engano, e no 7 está para melhorar mais ainda) que melhoraram a performance, então é bem provável que as coisas comecem a melhorar pro lado do Swing. Mas assim… Acho que Delphi é bem produtivo também, as vezes até mais que Java quando se trata de botõezinhos e caixinhas e formulários pra sistemas Desktop.
Sobre o Java 7, não lembro direito onde que li isso, mas ele vai ser quase 50% mais rápido que o Java 6. O Java 6, quando comparado ao 5, foi um pouco menos que 20% mais rápido. Acho que de uns tempos pra cá as coisas podem melhorar pro Java pra Desktop, quando Swing é usado. Eu, particularmente, já vi uma boa melhora na velocidade de aplicações Swing.
Dá uma procurada por Java 7 Performance. Devem ter vários artigos bem interessantes sobre esse tipo de coisa.
Pra desktop, tem existe o tempo de carregar a máquina virtual e mesmo as versões atuais consomem mais memória e são mais lentas que um aplicativo nativo, como o Delphi.
Pra Web a situação inverte, os aplicativos em Delphi são muito mais pesados e não tem a mesma performance, além dos programas ficarem grandes e gerarem muito tráfego de rede.
Mas mesmo pra desktop, existe o ganho de segurança e estabilidade que acredito compensarem o uso de Java. Uma aplicação em Java pode até demorar um pouco mais pra ser feita e precisar de um profissional com um pouco mais de conhecimento, mas em compensação é muito mais produtivo de dar manutenção. Dependendo da aplicação, isso faz toda a diferença.
E pra máquinas atuais, principalmente as que irão rodar esse tipo de aplicações, o processamento e memória dão e sobra. Se você tem 1 Gb de RAM e vai rodar só a sua aplicação de PDV, que diferença faz se o sistema vai precisar de 2 Mb ou de 12 Mb?
Provavelmente não era uma equipe com conhecimento suficiente ou não tinha um lider para alinhar as coisas.
O que eu quero dizer é que Delphi é mais produtivo porque você consegue fazer uma tela em instantes. Mas, por exemplo, se for um sistema grande que necessite de portabilidade e escalabilidade, talvez Delphi não seja a melhor opção. Já em outros casos, pode ser bacana. Tudo depende do que o usuário deseja e quanto preparada está sua equipe.
Já sobre performance, há muito tempo isso vem sendo discutido. Segundo alguns testes, por Java usar o JIT (http://pt.wikipedia.org/wiki/JIT), depois de um certo tempo de execução, a performance chega a ser muito próxima a C++. Ou seja, performance não pode ser usada como desculpa para não usar Java.
Já sobre performance, há muito tempo isso vem sendo discutido. Segundo alguns testes, por Java usar o JIT (http://pt.wikipedia.org/wiki/JIT), depois de um certo tempo de execução, a performance chega a ser muito próxima a C++. [/quote]
O problema é você esperar esse “algum tempo de execução”. Pra rotinas repetitivas, esse argumento talvez seja válido, mas caso contrário tem perda de performance mesmo. Só que pras máquinas de hoje não faz tanta diferença sua máquina levar 2 segundos ou 3 segundos pra realizar a tarefa.
Já sobre performance, há muito tempo isso vem sendo discutido. Segundo alguns testes, por Java usar o JIT (http://pt.wikipedia.org/wiki/JIT), depois de um certo tempo de execução, a performance chega a ser muito próxima a C++. [/quote]
O problema é você esperar esse “algum tempo de execução”. Pra rotinas repetitivas, esse argumento talvez seja válido, mas caso contrário tem perda de performance mesmo. Só que pras máquinas de hoje não faz tanta diferença sua máquina levar 2 segundos ou 3 segundos pra realizar a tarefa. [/quote]
Fala Marcos. Bom, pesquisando melhor, encontrei um post de um colega meu que testou o “certo tempo” que me referi, e parece ser bem mais curto do que pensei. Veja e me diga o que você acha sobre isso:
Esse exemplo é um caso de loop ou recursão, onde realmente o JIT ajuda. Mas em casos onde não há loop ou rotina chamada mais de uma vez, não há tanto ganho.
Daí vai pela média de repetições que cada programa tem.
[quote=marcosalex]Esse exemplo é um caso de loop ou recursão, onde realmente o JIT ajuda. Mas em casos onde não há loop ou rotina chamada mais de uma vez, não há tanto ganho.
Daí vai pela média de repetições que cada programa tem.[/quote]
Como ?
Então qual o teste que você sugere para performance ?
Eu já vi algumas aplicações C++ serem substituídas por aplicações Java, ambas de desktop. O Java tem boas ferramentas de profiling, coisa que você não encontra por aí em qualquer lugar. Agora, o que é performance para ele? Se for rodar em uma máquina muito tabajara, realmente, o Java é pior que o Delphi.
Os maiores problemas do Java, na minha opinião, ainda são o consumo de memória e o fato do Swing ser uma API pesada. Acho que ele seria pesado em qualquer lugar que fosse implementado, pois ele suporta múltiplos look&feel e faz a renderização de tudo usando a API de desenho do SO, não a API de componentes nativos. Por outro lado, ele é extremamente poderoso e personalizável, coisa que o Delphi não é.
Para desktop tempo real é realmente lento… quase inviável, dependendo da situação.
EX:
Há uns 3 anos, na faculdade, fiz um soft para fazer leituras de um ADC (Conversor analógico-digital) pela porta paralela em java desktop.
Úsei gráficos do jfreechart… um ‘velocímetro’ em tempo real, um estilo ‘eletrocardiograma’… o soft ficou muito bom…
porém na hora de fazer as capturas de amostra de sinal, havia uma distorção na frequência de captura e a amostra não prestava mais…
Coloquei em uma thread separada… o problema diminuiu, porém ainda continuou…
precisei fazer uma classe a parte, sem interface gráfica, chamando pelo prompt e gravando num arquivo…
depois de colhida a amostra eu abria o soft e analisava!!!
teoricamente, pelo menos em relação ao C++ , é 100% mais lenta…
visto que, enquanto o C conversa direto com a máquina, o java tem um intermediário: VM
Lá na empresa nós usávamos um messenger chamado Spark, o pessoal dizia que ele era feito em Java e que caía muito durante a conexão, sem contar que consumia muita memória. Essa afirmação é verdadeira ou é só mais uma desculpa pra por a culpa no Java?
[quote=lauronolasco]Para tempo real é realmente lento… quase inviável, dependendo da situação.
EX:
Há uns 3 anos, na faculdade, fiz um soft para fazer leituras de um ADC (Conversor analógico-digital) pela porta paralela em java desktop.
Úsei gráficos do jfreechart… um ‘velocímetro’ em tempo real, um estilo ‘eletrocardiograma’… o soft ficou muito bom…
porém na hora de fazer as capturas de amostra de sinal, havia uma distorção na frequência de captura e a amostra não prestava mais…
Coloquei em uma thread separada… o problema diminuiu, porém ainda continuou…
precisei fazer uma classe a parte, sem interface gráfica, chamando pelo prompt e gravando num arquivo…
depois de colhida a amostra eu abria o soft e analisava!!!
teoricamente, pelo menos em relação ao C++ , é 100% mais lenta…
visto que, enquanto o C conversa direto com a máquina, o java tem um intermediário: VM[/quote]
É facil fazer um software “nas coxa” e colocar a culpa no “JAVA”.
vc viu o código pra dizer que é “nas coxas”???
vc ja trabalhou com alguma tarefa de precisão em função do tempo com java???
em nenhum momento eu coloquei a culpa no java…
mas é inegável que pra trabalhar com desktop ele é mais lento…
dependendo do seu problema, essa diferença no tempo pode não influenciar o resultado final…
ou pode… como foi o meu caso!!!
Acho que a grande questão é avaliar o que estava causando a perda de desempenho.
Rede, acesso ao BD, algoritmos mal implementados, criação de objetos desnecessários… Se for feita uma avaliação é bem provável que o problema esteja fora da JVM.
Porém as vezes é mais fácil colocar a culpa no que não está sobre o nosso controle.