SlideShare una empresa de Scribd logo
1 de 17
J2ME
          J2ME
     Otimização

  Leonardo Melo Santos
  leonardomelosantos@gmail.com
J2ME
Tópicos
•
•
•
    Otimização
    Porque otimizar?
    O que fazer para otimizar?
•   Tipos de otimização
•   Práticas de otimização
J2ME
Otimização
 No ambiente computacional, aplicar técnicas de
otimização é uma tarefa de extrema importância e
    relevância. Quando estamos falando de um
   ambiente para dispositivos móveis, torna-se
               fundamental otimizar.
J2ME
Porque otimizar?
• Limitações do hardware (processamento,
  armazenamento, memória, ...)
• Tamanho da aplicação final.
   – Em determinados dispositivos, o tamanho máximo de uma
     aplicação JME não pode ultrapassar certa quantidade de
     kilobytes.
   – Espaço de armazenamento é escasso. Quanto menor o
     tamanho, maior o número de aplicações instaladas.
• Custo de telefonia.
   – Quanto mais rápido e quanto menos bytes forem
     enviados/recebidos, mais barato sai o custo da conexão.
   – Ao baixar uma aplicação, quanto menor, menor o custo e
     menos tempo de espera.
• Pequenas mudanças podem trazer benefícios
  consideráveis.
J2ME
Porque otimizar?
 CUIDADO! Porque otimizar se nem testado foi? Porque
     otimizar se aplicação atende às necessidades do
    usuário? Tempo é muito valioso nos dias de hoje.


• Martin J. Hells em “J2ME Game Programming”
  – “Não tente otimizar código que você pensa que é
    lento, otimize aquilo que você sabe que é lento”.
J2ME
O que fazer para otimizar?
• Aplicar práticas para melhorar a performance e a
  aplicação de uma maneira geral.
• Diminuir o tamanho do código-fonte, do aplicativo
  como um todo e das imagens PNG.
• Usar Obfuscators
  – O objetivo principal de obfuscation é dificultar a
    engenharia reversa do código Java™.
  – Obfuscators também reduzem o tamanho do código-
    fonte, “renomeando” identificadores e assinaturas de
    métodos.
J2ME
Tipos de otimização
• Otimização de alto nível
  – Foco seria o desenho do código-fonte e seus
    algoritmos.
  – Dentre as possíveis soluções, a melhor em custo X
    benefício.
  – Algoritmo correto = solução adequada
• Otimização de baixo nível
  – Atenção direcionada para pequenos trechos de código
    (às vezes, algumas linhas de código).
  – Maioria das vezes a atenção é voltada para o que
    pode ser melhorado na implementação de métodos,
    na sua declaração e nos seus parâmetros de entrada.
J2ME
Práticas de otimização (1/9)
• Evitar heranças principalmente as muito
  profundas (classe que herda de classe que herda
  de classe etc.)
  – Classes derivadas tem que gastar tempo e espaço
    com dados herdados mesmo que sem usá-los
  – Um método quando não encontrado é procurado na
    hierarquia de classes o que gasta tempo e
    processamento
  – Caso a subclasse não use muito dos métodos e dados
    da superclasse, analise se não é possível criar uma
    nova classe
J2ME
Práticas de otimização (2/9)
• Evitar inner classes (classes aninhadas) e classes
  que realmente sejam desnecessárias.
  – Com inner classes, o compilador inclui código extra
    para permitir a classe aninhada acessar os dados
    privados da classe de fora.
J2ME
Práticas de otimização (3/9)
• Minimizar criação de objetos.
  – Consome memória
  – Rouba ciclos de processamento
  – Leva a coleta de lixo, o que rouba mais ciclos
• Evitar criação de objetos dentro de métodos.
  – Se possível, passe o objeto como parâmetro.
J2ME
Práticas de otimização (4/9)
• Evitar concatenações de Strings
• Usar StringBuffer
  – Fácil de usar e destruir.
  – Menos consumo de memória.
  – Realocação pode ser evitada criando um StringBuffer
    com tamanho de buffer adequado a aplicação.
