190 likes | 308 Views
Otimizando Compiladores de AspectJ para Java ME. Fernando Henrique Calheiros Lopes Centro de Informática – UFPE. Motivação. Jogos Móveis: Projeções para 2011 no mercado de jogos de celulares: 7 bilhões de dólares movimentados Um dos mercados mais promissores do entretenimento digital
E N D
Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE
Motivação Jogos Móveis: • Projeções para 2011 no mercado de jogos de celulares: 7 bilhões de dólares movimentados • Um dos mercados mais promissores do entretenimento digital Problema: • Grande variedade de aparelhos • Como tratar as variabilidades em nível de código de um jogo entre os diversos aparelhos?
Cenário de Jogos Móveis • Variações em... • tela, • teclado, • memória, • APIs... • Baixíssimo time to market • Vários idiomas • Mudanças entre operadoras • ...
Linhas de Produtos de Software Artefatos Core Produto X BUILD Produto Y Variabilidades Seleção de Features
Pré-processamento • Padrão da indústria para tratar variações de código • Tags de pré-processamento features • Vantagem: Não adiciona overhead no bytecode • Problema: Código emaranhado //#if device_graphics_canvas_nokiaui public class MainCanvas extends FullCanvas{ //#elif device_graphics_canvas_midp2 || device_graphics_canvas_siemens //# public class MainCanvas extends GameCanvas { //#elif sku_id_se1 //# public class MainCanvas extends Canvas implements CommandListener { //#else //# public class MainCanvas extends Canvas { //#endif
AspectJ Principal vantagem: • Código de cada família de aparelhos separados do código comum a todos os aparelhos Principal desvantagem: • Adiciona overhead aos classfiles de Java Principais compiladores: • abc e ajc
AspectJ – A linguagem Pointcuts • Expressões que descrevem pontos no fluxo de execução do programa Advices • Código que pode ser executado em um determinado ponto capturado por um pointcut Inter-type Declarations • Modificam a estrutura estática de uma classe Java • Adicionando atributos e métodos • Mudando a hierarquia de classes
Metodologia • Análise de tamanho: quantificação • Inspeção individual: qualificação • Discussão: Propor melhorias, provar corretude e implementar • Resultados: quantificar ganho obtido
Inspeção Individual • As construções de AspectJ utilizadas nos 2 jogos avaliados pelo projeto FLiP foram inspecionadas • A partir da inspeção do bytecode resultante do uso das mesmas foram identificados os pontos onde cada compilador adiciona overhead • Essa inspeção indicou os motivos por trás do overhead
Otimizações sugeridas • Baseando-se nos dados da inspeção, foram sugeridas um conjunto de otimizações para o compilador abc: • Não relacionada a aspectos: • Remover <clinit>() vazios • Atributos com inicialização: • Mover a inicialização dos atributos para a classe alvo • Métodos: • Colocar o corpo de métodos inter-type na própria classe alvo • Advices: • Remover chamadas desnecessárias a aspectOf() • Remover métodos accessors quando os membros puderem ser acessados diretamente
Otimizações Implementadas • Remover chamadas desnecessárias a aspectOf() • Colocar o corpo de métodos inter-type na própria classe alvo • Otimizações escolhidas baseado na intuição de que trariam o maior ganho • 1º passo: provar a corretude • 2º passo: implementar
Prova de corretude • Baseada em leis de programação [Col05] • Foi mostrado como sair do que o abc gera para o que as leis denotam
Implementação • Estudada a arquitetura do abc • Enunciados algoritmos para implementar as duas otimizações • Implementadas as duas otimizações como transformações do framework Soot • Se encaixam no abc
Resultados • Exemplos utilizados na inspeção foram mostrados com as otimizações • Tamanho dos builds foi comparado novamente • Com cada otimização separadamente • Com ambas habilitadas • 200 bytes a menos do que a soma dos ganhos individuais • Diminuição de 48% do overhead adicionado por AspectJ
Trabalhos relacionados • [Cor07] Eduardo Santos Cordeiro. Otimizações na compilação de adendos de contorno em programas orientados por aspectos. Master’s thesis, Universidade Federal de Minas Gerais, 2007. • [Kuz04] Sascha Kuzins. Efficient implementation of around-advice for the aspectbench compiler. Master’s thesis, Oxford University, 2004.
Trabalhos futuros • Provar que as outras otimizações propostas não implementadas preservam o comportamento • Implementar as outras otimizações não implementadas • Analisar as construções de AspectJ que não estavam no escopo deste estudo • Implementar as otimizações no ajc • Analisar o impacto de construções que interferem umas com as outras • Avaliar o impacto das otimizações propostas com benchmarks de performance e memória • Intuitivamente espera-se obter um ganho em ambos
Referências • Site do abc: www.aspectbench.org • Site do ajc: www.eclipse.org/aspectj • Site do Soot: http://www.sable.mcgill.ca/soot/ • [Col05] Leonardo Cole. Deriving refactorings for aspectj. Master’s thesis, Informatics Center, Federal Universisty of Pernambuco, Recife, Brazil, February 2005.