Java é pesado e lento, acho q vou voltar p Delphi

35 respostas
touresfinge

Ola pessoal!

Estou adorando programar em Java, mas só q as aplicações em Java para Desktop, ficam muito pesadas e lentas, alguém saberia como resolver isso ? Ou será q realmente não tem jeito …

Estou pensando em voltar p Delphi …

Se alguém souber d uma solução p favor … me ajudaria muito … gostaria de continuar c Java …

Um grande abraço a todos …

35 Respostas

getAndSet

Olá realmente java ainda esta um pouco “pesado” para desktop se seu programa sera somente para windows eu adotaria .Net apesar de gosta muito de java mais se seu software tende-se a ser multiplataforma quando vc chegar para fazer um negocio e falar que seu software roda em varios S.O isso vai fazer a diferença…
Existe o SWT em java, ouvi falar que é mais leve que o swing… mais vc pode dar uma pesquisada sobre o SWT para ter certeza…

a questao é multiplataforma ou windows ?

flw

Rodrigo.Lima

Nem é tão lento assim. Baixa o java 6.

touresfinge

Eu ja uso a versão 6, e até q a interface grafica num ta muito lenta msm não, o q fica lento é a conexão c o BD, tou usando mysql, e qdo trabalhando c uma qtidade de dados razoavel fica dvagar, tipo importar um arquivo d Texto c umas 3000.000 linhas , em java no tempo q eu importo 10.000 eu importo as 3000.000 linhas e gravo no BD, então tou preocupado mais na frente, qdo estiver c muitas informações e o sistema ficar muito lento c os clientes. C Delphi n vou ter esse problema, pq ja tenho aplicações rodando em Delphi.
Eu gostaria muito d uma aplicação Multi-plataforma, pq eu adoro Linux. Meu Pc e not, são particionados c os 2 S.O, p isso a escolha p Java, já q eu Rodo o msm codigo nos S.O diferentes …

Bom é isso … então se alguém tiver alguma dica, desde já agradeço, pq num queria deixar Java não , adoro muito essa linguagem …

R

Importar de arquivo texto?
De uma pesquisada no pacote java.nio.

A performance do pacote java.nio é maior que em C++.

dkotvan

Não deveria estar tão lento comparado ao Delphi, e nem necessariamente mais lento.
Você pode postar o trecho do código que faz esta operação? Talvez o pessoal do forum possa ajudar a ver o que tem de errado.

pcalcado

Olá,

Por acaso você está fazendo tudo na mesma thread?

Basicamente, se você estiver, a aplicação fica parada enquanto espera a resposta. Você deve utilizar outra Thread.

Procure no Google sobre SwingWorker. Um pouco de Google também:

http://www.google.com.br/search?hl=pt-BR&q=swing+threads&btnG=Pesquisar&meta=

urubatan

O SwingWorker vai te ajudar bastante, mas tem também a forma de programar …

um exemplo bem simples só pra ilustrar o que eu estou falando …

tente executar estes dois códigos (estou escrevendo aqui no forum, pode ter algum errinho):

public class Teste{
public static void main(String[] args){
String out = "";
for(int i=0;i<100000;i++){
out = out + i;
}
System.out.println(out);
}
}

e este:

public class Teste{
public static void main(String[] args){
StringBuilder out = new StringBuilder();
for(int i=0;i<100000;i++){
out.append(i);
}
System.out.println(out.toString());
}
}

Dica, execute o segundo primeiro, pois o primeiro exemplo vai demorar muito para rodar …

para leitura do arquivo, você esta usando substring ou o Scanner?

o scanner vai te dar uma performance muito melhor se em utilizado …

ou seja, se você souber utilizar, o java vai ter uma performance excelente …
usando isto em conjunto com o SwingWorker vai ficar muito boa a performance, possivelmente melhor que no delphi …

urubatan

ahh, mais uma coisa …
se não me engano o swingworker ja esta incluido no java6

bzanchet

Acho que deu pra perceber a principal desvantagem do java, não é?