J2ME
Práticas de otimização (5/9)
• Evitar gets() e sets(). Atributos dos objetos
  poderiam ser public.
  – Desnecessariamente, a aplicação fica mais lenta e código-
    fonte fica maior.
J2ME
Práticas de otimização (6/9)
• Evitar declarações e instanciações dentro de
  iterações.
J2ME
Práticas de otimização (7/9)
• Evitar flags do tipo String. Ideal seria usar algum
  tipo primitivo.
J2ME
Práticas de otimização (8/9)
• Reduzir o número de parâmetros de entrada no
  métodos.
J2ME
Práticas de otimização (9/9)
• Destruir os objetos assim que tiver a certeza de
  não mais usá-los.
J2ME
  Dúvidas?

Más contenido relacionado

Destacado

Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...
Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...
Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...KuicK Research
 
Jen CV nestačí. Profesionálem na síti LinkedIn
Jen CV nestačí. Profesionálem na síti LinkedInJen CV nestačí. Profesionálem na síti LinkedIn
Jen CV nestačí. Profesionálem na síti LinkedInJakub Fiala
 
Naturaleza de mi nación
Naturaleza de mi naciónNaturaleza de mi nación
Naturaleza de mi naciónAlexfleitas
 
How to Manage your Instagram on a PC Using Gramblr
How to Manage your Instagram on a PC Using GramblrHow to Manage your Instagram on a PC Using Gramblr
How to Manage your Instagram on a PC Using GramblrJorina Banes
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPLeonardo Bastos
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Report sul recruiting trend italia 2016 di linkedin
Report sul recruiting trend italia 2016 di linkedinReport sul recruiting trend italia 2016 di linkedin
Report sul recruiting trend italia 2016 di linkedinPatrizio Gallovich
 
Tiempos y Holguras en redes PERT
Tiempos y Holguras en redes PERTTiempos y Holguras en redes PERT
Tiempos y Holguras en redes PERTAula Tecnica online
 
Supporting Software Evolution Using Adaptive Change Propagation
Supporting Software Evolution Using Adaptive Change PropagationSupporting Software Evolution Using Adaptive Change Propagation
Supporting Software Evolution Using Adaptive Change PropagationSAIL_QU
 

Destacado (13)

Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...
Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...
Global cancer tyrosine kinase inhibitors market & clinical pipeline outlo...
 
ROBÓTICA EN LOS NIÑOS Y JÓVENES
ROBÓTICA EN LOS NIÑOS Y JÓVENES ROBÓTICA EN LOS NIÑOS Y JÓVENES
ROBÓTICA EN LOS NIÑOS Y JÓVENES
 
Jen CV nestačí. Profesionálem na síti LinkedIn
Jen CV nestačí. Profesionálem na síti LinkedInJen CV nestačí. Profesionálem na síti LinkedIn
Jen CV nestačí. Profesionálem na síti LinkedIn
 
Naturaleza de mi nación
Naturaleza de mi naciónNaturaleza de mi nación
Naturaleza de mi nación
 
How to Manage your Instagram on a PC Using Gramblr
How to Manage your Instagram on a PC Using GramblrHow to Manage your Instagram on a PC Using Gramblr
How to Manage your Instagram on a PC Using Gramblr
 
Multimediální projekty 2016
Multimediální projekty 2016Multimediální projekty 2016
Multimediální projekty 2016
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOP
 
Robótica educativa
Robótica educativaRobótica educativa
Robótica educativa
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Redes comunicação
Redes comunicaçãoRedes comunicação
Redes comunicação
 
Report sul recruiting trend italia 2016 di linkedin
Report sul recruiting trend italia 2016 di linkedinReport sul recruiting trend italia 2016 di linkedin
Report sul recruiting trend italia 2016 di linkedin
 
Tiempos y Holguras en redes PERT
Tiempos y Holguras en redes PERTTiempos y Holguras en redes PERT
Tiempos y Holguras en redes PERT
 
