otimizando compiladores de aspectj para java me fernando henrique calheiros lopes centro de...

19
Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Upload: kauany-pesqueira

Post on 07-Apr-2016

215 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Otimizando Compiladores de AspectJ para Java ME

Fernando Henrique Calheiros LopesCentro de Informática – UFPE

Page 2: 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?

Page 3: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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• ...

Page 4: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Linhas de Produtos de Software

Artefatos Core

Variabilidades

BUIL

D Produto X

Produto Y

Seleção de Features

Page 5: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 6: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 7: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 8: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Metodologia

Análise de tamanho: quantificação Inspeção individual: qualificação Discussão: Propor melhorias, provar

corretude e implementar Resultados: quantificar ganho obtido

Page 9: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Overhead adicionado por AspectJ

Page 10: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 11: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 12: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 13: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 14: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 15: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 16: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

Ganho no tamanho

Page 17: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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.

Page 18: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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

Page 19: Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE

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.