Regras de Programação  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Interessante. Qual é o link para download da prova?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Lintz_net
JavaBaby

Membro desde: 02/08/2006 15:27:06
Mensagens: 79
Offline

ViniGodoy wrote:Trabalhei por 9 anos com sistema de tempo real, onde a performance é crítica. Aqui vão algumas dicas de performance:
1. Fuja dos mitos! Procure artigos sérios, de profissionais da área sobre performance (como os do Goetz, no caso do Java). Muitos mitos vão fazer você ter comportamento ridículo, como declarar final em tudo, usar métodos estáticos em todo lugar, ou achar muito importante usar ++i no lugar de i++ no Java.

2. Lembre-se que otimização custa caro, tanto para se desenvolver, quanto para manter o código depois. Portanto, otimize apenas quando for estritamente necessário;

3. Use um profiler para identificar onde otimizar (bons profilers são a VisualVM e o profiler do Netbeans). Geralmente os problemas de performance estão em pequenos gargalos, e são eles que devem ser otimizados.

4. Use um profiler, para saber se sua modificação realmente surtiu efeito. Se não surtiu, desfaça a modificação.

5. Quando o assunto for otimização, nunca queime uma dessas etapas:

a) Você precisa de um código eficaz: Seu código ainda não faz o que tem que fazer? Então não é hora de otimizar. Aproveite essa etapa para montar uma sólida bateria de testes unitários, se possível.
b) Torne seu código eficiente: Muito provavelmente, os primeiros problemas de performance serão erros bobos. Um algoritmo errado, uma estrutura de dados errada, uma operação feita no momento errado, etc. Simplesmente corrija esse problema e substitua algoritmos por outros melhores, sem perder flexibilidade ou legibilidade do seu código.
c) Torne seu código especializado: Ou seja, veja se não há possibilidades de otimização para seu problema em especial. Inclui: descartar processamento de dados desnecessários, fazer caching de dados comumente usados, usar algoritmos específicos para o problema. Um exemplo clássico é o algoritmo A* para processamento de mapas. Ele funciona desde que você possa estimar que direção seguir (o que não é o caso para mapas com teletransporte).
d) Torne seu código específico: Seu código agora passará a ser dependente de um determinado hardware ou SO. Inclui otimizações sinistras específicas de plataforma ou uso de hardware específico.

Note que queimar etapas é prejudicial pois quanto mais você avança, mais específico seu código se torna, mais tempo você levará para desenvolver e mais caro ele se tornará. Depois de cruzar a letra b), cuidado! Mudanças de condição no ambiente poderão afetar o seu programa.

6. Aprenda estruturas de dados, e saiba quando usa-las em cada caso.

7. Conheça bem as tecnologias que está trabalhando, e procure seguir as recomendações de quem às produz. Um exemplo disso, no Java, é usar StringBuilder no lugar de concatenação de Strings, ArrayList no lugar de Vector. No C++ é evitar o lançamento de exceptions. Leia atentamente a documentação e entenda o que está fazendo, ao invés de só copiar e colar exemplos da internet (essa dica vale não só para performance);

8. Tente procurar APIs específicas para seu problema, e avalia-las. Redesenvolver para obter mais performance entra na alternativa c), dos passos ali em cima.


É importante entender que performance é um conceito relativo. Ou seja, procure definir parâmetros reais e mensuráveis do quão rápido o código deve ser. Numa aplicação web, por exemplo, os tempos de resposta geralmente podem ser muito altos, diferentes de uma aplicação feita para uma injeção eletrônica. Entender esses parâmetros permite que você foque seu investimento em performance na medida certa.


Olá Vini, tudo bem?

Cara muito boa suas dicas...

Atualmente, eu estou com uma aplicação q tbm é em tempo real, e q está com uma performace muito ruim. Nem sabia por onde começar, mas depois deste topico pelo menos tenho um roteiro a seguir...

Só queria saber(se for possivel) quais as técnologias que você usou neste projeto real time, pois, o meu projeto está usando muitos componentes na tela e o acesso ao banco é feito usando EJB(não pode ser acesso direto ao banco pela aplicação - questões de segurança da empresa)

Tem alguma dica, além das que vc passou Viny?(rsrsrs)

Abraços.
[Email]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não pense duas vezes. Comece fazendo profiling de tudo. Há profilers para todas as camadas java, e a maior parte dos bons bancos de dados tem profilers também. Use para isso o VisualVM, que já vem com o próprio JDK:
https://visualvm.dev.java.net/

Se você usa MySQL como servidor de banco (é uma opção de vários), dê uma olhada em:
http://www.mysqlperformanceblog.com/


Além disso, no caso de aplicações para usuários finais, tente também lidar com a performance percebida. Isso é, mostrar corretamente barras de progresso, e dar sinais de que a aplicação não travou. Um usuário leva pouco mais de 2 segundos para ficar insatisfeito com um programa que não responde, mas pode estar disposto a esperar vários minutos para um com uma barra de progresso que dá, na maior parte do tempo, estimativas precisas de tempo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team