Supporting Software Evolution Using Adaptive Change Propagation
Supporting Software Evolution Using Adaptive Change PropagationSupporting Software Evolution Using Adaptive Change Propagation
Supporting Software Evolution Using Adaptive Change Propagation
 

Similar a Curso de J2ME - Parte 04 - Otimização

Métodos ágeis de desenvolvimento de software
Métodos ágeis de desenvolvimento de softwareMétodos ágeis de desenvolvimento de software
Métodos ágeis de desenvolvimento de softwareJerônimo Medina Madruga
 
Analise de desempenho_compactadores_asti_2011
Analise de desempenho_compactadores_asti_2011Analise de desempenho_compactadores_asti_2011
Analise de desempenho_compactadores_asti_2011Saulo Marques
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Igor Abade
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Joao Galdino Mello de Souza
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
QCon 2011
QCon 2011QCon 2011
QCon 2011Ismael
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceCarolina Karklis
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Tchelinux
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Faculdade Mater Christi
 
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...minastestingconference
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aLeonardo Molinari
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
Webcast WebSphere Portal Performance
Webcast WebSphere Portal PerformanceWebcast WebSphere Portal Performance
Webcast WebSphere Portal PerformanceAlex Barbosa Coqueiro
 
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...Atech S.A. | Embraer Group
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 

Similar a Curso de J2ME - Parte 04 - Otimização (20)

Métodos ágeis de desenvolvimento de software
Métodos ágeis de desenvolvimento de softwareMétodos ágeis de desenvolvimento de software
Métodos ágeis de desenvolvimento de software
 
Analise de desempenho_compactadores_asti_2011
Analise de desempenho_compactadores_asti_2011Analise de desempenho_compactadores_asti_2011
Analise de desempenho_compactadores_asti_2011
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
QCon 2011
QCon 2011QCon 2011
QCon 2011
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)
 
Framework usar ou não usar
Framework usar ou não usarFramework usar ou não usar
Framework usar ou não usar
 
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2a
 
Revisão de C# 4.0
Revisão de C# 4.0Revisão de C# 4.0
Revisão de C# 4.0
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Webcast WebSphere Portal Performance
Webcast WebSphere Portal PerformanceWebcast WebSphere Portal Performance
Webcast WebSphere Portal Performance
 
Aula 3
Aula 3Aula 3
Aula 3
 
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...
I SDTA - Otimização Utilizando Modelo MIP com o Software GAMS e o Solver IBM-...
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 

Más de Leonardo Melo Santos

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Leonardo Melo Santos
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasLeonardo Melo Santos
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsLeonardo Melo Santos
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalLeonardo Melo Santos
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesLeonardo Melo Santos
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoLeonardo Melo Santos
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosLeonardo Melo Santos
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoLeonardo Melo Santos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoLeonardo Melo Santos
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisLeonardo Melo Santos
 

Más de Leonardo Melo Santos (19)

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Scrum - Visão Geral
Scrum - Visão GeralScrum - Visão Geral
Scrum - Visão Geral
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV Digital
 
Web Services XML - .NET framework
Web Services XML - .NET frameworkWeb Services XML - .NET framework
Web Services XML - .NET framework
 
DotNet Remoting - .NET framework
DotNet Remoting - .NET frameworkDotNet Remoting - .NET framework
DotNet Remoting - .NET framework
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicos
 
Sistemas Workflow
Sistemas WorkflowSistemas Workflow
Sistemas Workflow
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informação
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalho
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociais
 

