Reflection diminui a performance?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
jdeveloper
JavaTeenager

Membro desde: 04/08/2005 08:55:58
Mensagens: 160
Offline

Eu tenho uma classe com aproximadamente 30 métodos.
Os nomes desses métodos estão em um arquivo de configuração.
Eu queria chamar os métodos através de reflection.
Mas me disseram que provoca uma perda de performance significativa.

O que vcs acham?

[]s
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Chamar um método via reflection é significativamente mais lento que chamá-lo diretamente. Isso importa no seu caso?

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
jdeveloper
JavaTeenager

Membro desde: 04/08/2005 08:55:58
Mensagens: 160
Offline

louds wrote:Chamar um método via reflection é significativamente mais lento que chamá-lo diretamente. Isso importa no seu caso?


A aplicação atualmente demora em torno de 15 minutos para executar completamente. O que já é considerado bastante.

Então, se reflection vai deixar o sistema mais lento, não vale a pena.

Obrigado
fenrir
JavaEvangelist

Membro desde: 26/09/2002 13:06:19
Mensagens: 328
Localização: São Paulo
Offline

Se toda vez que você for chamar o método, o fizer usando Reflection, então a lentidão é considerável.

Mas se isso ocorrer apenas uma vez, a demora é desprezível, já que estamos falando de, no máximo, alguns poucos segundos (chutando absurdamente alto).

Agora, se estiver fazendo isso TODA vez que chama um método, não é caso de mantê-lo em cache?

Tem um Android? Gosta de tirar fotos? Que tal subi-las automaticamente para a internet? Dê uma olhada: http://autouploader.aguilarj.com
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.

O problema mais comum é banco de dados, seguido de I/O em disco.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
jdeveloper
JavaTeenager

Membro desde: 04/08/2005 08:55:58
Mensagens: 160
Offline

fenrir wrote:Se toda vez que você for chamar o método, o fizer usando Reflection, então a lentidão é considerável.

Mas se isso ocorrer apenas uma vez, a demora é desprezível, já que estamos falando de, no máximo, alguns poucos segundos (chutando absurdamente alto).

Agora, se estiver fazendo isso TODA vez que chama um método, não é caso de mantê-lo em cache?


Eu chamo apenas uma vez cada método, mas eu chamo mais de 30 métodos.
Então eu acho que a soma dos tempos seria muito alta.
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

louds wrote:Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.
O problema mais comum é banco de dados, seguido de I/O em disco.


Os meus foram respectivamente, Programadores incompetentes. Storage ( incluindo DB, Arq, ... ) Garbage collectors psicopatas

Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
jdeveloper
JavaTeenager

Membro desde: 04/08/2005 08:55:58
Mensagens: 160
Offline

louds wrote:Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.

O problema mais comum é banco de dados, seguido de I/O em disco.


Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.

Esse tempo é por causa das procedures?

cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

jdeveloper wrote:Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.

Esse tempo é por causa das procedures?


O que te leva a ter alguma duvida sobre isso?
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
fenrir
JavaEvangelist

Membro desde: 26/09/2002 13:06:19
Mensagens: 328
Localização: São Paulo
Offline

jdeveloper wrote:
fenrir wrote:Mas se isso ocorrer apenas uma vez, a demora é desprezível, já que estamos falando de, no máximo, alguns poucos segundos (chutando absurdamente alto).

Eu chamo apenas uma vez cada método, mas eu chamo mais de 30 métodos.
Então eu acho que a soma dos tempos seria muito alta.

Quando eu escrevi "alguns poucos segundos", me referi à soma de todas as chamadas, e não alguns poucos segundos para cada chamada! Se a linguagem demorasse tanto assim pra fazer Reflection, poucos programas em Java rodariam em velocidade maior que tartaruga!

jdeveloper wrote:Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.

Esse tempo é por causa das procedures?

Essa sua pergunta e seu comentário me levam a crer que você está chutando que a demora é por causa do Reflection. Já rodou um profiler? Ou um simples log pra ver exatamente onde está a demora na execução?

Tem um Android? Gosta de tirar fotos? Que tal subi-las automaticamente para a internet? Dê uma olhada: http://autouploader.aguilarj.com
[WWW]
jdeveloper
JavaTeenager

Membro desde: 04/08/2005 08:55:58
Mensagens: 160
Offline

fenrir wrote:
Essa sua pergunta e seu comentário me levam a crer que você está chutando que a demora é por causa do Reflection. Já rodou um profiler? Ou um simples log pra ver exatamente onde está a demora na execução?


Se você ler novamente os meus posts verá que eu não disse que estava usando reflection, e sim que estava pensando em usar. Pois, queria saber se a diminuição de performance, no meu caso, seria significativa.

Eu tenho pouco conhecimento de banco de dados e apesar de achar que a demora na execução era por causa da stored procedure, eu não tinha certeza disso. Pois, o Louds disse que I/O tb deixa o sistema lento e eu uso bastante leitura de disco.
fenrir
JavaEvangelist

Membro desde: 26/09/2002 13:06:19
Mensagens: 328
Localização: São Paulo
Offline

jdeveloper wrote:Se você ler novamente os meus posts verá que eu não disse que estava usando reflection, e sim que estava pensando em usar. Pois, queria saber se a diminuição de performance, no meu caso, seria significativa.

Ops....sorry!! My mistake!

jdeveloper wrote:Eu tenho pouco conhecimento de banco de dados e apesar de achar que a demora na execução era por causa da stored procedure, eu não tinha certeza disso. Pois, o Louds disse que I/O tb deixa o sistema lento e eu uso bastante leitura de disco.

Mas descobrir se o problema é a procedure é relativamente simples: veja quanto tempo demora (pegando a hora de início e a hora de fim). E talvez fazer um "profile" no banco também seja interessante. De repente a inclusão de alguns índices nas tabelas não acelere consideravelmente o processo...

Tem um Android? Gosta de tirar fotos? Que tal subi-las automaticamente para a internet? Dê uma olhada: http://autouploader.aguilarj.com
[WWW]
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

Eu chuto que invocar 30 métodos apenas uma vez não vai causar um prejuízo considerável de performance. É um palpite...

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Pra que chutar? Pega um profiler e ve, uai.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team