Your SlideShare is downloading. ×
[Choi ooplsa99] resume
[Choi ooplsa99] resume
[Choi ooplsa99] resume
[Choi ooplsa99] resume
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

[Choi ooplsa99] resume

350

Published on

Escape Analysis for Java

Escape Analysis for Java

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
350
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. nov-2011 1 Escape Analysis for Java Jong-Deok Choi Manish Gupta Mauricio Serrano Vugranam C. Sreedhar Sam Midkiff IBM T.J. Watson Research Center {jdchoi, mgupta, mserrano, vugranam, smidkiff} @ us.ibm.com Resumo realizado por Marcio Machado Pereira – RA 780681 A idéia básica do Escape Analysis consiste no seguinte: Define-se três estados de escape para os objetos – NoEscape, I. INTRODUÇÃO quando o objeto é local ao método (e, consequentemente, àN thread); ArgEscape, quando o objeto escapa o método via o artigo [1], Choi et al. introduziram um novo argumentos, mas não escapa a thread que o criou e framework para realizar a analise de fluxo de dados GlobalEscape quando o objeto escapa globalmente (i.e., todos(DFA) no contexto de Java denominada Escape analysis. os métodos e threads).Este framework está baseado em uma abstração do programachamada de Connection Graph (CG). Em Java, os objetos Os nós que representam campos estáticos (variáveis globais)normalmente são alocados no heap e só podem ser dealocados são inicializados no estado GlobalEscape. Os demais nós sãopelo Garbage Collector (GC). Escape Analysis determina se inicializados como NoEscape. Se um objeto pode serum objeto pode escapar o método que o criou (i.e., não é local alcançado no Connection Graph por algum nó cujo estado éao método) e se o mesmo pode escapar a thread que o criou diferente de NoEscape então o objeto escapa o Método. Após(i.e., outras threads podem acessar o objeto). Se o objeto não a DFA, todos os objetos marcados como NoEscape sãoescapa o método ou a thread, duas otimizações podem ser alocáveis na pilha (stack-allocatable) e todos os objetosfeitas: (1) O objeto pode ser alocado na pilha (stack frame) do marcados como NoEscape ou ArgEscape são locais à threadmétodo que o criou. Esta alocação normalmente é mais barata e, portanto, as operações de sincronização podem serdo que a alocação no heap, reduzindo o overhead do GC; (2) eliminadas sem violar a semântica do programa.pode-se eliminar os mecanismos de sincronização associadosao objeto, uma vez que o objeto é acessado por uma única Dois tipos de analise são realizadas para se construir o CG ethread. Além disso, o objeto pode ser alocado na memória do identificar os objetos que não escapam seu método ou threadprocessador onde a thread foi agendada (scheduled) de criação: Intraprocedural e Interprocedural. Dada amelhorando a localidade do dado. Connection Graph captura representação de um método Java em CFG (Control Flowa relação de conectividade entre os objetos alocados no heap e Graph) usa-se um esquema iterativo, descrito na seção IIIas referencias a estes objetos. A DFA simplesmente realiza para a construção do CG intraprocedural. Este CG pode seruma analise de alcance (reachability analysis) no CG para sumarizado para cada método de forma que a mesmadeterminar se um objeto é local a um método ou local a uma informação pode ser usada eficientemente em diferentesthread. contextos de chamada (calling contexts). Choi et al. II. ESCAPE ANALYSIS apresentaram um algorítmo interprocedural, descrito na seção IV, que usa a propriedade de sumarização para computar deNo Connection Graph, os objetos, as variáveis de referencia forma eficiente o CG e identificar objetos que não escapamlocais e formais, e os campos (fields) estáticos e não estáticos métodos ou threads.são representados pelos vértices (ou nós) enquanto as arestasrepresentam os diversos tipos de referencias entre variáveis, III.ANALISE INTRAPROCEDURALobjetos e campos (fields) estáticos ou não. A figura abaixo A analise intraprocedural faz uso de uma DFA forward,ilustra os tipos de nós e arestas: disjuntiva, onde o CG na saída de um statement é dada pela função de transferencia aplicada ao CG na entrada do mesmo que, por sua vez, é o resultado da união dos CGs na saída dos predecessores do referido statement. Para a descrição desta análise, algumas definições fazem-se necessárias: CG = ( No U Nr U Nf U Ng, Er U Ed U Ef ) onde, No – representa o conjunto de objetos Nr – variáveis de referência (locais e formais)  O trabalho em referência foi apresentado na conferência OOPSLA99realizado em novembro de 1999 na cidade de Denver, Colorado, EUA. O Nf – fields não estáticosresumo é parte do trabalho de pesquisa de doutorado do Instituto de Computação Ng – fields estáticos (variáveis globais)da UNICAMP (IC-Unicamp) e foi elaborado por Pereira, M. M. (e-mail:mpereira@ic.unicamp.br ). Er – arestas “point-to”
  • 2. nov-2011 2 x → y ∈ Er ⇒ x ∈ Nr U Nf U Ng & y ∈ No Conservativamente, cria-se um objeto fantasma Oph (phantom object node) e insere-se a aresta p OphEd – arestas deferred (diferidas) • Faça V = { v | u v, u,v ∈ U & fid(v) = f } x → y ∈ Ed ⇒ x, y ∈ Nr U Nf U Ng • Se V = Ø cria-se um nó field e adiciona-se a VEf – arestas field • Finalmente, adiciona-se arestas { v q|v∈ V} x → y ∈ Ef ⇒ x ∈ No & y ∈ Nf U Ng (4) p = q.f; representa uma aresta point-to do nó x para o nó y • Faça U = { u | q u }, representa uma aresta diferida no nó x para o nó y V={v|u v, u ∈ U & fid (v) = fid (f) } representa uma aresta field do nó x para o nó y • Se U = Ø então cria-se um nó phantom object e adiciona-se a U. Se V = Ø então cria-se um nó field reference eAssocia-se ainda a cada field f de um objeto um identificador adiciona-se a V.único fid(f) que corresponde ao offset de f na classe quedefine o objeto. Isto posto, se O1 e O2, são 2 objetos da • (Flow-Sensitive) → aplica ByPass (p) • (Both) → adiciona-se arestas { p v|v∈V}mesma classe C, então fid(O1.f) = fid (O2.f). Dado um nóde referencia m ∈ Nr U Nf U Ng, o conjunto de nós objetos Segue um exemplo ilustrando a computação do CG:O ⊆ Νο que m aponta para (point-to) é determinadopercorrendo as arestas diferidas a partir de m até visitarmos aprimeira aresta point-to no caminho. Formalmente:onde é uma sequencia de arestasque termina exatamente em uma aresta point-to.Para uma analise sensível ao fluxo (flow-sensitive) faz-senecessário também definir uma função ByPass que, quandoaplicada ao nó p ∈ Nr U Nf redireciona as arestas diferidasincidentes em p aos nós sucessores de p. Exemplo: IV. ANALISE INTERPROCEDURAL Vamos assumir que um método A chama um outro método B. Temos então quatro pontos que são relevantes na análise interprocedural: • Na entrada do método B;Quatro statements básicos afetam o Escape Analysis. A • Na saída do método B;seguir são apresentadas as funções de transferência para cadaum destes statements: • Em A, imediatamente antes da invocação do método B • Em A, imediatamente após a invocação do método B.(1) p = new r(); Se método B já foi analisado pelo Escape Analysis então,• Cria o nó objeto O (se não existir) quando for feito a análise intraprocedural de A, este• (Flow-Sensitive) → aplica ByPass (p) simplesmente usa a informação sumarizada de B.• (Both) → adiciona aresta point-to de p para O Nos exemplos abaixo o método L() (Caller) constrói uma(2) p = q; lista ligada e invoca o método T() (Callee) para construir uma estrutura em árvore.• (Flow-Sensitive) → aplica ByPass (p)• (Both) → adiciona a aresta (1) Connection Graph na entrada do método: Para cada parâmetro formal fi, existe um parâmetro real ai no (3) p.f = q; Caller, que produz o valor para fi. No ponto de entrada do• Faça U = PointsTo (p) Callee cria-se então uma atribuição da forma fi = ai. O• Se U = Ø então ou p = null (null pointer exception) ou o argumento fi é tratado como uma variável local dentro doobjeto para o qual p aponta foi criado fora do método (p é umparâmetro formal ou alcançável por um parâmetro formal). método. Como ela pode ser morta (killed) por outras
  • 3. nov-2011 3atribuições a fi, cria-se então um nó de referência phantom (3) CG imediatamente antes da invocação do método B:para ai e insere uma aresta diferida de fi para ai. Exemplo: No local (A) de invocação do método, cada passagem de parâmetros é tratada como uma atribuição a um parâmetro real no chamador. Considere a chamada u1.foo(u2, …, un) onde u2, …, un são os parametros reais. Modela-se a chamada com as atribuições: â1 = u1; â2 = u2; …; foo (â1, â2, …, ân) Cada parâmetro no local da chamada será comparado com o nó de referência phantom do método chamado. No exemplo abaixo, dois nós â1 e â2 são criados como arestas diferidas apontando para o primeiro e segundo parâmetros reais da(2) Connection Graph na saída do método: chamada, u e v, respectivamente.Modela-se a ação return que retorna uma referência a umobjeto como uma atribuição a uma variável especial phantomchamada return. Multiplas ações de retorno são resolvidas noCG executando o “merge” dos respectivos valores return.Após completar o Escape Analysis intraprocedural para ummétodo usa-se a função ByPass para eliminar todas as arestasdiferidas no CG, criando nós phantom onde foremnecessários. É o caso do nó R no exemplo abaixo:Ao final, faz-se a análise de alcançe (reachability analysis) (4) CG imediatamente após a invocação do método B:no CG para atualizar os estados de Escape dos objetos. Esta Neste momento, essencialmente faz-se o mapeamento dasanálise particiona o grafo em três subgrafos: informações contidas no CG sumarizado do método chamado de volta para o CG do chamador. Três tipos de nós• Subgrafo induzido Sg do conjunto de nós que são desempenham um papel importante na atualização do CG,“alcançaveis” a partir de um nó GlobalEscape (inicialmente, logo após a invocação do método: âis do callers CG, ais dostatic fields e objetos runnable). callees CG e o nó return. A atualização do CG é feito atualizando-se o conjunto de nós do CG do chamador usando• Subgrafo induzido Sa do conjunto de nós “alcançaveis” a âis e ais e o respectivo conjunto de arestas. A atualização dopartir de um nó ArgEscape (inicialmente, nós de referência nó return é feito tratando o return como um ai e o nó alvophantom que representam os parâmetros reais criados na na invocação do método da mesma forma como âi.entrada do método, como a1 e a2 no exemplo. As equações abaixo definem, recursivamente, as relações de• Subgrafo induzido Sn do conjunto de nós que não são mapeamento MapsToObj ( ↦ ) para atualização dos nós:alcançaveis por nenhum nó GlobalEscape ou ArgEscape.Então: Sg U Sa ≅ NonLocalGraph (representa o CGsumarizado do método); Sn ≅ LocalGraph (todos os objetossão marcados stack-allocatable). A atualização das arestas é feita da seguinte maneira: Sejam p e q nós objetos do Callee CG tal que: Então, para cada ∈ MapsToObj(p) e ∈ MapsToObj(q) estabelece-se inserindo arestas point-to para cada nó field
  • 4. nov-2011 4tal que: V. HISTÓRICO E TRABALHOS RELACIONADOSAnalises do tempo de vida de objetos alocados dinâmicamentetem sido tradicionalmente usadas para gerenciar o espaço dearmazenamento em tempo de compilação. Park &Goldeberg[2] introduziram o termo Escape Analysis emlinguagens funcionais para determinar estaticamente quaispartes de uma lista passada para uma função não escapa achamada da função (e, portanto, podem ser alocadas napilha). Outros melhoraram e extenderam o trabalho de Park& Goldeberg. Birkedal et al. Propuseram um modelo dealocação baseado em regiões que são gerenciadas durante acompilação. Tem havido uma série de esforços paralelos emEscape Analysis para Java. Bogda & Holzle [3] usam umconjunto de restrições para computar objetos locais às threads.Blanchet [4] atribui “pesos” a tipos para codificar como umobjeto de um tipo pode ter referências a outros objetos ou éum subtipo de outro objeto. Ele propõe uma analise flow-insensitive em duas fases (backward e forward) paracomputar as informações de Escape. VI. CONCLUSÃOChoi et al. apresentaram uma nova abordagem para a EscapeAnalysis que simplifica a analise de fluxo de dados para umproblema de alcance (reachability analysis) sob um grafo deconexão (CG). Os resultados experimentais em um protótipodo “IBM High Performance Compiler for Java” para umamáquina alvo “PowerPC 333Mhz, 128MB” mostraram que:• Ο no de objetos que puderam ser alocados na pilha excedeu70% dos objetos criados dinamicamente em 3 de 10benchmarks (com a mediana em 19%);• 11% a 92% de todas as operações de lock foram eliminadasnos 10 programas (com a mediana em 51%);• A redução no tempo de execução foi de 2% a 23% (com amediana em 7%). VII. REFERENCIAS[1] Jong-Deok Choi, M. Gupta, M. Serrano, V.C. Sreedhar and S. Midkiff.Escape Analysis for Java. In Proceedings of ACM SIGPLAN Conference onObject-Oriented Programming Systems, Languages and Applications, Denver,Colorado, November 1999.[2] Y.G. Park and B. Goldberg. Escape analysis on lists. In Proceedings of.ACM SIGPLAN Conference Programming Language Design andImplementation, pages 117-127, July 1992.[3] Jeff Bodga and Urs Holzle. Removing unnecessary synchronization in java.In Proceedings of ACM SIGPLAN Conference on Object-OrientedProgramming Systems, Languages and Applications, Denver, Colorado,November 1999.[4] Bruno Blanchet. Escape Analysis for object-oriented languages:Applications to Java. In Proceedings of ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications, Denver,Colorado, November 1999.

×