Curso de J2ME - Parte 04 - Otimização

  • 1. J2ME J2ME Otimização Leonardo Melo Santos leonardomelosantos@gmail.com
  • 2. J2ME Tópicos • • • Otimização Porque otimizar? O que fazer para otimizar? • Tipos de otimização • Práticas de otimização
  • 3. J2ME Otimização No ambiente computacional, aplicar técnicas de otimização é uma tarefa de extrema importância e relevância. Quando estamos falando de um ambiente para dispositivos móveis, torna-se fundamental otimizar.
  • 4. J2ME Porque otimizar? • Limitações do hardware (processamento, armazenamento, memória, ...) • Tamanho da aplicação final. – Em determinados dispositivos, o tamanho máximo de uma aplicação JME não pode ultrapassar certa quantidade de kilobytes. – Espaço de armazenamento é escasso. Quanto menor o tamanho, maior o número de aplicações instaladas. • Custo de telefonia. – Quanto mais rápido e quanto menos bytes forem enviados/recebidos, mais barato sai o custo da conexão. – Ao baixar uma aplicação, quanto menor, menor o custo e menos tempo de espera. • Pequenas mudanças podem trazer benefícios consideráveis.
  • 5. J2ME Porque otimizar? CUIDADO! Porque otimizar se nem testado foi? Porque otimizar se aplicação atende às necessidades do usuário? Tempo é muito valioso nos dias de hoje. • Martin J. Hells em “J2ME Game Programming” – “Não tente otimizar código que você pensa que é lento, otimize aquilo que você sabe que é lento”.
  • 6. J2ME O que fazer para otimizar? • Aplicar práticas para melhorar a performance e a aplicação de uma maneira geral. • Diminuir o tamanho do código-fonte, do aplicativo como um todo e das imagens PNG. • Usar Obfuscators – O objetivo principal de obfuscation é dificultar a engenharia reversa do código Java™. – Obfuscators também reduzem o tamanho do código- fonte, “renomeando” identificadores e assinaturas de métodos.
  • 7. J2ME Tipos de otimização • Otimização de alto nível – Foco seria o desenho do código-fonte e seus algoritmos. – Dentre as possíveis soluções, a melhor em custo X benefício. – Algoritmo correto = solução adequada • Otimização de baixo nível – Atenção direcionada para pequenos trechos de código (às vezes, algumas linhas de código). – Maioria das vezes a atenção é voltada para o que pode ser melhorado na implementação de métodos, na sua declaração e nos seus parâmetros de entrada.
  • 8. J2ME Práticas de otimização (1/9) • Evitar heranças principalmente as muito profundas (classe que herda de classe que herda de classe etc.) – Classes derivadas tem que gastar tempo e espaço com dados herdados mesmo que sem usá-los – Um método quando não encontrado é procurado na hierarquia de classes o que gasta tempo e processamento – Caso a subclasse não use muito dos métodos e dados da superclasse, analise se não é possível criar uma nova classe
  • 9. J2ME Práticas de otimização (2/9) • Evitar inner classes (classes aninhadas) e classes que realmente sejam desnecessárias. – Com inner classes, o compilador inclui código extra para permitir a classe aninhada acessar os dados privados da classe de fora.
  • 10. J2ME Práticas de otimização (3/9) • Minimizar criação de objetos. – Consome memória – Rouba ciclos de processamento – Leva a coleta de lixo, o que rouba mais ciclos • Evitar criação de objetos dentro de métodos. – Se possível, passe o objeto como parâmetro.
  • 11. J2ME Práticas de otimização (4/9) • Evitar concatenações de Strings • Usar StringBuffer – Fácil de usar e destruir. – Menos consumo de memória. – Realocação pode ser evitada criando um StringBuffer com tamanho de buffer adequado a aplicação.
  • 12. J2ME Práticas de otimização (5/9) • Evitar gets() e sets(). Atributos dos objetos poderiam ser public. – Desnecessariamente, a aplicação fica mais lenta e código- fonte fica maior.
  • 13. J2ME Práticas de otimização (6/9) • Evitar declarações e instanciações dentro de iterações.
  • 14. J2ME Práticas de otimização (7/9) • Evitar flags do tipo String. Ideal seria usar algum tipo primitivo.
  • 15. J2ME Práticas de otimização (8/9) • Reduzir o número de parâmetros de entrada no métodos.
  • 16. J2ME Práticas de otimização (9/9) • Destruir os objetos assim que tiver a certeza de não mais usá-los.