A longa curva de aprendizado. :smiley:

touresfinge

Vejam só parte do codigo:

FileReader reader01 = new FileReader(caminho);                           
             BufferedReader leitor01 = new BufferedReader(reader01);                 
             while ((linha = leitor01.readLine()) != null) {
                 if ( linha.substring(0,2).equals("10")) {
                     if ( telaImportacaoSintegra.importacaoSintegra.jChkR10.isSelected() == true ) {
                         dado01 = linha.substring(0,2) ;
                         dado02 = linha.substring(2,16) ;
                         dado03 = linha.substring(19,30) ;
                         dado04 = linha.substring(30,65) ;
                         dado05 = linha.substring(65,95) ;
                         dado06 = linha.substring(95,97) ;
                         dado07 = linha.substring(97,107) ;
                         dado08 = linha.substring(107,115) ;
                         dado09 = linha.substring(115,123) ;
                         dado10 = linha.substring(123,124) ;
                         dado11 = linha.substring(124,125) ;
                         dado12 = linha.substring(125,126) ;
                         
                         // - Formata campos
                         dado08 = dado08.substring(0,4) + "/" + dado08.substring(4,6) + "/" +
                                 dado08.substring(6,8) ;                                                          
                         dado09 = dado09.substring(0,4) + "/" + dado09.substring(4,6) + "/" +
                                 dado09.substring(6,8) ;                                                                                       
                         
                         // - Grava no Banco de dados
                         this.setReg10(Integer.toString(codigo10) , dado01 , dado02 , dado03 ,
                                 dado04 , dado05 , dado06, dado07, dado08 , dado09, dado10 ,
                                 dado11 , dado12 ) ;
                        i ++ ;                         
                     }
                 }

}

E estou usando tdo dentro do SwingWorker .
Uso o substring , não sei usar o scaner, mas vou pesquisar …

Vlw msm galera pelas dicas q estão me dando, realmente o aprendizado é um poko complicado e n tenho grande tempo o q me prejudica muito.

Parei c Delphi e começei a estudar Java, logo depois estava desenvolvendo e sanando as Duvidas c as necessidades, com certeza uma pessima forma de aprendizado, mas eu n poderia parar d desenvolver e apenas estudar …

Bom VLW MSM …

pcalcado

Olá,

Recomendo que você estude bastante Java antes de pensar em fazer esta comparação e de colocar código em produção. Este trecho mostra que você precisa entender mais sobre estruturas básicas como arrays e buffers (que são os mesmos de Delphi, aliás), além de classes da biblioteca padrão que fazem o que você está fazendo na mão e conceitos como dividir um programa em funções menores.

Quanto ao arquivo, a menos que estejamos falando de milhões de linhas não há porque utilizar NIO. O problema no caso parece ser que você lê do arquivo e salva do banco em cada em cada linha. Guarde estes registros em uma lista e faça essa inserção de uma vez.

A propósito, você abre uma conexão com o banco de dados cada vez que faz um insert? Se sim altere isso apra reutilizar a mesma conexão em todos eles.

cv1

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html#addBatch()

touresfinge

Como eu coloco tdo em uma lista e faço a inserção de uma só vez?

J
neofito

bzanchet:
Acho que deu pra perceber a principal desvantagem do java, não é?

A longa curva de aprendizado. :D

a questão é que com java você faz programas de verdade. Se você quer algo realmente fácil, faça uma experiência com VB e depois volte e diga o que achou. :wink:

Digo isso porque eu vim do VB, e prefiro muito mais a a curva de aprendizado longa de uma plataforma extremamente rica como o java, com a vantagem de se poder fazer algo realmente certo, do que toda a facilidade de uma plataforma pobre.

maquiavelbona

neófito:

a questão é que com java você faz programas de verdade. Se você quer algo realmente fácil, faça uma experiência com VB e depois volte e diga o que achou. :wink:

