Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de...

Post on 07-Apr-2016

215 views 2 download

Transcript of Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de...

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.