otimizando compiladores de aspectj para java me fernando henrique calheiros lopes centro de...
TRANSCRIPT
Otimizando Compiladores de AspectJ para Java ME
Fernando Henrique Calheiros LopesCentro 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
Variabilidades
BUIL
D Produto X
Produto Y
Seleção de Features
Pré-processamento
//#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
• 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
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 JavaPrincipais compiladores: abc e ajc
AspectJ – A linguagem
Pointcuts Expressões que descrevem pontos no fluxo de
execução do programaAdvices Código que pode ser executado em um
determinado ponto capturado por um pointcutInter-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
Overhead adicionado por AspectJ
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
Ganho no tamanho
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.