Digo isso porque eu vim do VB, e prefiro muito mais a a curva de aprendizado longa de uma plataforma extremamente rica como o java, com a vantagem de se poder fazer algo realmente certo, do que toda a facilidade de uma plataforma pobre.

Bom dia!

Ano novo, vida nova, né pessoal. Sem partidarismo aqui, por favor. O que achas pode estar certo ou não. Quando puder provar que VB é uma plataforma “pobre” ou que o Java é tão mais “rico”, ou que se faz algo certo em Java e errado em VB, poste aqui para nos iluminarmos. Cada coisa tem sua colocação, uso e intuito.

Até!

neofito

maquiavelbona:

Bom dia!

Ano novo, vida nova, né pessoal. Sem partidarismo aqui, por favor. O que achas pode estar certo ou não. Quando puder provar que VB é uma plataforma “pobre” ou que o Java é tão mais “rico”, ou que se faz algo certo em Java e errado em VB, poste aqui para nos iluminarmos. Cada coisa tem sua colocação, uso e intuito.

Até!

Não é partidarismo. E não preciso provar o que vc pede para provar, todo mundo já sabe que é verdade. Na empresa onde eu trabalhava, migramos de VB para java para ter mais poder e flexibilidade. E também não disse que o VB não serve para nada, só que para certas situações a “facilidade” que ele propõe mais atrapalha do que ajuda.

A minha intenção foi contribuir com o assunto do tópico. Não acho correto afirmar algo arbitrariamente sem explicar os motivos daquilo ser do jeito que é. Volto a dizer, java é “complicado” (discordo totalmente disso) porque oferece recursos avançados que lhe permitem fazer programas de verdade, o que não vejo no, por exemplo, VB.

Ah, se vc reparar bem, não falei sobre Delphi, o qual já estudei mas não cheguei a trabalhar, mas falei de VB, uma experiência pessoal.

Desculpe se ofendi alguém.

maquiavelbona

Desculpe, mas não consigo evitar no primeiro dia inútil do ano.

Falácias:

Falácia de Composição

neófito:
… Volto a dizer, java é “complicado” (discordo totalmente disso) porque oferece recursos avançados que lhe permitem fazer programas de verdade, o que não vejo no, por exemplo, VB.

Versão distorcida de Argumentum ad hominem e de Argumentum ad ignorantiam

Além de ter no contexto: Generalização Apressada, Petitio Principii.

Realmente peço desculpas por isso, mas as premissas que utilizaste não compõe uma argumentação favorável a seu ponto de vista.

Linguagem de programação é pior do que fundamentalismo, quando se tem uma linguagem-guia, é difícil abrir os seus horizontes para outras linguagens e não recriminar as contrárias.

Até!

Rodrigo.Lima

Mais um filósofo.

Se a pessoa tivesse que provar sua dúvida em cada pergunta e provar cada argumento e/ou cada resposta neste forum, ele nem existiria.

Neófito não falou nenhuma mentira.

neofito

maquiavelbona:
Desculpe, mas não consigo evitar no primeiro dia inútil do ano.

Sem palavras… :shock:

maquiavelbona

Rodrigo.Lima:
Mais um filósofo.

Se a pessoa tivesse que provar sua dúvida em cada pergunta e provar cada argumento e/ou cada resposta neste forum, ele nem existiria.

Neófito não falou nenhuma mentira.

Não sou filósofo e nem nada. “Sou apenas um rapaz latino-americano, sem dinheiro no banco…”.

Se ele não falou nenhuma mentira, pede para ele usar esses argumentos numa tese. Não pedi e nem quero que ele me prove nada, só estou alertando para o que ele disse.

Se eu dissesse que VB, C#, COBOL, Lisp etc são mais “ricas” que Java, estaria eu dizendo mentiras?

Sem palavras… :shock:

Pessoas estão felizes pelo primeiro dia útil do ano, eu estou achando um dia inútil. Oras…

neofito

maquiavelbona:
Rodrigo.Lima:
Mais um filósofo.

