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
BUILD
Artefatos Core
Variabilidades
Seleção de Features
Produto X
Produto Y
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
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 aroundadvice 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.
Download

tg - Centro de Informática da UFPE