Se a pessoa tivesse que provar sua dúvida em cada pergunta e provar cada argumento e/ou cada resposta neste forum, ele nem existiria.

Neófito não falou nenhuma mentira.

Não sou filósofo e nem nada. “Sou apenas um rapaz latino-americano, sem dinheiro no banco…”.

Se ele não falou nenhuma mentira, pede para ele usar esses argumentos numa tese. Não pedi e nem quero que ele me prove nada, só estou alertando para o que ele disse.

Se eu dissesse que VB, C#, COBOL, Lisp etc são mais “ricas” que Java, estaria eu dizendo mentiras?

Meu amigo, quem aqui está querendo fazer uma tese?! Eu só não procurei dar detalhes do que “todo mundo já sabe” porque eu tenho o que fazer, estou no trabalho, não estou sentado em um quarto escuro me masturbando em frente ao pc. Se vc fosse um pouquinho prático talvez tivesse entendido o que eu quis dizer, mas como parece ser tão intelectual e acadêmico…

Na boa, pára com esse assunto que já tá chegando ao ridículo.

Ponto.

[editado]
Não me manifesto mais nesse tópico.
[/editado]

Rodrigo.Lima

maquiavelbona:
Não sou filósofo e nem nada. “Sou apenas um rapaz latino-americano, sem dinheiro no banco…”.
Comediante?

maquiavelbona:
Se ele não falou nenhuma mentira, pede para ele usar esses argumentos numa tese. Não pedi e nem quero que ele me prove nada, só estou alertando para o que ele disse.
Isso aqui é um forum de internet ou o q?

maquiavelbona:
Se eu dissesse que VB, C#, COBOL, Lisp etc são mais “ricas” que Java, estaria eu dizendo mentiras?
Depende do propósito.

Vc dormiu com o Bozo noite passada?

maquiavelbona

…?

Cuidado com o que está dizendo. Não o ofendi, exijo o mesmo tratamento. Realmente, procurar saber expor idéias agora é ser “intelectual e acadêmico” e o contrário é ser prático.

Estou vendo que chegar mais cedo do almoço do meu dia de trabalho não está mais valendo a pena.

Até!

maquiavelbona

Não sou mais comediante do que alguém que me chama de filósofo sem saber do que se fala realmente e faz piadinhas infames. Quis somente alertar sobre mais uma forma de “Esse é melhor do que esse pois eu digo que sim”, para que pudéssemos puxar o tópico para os assuntos sobre performance, usos, plataformas etc, e não para virar alguma agressão. Se o que eu disse depende do propósito, porque o mesmo não vale para a afirmação do Neófito?

Cansei de tentar continuar um rumo plausível para esse tópico. Até!

touresfinge

Nossa , qdo comecei este topico num imaginei q geraria tanta discordia …
Bom seguinte pessoal, Otima ajuda d tdos, meu muito obrigadu …!!!
Acho q cheguei no seuinte ponto, minha humilde opnião, p favor, é o q eu acho :

Cada um deve utilizar a linguagem c a qual possui mais familiaridade, pq o q realmente vai importar vai ser o produto final, ou seja, um mero cliente não quer saber em qual linguagem o sistema foi desenvolvido, mas se realmente vai lhe atender da melhor forma possivel, lhe oferecendo as ferramentas necessarias para lhe manter no mercado. Qto a bando d dados sim, ha uma certa diferenca a considerar…
Então cada um c a linguagem q julgar melhor e mais eficiente para seu proposito … sem desmerecer qquer outra …, nas mãos da pessoa certa qquer uma se torna uma ferramenta poderosa , e eu tb percebi q n tenho tdo o conhecimento d vcs para entrar d kra em Java, talvez algum dia, depois de muitoe estudo … bom é isso pessoal …

Mais uma vez, meu muito obrigadu …!!!

Rodrigo.Lima

Seu problema é que chegou aqui querendo dar uma de espertão, querendo dar aula.

Tb sou filosofo, escuta essa “maquiavel”:

Quem fala o que quer, escuta o q nao quer.

clodoaldoaleixo

Não entendo pq programadores java gostam tanto de falar mal da M$…eu programao em VB,C# e Java tb…pra mim é tudo a mesma merda que me faz ganhar dinheiro…

O tópico era apenas de dúvidas do rapaz sobre melhor desempenho em java…pq tem que vir alguem comparar com VB, o cara tava falando de Delphi…acho engraçado isso…parece necessidade de auto-afirmação.

ViniGodoy

Oi!

Eu também vim do Delphi. Realmente, o swing é um pouco mais pesado. Mas tem que considerar algumas coisas:

  1. O java é multi-plataforma. Tive uma experiência muito melhor com ele do que com o Kylix.

  2. O Swing também é muito mais flexível do que a VCL. Pegue por exemplo a JTable e estude a fundo, você vai ter agradáveis surpresas. Praticamente tudo é possível com um JTable.

  3. O Java é gratuito. Também tem diversas bibliotecas prontas gratuitas.

  4. Não se apresse em falar mal da linguagem java, antes de conhecer as bibliotecas. Muitas, vezes o problema de performance está na implementação e não na linguagem em si. As bibliotecas ajudam muito nesse sentido, pois fornecem, assim como no Delphi, funções prontas e extremamente otimizadas. É o caso das HashTables, ou do método Collections.sort().

  5. Finalmente, baixe um profiler. O Eclipse tem um, o Netbeans tem outro, e tem até alguns profilers em separado, como o EJP. Eles medem o tempo que cada método leva e te mostram onde estão os seus gargalos. Você vai notar que o problema normalmente é o próprio código, não a linguagem e muito menos o garbage collector.

  6. É muito fácil trabalhar com multiplas threads em Java. Isso te ajuda a dar uma aplicação mais responsiva e que melhore a percepção do usuário.

Eu realmente gostei de fazer a migração. O Delphi é uma ótima plataforma, sou um grande fã da Borland. Mas o Java não deixa nada a perder.

Quanto ao VB… O VB.net está muito bom. Mas tenho que concordar com as “críticas” ao VB6, que creio ter sido o VB mais difundido até hoje. Ele não suportava realmente orientação à objetos, fazia grande propaganda das variáveis “Variant” (que além de lentas deixavam o código confuso, especialmente na ausência de um “Option Explicit”), tinha um suporte péssimo ao tratamento de erros (quem nunca viu um “On error resume next” em algum lugar?) e não tinha qualquer suporte nativo a múltiplas threads (chamar API do Windows direto não é suporte nativo). Fora o fato de funções serem publicas por default…

Claro, para quem é bom programador, nada disso é problema… mas seriamos abençoados se as empresas só tivessem bons programadores.

touresfinge

Kra gostei de sua argumentação.
Vou dar uma pesquisada nos topicos q vc mencionou.
Eu gosto d Java, pelo pouco q sei e o pouco tempo q utilizo, realmente eu gostei.
Como já disse, apenas achei lento, mas deve ser msm meu codigo, tou baixando o profiler e vou dar mais uma olhada aki …

VLW kra …!

S

Experimente usar SWT ao invés de Swing. É mais rápido e tem a “cara” do SO.

Lich_King

onde q tem esse profiler no netbeans?? é algum plugin?

Rodrigo.Lima

www.netbeans.org

pcalcado

O usuário realmente não quer saber se você escreveu o programa em X, Y ou Z, e nem se usou as melhores práticas. Ele quer algo que funcione.

Agora, ele também não vai querer saber se uma mudança simples tem que afetar 1000 arquivos e exige testar o sistema todo de novo porque você escolheu uma plataforma tecnológica ruim, le quer apenas que funcione.

Cuidado.

fmeyer

experimenta trocar o engine de tabelas de InnoDB para MyISAM, se voce nao estiver usando transacoes pesadas.

Criado 30 de dezembro de 2006
Ultima resposta 4 de jan. de 2007
Respostas 35
Participantes 17