SlideShare uma empresa Scribd logo
1 de 2
Baixar para ler offline
Jan 2012



                              Adaptive Optimization in the Jalapeño JVM
            Matthew Arnold*                   Stephen Fink            David Grove            Michael Hind Peter F. Sweeney
                               IBM T.J. Watson Research Center                                *Rutgers University
                           {sjfink, groved, hindm, pfs} @ us.ibm.com                         marnold@cs.rugters.edu

                                    Resumo realizado por Marcio Machado Pereira – RA 780681

                                                                               •         Nível 0 consiste principalmente num conjunto de
                                                                               otimizações realizadas on-the-fly durante as transformações
                              I. INTRODUÇÃO                                    dos bytecodes na representação intermediária. São elas,

N    o artigo[1], os autores descrevem o projeto e
     implementação de um mecanismo denominado
Adaptive Optimization System – AOS, na máquina virtual
                                                                               constant, type, non-null e copy propagation; constant folding
                                                                               e arithmetic simplification; unreachable code elimination;
                                                                               elimination of redundant nullchecks; checkcasts e array store
Java Jikes RVM[2]. Trata-se de uma arquitetura geral e                         checks.
extensível que suporta otimizações mais agressivas, i.e.,                      •         Nível 1 incrementa o nível 0 com otimizações
otimizações que exploram informações coletadas em tempo                        locais adicionais como common subexpression elimination,
de execução. Os resultados experimentais demonstram que                        array bound check elimination e redundant load elimination.
estas otimizações trazem melhoras substancias no                               Este também adiciona inlining optimization baseado em
desempenho das aplicações quando comparadas com os                             heurísticas no tamanho estático, global flow-insensitive copy
métodos tradicionais Just-in-Time (JIT) e HotSpot.                             and constant propagation, global flow-insensitive dead
                                                                               assignment elimination, string-buffer synchronization
Para um melhor entendimento do leitor, a seção 2 apresenta                     optimization, scalar replacement of aggregates and short
de forma sucinta as caracteristicas da máquina virtual                         arrays.
                                                                               •         Nível 2 incrementa o nível 1 com otimizações
utilizada, Jikes RVM. As seções seguintes descrevem a
                                                                               sensíveis a fluxo baseadas no SSA (SSA-based flow-sensitive
arquitetura AOS bem como as técnicas empregadas de
                                                                               optimization). Em adição às otimizações tradicionais de SSA
otimização seletiva (Selective Optimization) e a                               em variáveis escalares o sistema também usa uma versão
transformação “em linha” dirigida por profile (Profile-                        extendida de Array SSA para realizar redundant load
Directed Inlining).                                                            elimination e array bounds check elimination.

                                                                               Jikes RVM multiplexa as threads Java em processadores
                              II. JIKES RVM                                    virtuais JVM que são mapeados em pthreads no Sistema
O Jikes RVM emprega uma estratégia de “somente                                 Operacional. O sistema suporta escalonamento das threads
compilação”, i.e., este compila todos os métodos para código                   num modelo de quase-preempção. Os compiladores geram
nativo antes de executá-los. Atualmente o sistema inclui dois                  pontos de cessão ou interrupção (yield points) que são pontos
compiladores completamente operacionais:                                       no programa onde a thread que está em execução verifica um
                                                                               bit dedicado no registro de controle da máquina para
   •       Baseline Compiler transforma os bytecodes em                        determinar se a mesma irá ceder o processador virtual. No
         código nativo simulando uma pilha de operandos em                     Jikes RVM, os compiladores inserem estes pontos de cessão
         Java. O compilador não realiza alocação de                            nas entradas e saída dos métodos e nos pontos de retorno de
         registradores, portanto o código nativo gerado tem um                 laços (loop back edges). Usando um mecanismo de
         desempenho somente um pouco melhor do que o                           interrupção de tempo, um tratador desta interrupção
         código interpretado.                                                  (interrupt handler) periodicamente “liga” o bit em todos os
                                                                               processadores virtuais. Quando a thread em execução alcança
   •       Optimizing Compiler [3] transforma os bytecodes em                  o próximo ponto de cessão, a verificação do bit irá resultar em
         uma representação intermediária na qual este possa                    uma chamada ao escalonador.
         realizar uma série de otimizações. O compilador usa
         uma técnica de alocação de registradores eficiente e
         efetiva conhecida por Linear Scan.                                                    III.ADAPTIVE OPTIMIZATION SYSTEM
                                                                               A implementação do Jikes RVM AOS utiliza um número de
As otimizações são agrupadas em três níveis:                                   threads Java: As threads Organizer, pertencentes ao
                                                                               subsistema de medidas em tempo de execução (runtime
                                                                               measurements component), a thread Controler, e as threads
                                                                               do subsistema de compilação. As várias threads são
    
      O trabalho em referência foi apresentado na conferência OOPSLA’00        fracamente acopladas, comunicando entre si através de filas
realizado na cidade de Minneapolis, MN, USA. O resumo é parte do trabalho de   (queues) compartilhadas ou estruturas de dados em memória.
pesquisa de doutorado do Instituto de Computação da UNICAMP (IC-Unicamp)
e foi elaborado por Pereira, M. M. (e-mail: mpereira@ic.unicamp.br ).          Todas as filas no sistema são filas com prioridade e
Jan 2012

bloqueantes. Se uma thread realiza uma operação de                                       V. PROFILE-DIRECTED INLINING
consumo (dequeue) quando a fila estiver vazia, a thread é        Profile-directed inlining procura identificar as arestas no
suspensa até que uma outra thread produza a informação           grafo de chamadas (call graph), grafo este que representa as
desejada (i.e., realiza uma operação enqueue).                   relações chamador-chamado, e que são frequentemente
                                                                 percorridas para determinar se há benefício em recompilar o
O sistema AOS executa duas tarefas principais: otimização        método chamador para permitir que se realize a otimização
seletiva (Selective Optimization) e a transformação “em          “em linha” (inlining optimization) dos métodos chamados.
linha” dirigida por profile (Profile-Directed Inlining).
                                                                 O sistema coleta amostras estatísticas de chamadas de
                                                                 métodos durante a execução da aplicação e mantém uma
                   IV. SELECTIVE OPTIMIZATION                    representação dinâmica aproximada do grafo de chamadas
O objetivo da otimização seletiva é identificar regiões de       com base nestes dados. Para isto, o sistema instala um
código em que a aplicação gasta tempo significativo de           listener que amostra as arestas de chamada (call edges) nos
execução (frequentemente chamado de HotSpot), determinar         pontos de cessão (yield points) na entrada e saída dos
se o desempenho geral da aplicação irá melhorar se               métodos. Na amostragem, o listener coleta o id dos métodos
otimizações forem aplicadas em um ou mais HotSpots e, se         chamado e chamador, bem como o offset da instrução de
for o caso, compilá-los com as otimizações selecionadas e        chamada no código do chamador. Quando o buffer estiver
instalar o código otimizado na máquina virtual (VM).             cheio, a janela de amostragem termina.

No Jikes RVM, a unidade de otimização é o método. Então,         O listener então “acorda” a thread Organizer para atualizar o
para realizar a otimização seletiva, o subsistema de medidas     grafo dinâmico de chamadas com os novos dados coletados. O
em tempo de execução precisa identificar os métodos              oráculo de otimização “em linha” faz uso então do grafo para
candidatos (Hot methods). Para isto, o subsistema instala um     guiar suas decisões de otimização. Maiores detalhes são
listener que periodicamente amostra o método em execução         encontradas em [4].
corrente nos pontos de interrupção da thread (yield points).
Os yield points ocorrem nas entradas e saídas dos métodos e
nas arestas de retorno dos laços (loop back edges). Quando                                     VI.   CONCLUSÕES
for o momento de coletar uma amostra o listener inspeciona a     Este resumo teve como objetivo descrever a arquitetura do
pilha de chamada da thread (call stack) e grava a                sistema AOS tão somente, porisso não foi apresentado a
identificação do método corrente. Se a interrupção ocorre no     metodologia usada na experimentação bem como os
prólogo do método o listener adicionamente registra o            resultados experimentais. Os autores demonstram no artigo
identificador do método chamador (caller method).                que o sistema AOS introduz um overhead de menos de 10%
                                                                 enquanto proporciona um desempenho total na aplicação
Quando o buffer de amostragem fica cheio, a janela de            competitivo com as melhores estratégias comerciais
amostragem termina. O organizador de métodos quentes (Hot        utilizadas. Além disso, pode-se observar que o sistema AOS
Methods Organizer) processa o buffer atualizando os dados        provê uma infraestrutura flexível de tal forma que futuras
de amostragem dos métodos (Method Sample Data). Esta             pesquisas possam ser realizadas no campo de otimizações
estrutura de dados mantém para cada método o número total        online.
de vezes que este foi amostrado. Após atualizar a estrutura de
dados, a thread Organizer cria um evento para cada método                                    VII. REFERENCIAS
que foi amostrado nesta janela e adiciona o mesmo na fila da     [1] Matthew Arnold , Stephen Fink , David Grove , Michael Hind , Peter F.
thread Controller usando o valor de sua amostragem como          Sweeney, Adaptive optimization in the Jalapeño JVM, Proceedings of the 15th
sua prioridade.                                                  ACM SIGPLAN conference on Object-oriented programming, systems,
                                                                 languages, and applications, p.47-65, October 2000, Minneapolis, Minnesota,
                                                                 United States.
Quando a fila com prioridades entrega um evento ao
Controller este consome o evento aplicando uma politica de       [2] B. Alpern , C. R. Attanasio , J. J. Barton , M. G. Burke , P. Cheng , J.-D.
recompilação      dirigida   por    modelo     (model-driven     Choi , A. Cocchi , S. J. Fink , D. Grove , M. Hind , S. F. Hummel , D. Lieber ,
recompilation policy) para determinar que ação (se for o         V. Litvinov , M. F. Mergen , T. Ngo , J. R. Russell , V. Sarkar , M. J. Serrano ,
caso) deverá ser aplicada ao método indicado. Se o Controller    J. C. Shepherd , S. E. Smith , V. C. Sreedhar , H. Srinivasan , J. Whaley, The
                                                                 Jalapeño virtual machine, IBM Systems Journal, v.39 n.1, p.211-238, January
decidir por recompilar o método, este cria um evento de          2000.
recompilação descrevendo o método a ser compilado e o
plano de otimização que derverá ser usado e coloca-o na fila     [3] Michael G. Burke , Jong-Deok Choi , Stephen Fink , David Grove , Michael
de recompilação. Esta fila prioriza os eventos baseado em        Hind , Vivek Sarkar , Mauricio J. Serrano , V. C. Sreedhar , Harini Srinivasan ,
uma estimativa de custo-benefício da computação futura do        John Whaley, The Jalapeño dynamic optimizing compiler for Java, Proceedings
                                                                 of the ACM 1999 conference on Java Grande, p.129-141, June 12-14, 1999,
método.                                                          San Francisco, California, United States.

Quando um evento está disponível na fila de recompilação, a      [4] M. Arnold, S. Fink, D. Grove, M. Hind, and P. F. Sweeney. Architecture and
thread de recompilação remove o mesmo e realiza a atividade      policy for adaptive optimization in virtual machines. Technical Report 23429,
                                                                 IBM Research, Nov. 2004.
de compilação especificada pelo evento, instalando o
resultado do método compilado na VM.

Mais conteúdo relacionado

Semelhante a [Hind oopsla00] resumo do artigo "Adaptive Optimization in the Jikes RVM"

[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
Marcio Machado Pereira
 
18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista
itgfiles
 
J Boss Rules Mgjug V2
J Boss Rules Mgjug V2J Boss Rules Mgjug V2
J Boss Rules Mgjug V2
Breno Barros
 

Semelhante a [Hind oopsla00] resumo do artigo "Adaptive Optimization in the Jikes RVM" (20)

Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente VirtualMedindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
 
Mainframe Performance Review
Mainframe Performance ReviewMainframe Performance Review
Mainframe Performance Review
 
[Ottoni micro05] resume
[Ottoni micro05] resume[Ottoni micro05] resume
[Ottoni micro05] resume
 
Middleware Reflexivo
Middleware ReflexivoMiddleware Reflexivo
Middleware Reflexivo
 
Sis avionico
Sis avionicoSis avionico
Sis avionico
 
[Pereira IC'2011] Otimizacoes no LLVM
[Pereira IC'2011] Otimizacoes no LLVM[Pereira IC'2011] Otimizacoes no LLVM
[Pereira IC'2011] Otimizacoes no LLVM
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - Treinamento
 
J Boss Rules Mgjug V2
J Boss Rules Mgjug V2J Boss Rules Mgjug V2
J Boss Rules Mgjug V2
 
JBoss Clustering
JBoss ClusteringJBoss Clustering
JBoss Clustering
 
Saam & arquiteturas_iu_halan
Saam & arquiteturas_iu_halanSaam & arquiteturas_iu_halan
Saam & arquiteturas_iu_halan
 
Qualidade no desenvolvimento de software
Qualidade no desenvolvimento de softwareQualidade no desenvolvimento de software
Qualidade no desenvolvimento de software
 
Mpu 2012 ppt
Mpu 2012 pptMpu 2012 ppt
Mpu 2012 ppt
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução prática
 
MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor
 

[Hind oopsla00] resumo do artigo "Adaptive Optimization in the Jikes RVM"

  • 1. Jan 2012 Adaptive Optimization in the Jalapeño JVM Matthew Arnold* Stephen Fink David Grove Michael Hind Peter F. Sweeney IBM T.J. Watson Research Center *Rutgers University {sjfink, groved, hindm, pfs} @ us.ibm.com marnold@cs.rugters.edu Resumo realizado por Marcio Machado Pereira – RA 780681 • Nível 0 consiste principalmente num conjunto de otimizações realizadas on-the-fly durante as transformações I. INTRODUÇÃO dos bytecodes na representação intermediária. São elas, N o artigo[1], os autores descrevem o projeto e implementação de um mecanismo denominado Adaptive Optimization System – AOS, na máquina virtual constant, type, non-null e copy propagation; constant folding e arithmetic simplification; unreachable code elimination; elimination of redundant nullchecks; checkcasts e array store Java Jikes RVM[2]. Trata-se de uma arquitetura geral e checks. extensível que suporta otimizações mais agressivas, i.e., • Nível 1 incrementa o nível 0 com otimizações otimizações que exploram informações coletadas em tempo locais adicionais como common subexpression elimination, de execução. Os resultados experimentais demonstram que array bound check elimination e redundant load elimination. estas otimizações trazem melhoras substancias no Este também adiciona inlining optimization baseado em desempenho das aplicações quando comparadas com os heurísticas no tamanho estático, global flow-insensitive copy métodos tradicionais Just-in-Time (JIT) e HotSpot. and constant propagation, global flow-insensitive dead assignment elimination, string-buffer synchronization Para um melhor entendimento do leitor, a seção 2 apresenta optimization, scalar replacement of aggregates and short de forma sucinta as caracteristicas da máquina virtual arrays. • Nível 2 incrementa o nível 1 com otimizações utilizada, Jikes RVM. As seções seguintes descrevem a sensíveis a fluxo baseadas no SSA (SSA-based flow-sensitive arquitetura AOS bem como as técnicas empregadas de optimization). Em adição às otimizações tradicionais de SSA otimização seletiva (Selective Optimization) e a em variáveis escalares o sistema também usa uma versão transformação “em linha” dirigida por profile (Profile- extendida de Array SSA para realizar redundant load Directed Inlining). elimination e array bounds check elimination. Jikes RVM multiplexa as threads Java em processadores II. JIKES RVM virtuais JVM que são mapeados em pthreads no Sistema O Jikes RVM emprega uma estratégia de “somente Operacional. O sistema suporta escalonamento das threads compilação”, i.e., este compila todos os métodos para código num modelo de quase-preempção. Os compiladores geram nativo antes de executá-los. Atualmente o sistema inclui dois pontos de cessão ou interrupção (yield points) que são pontos compiladores completamente operacionais: no programa onde a thread que está em execução verifica um bit dedicado no registro de controle da máquina para • Baseline Compiler transforma os bytecodes em determinar se a mesma irá ceder o processador virtual. No código nativo simulando uma pilha de operandos em Jikes RVM, os compiladores inserem estes pontos de cessão Java. O compilador não realiza alocação de nas entradas e saída dos métodos e nos pontos de retorno de registradores, portanto o código nativo gerado tem um laços (loop back edges). Usando um mecanismo de desempenho somente um pouco melhor do que o interrupção de tempo, um tratador desta interrupção código interpretado. (interrupt handler) periodicamente “liga” o bit em todos os processadores virtuais. Quando a thread em execução alcança • Optimizing Compiler [3] transforma os bytecodes em o próximo ponto de cessão, a verificação do bit irá resultar em uma representação intermediária na qual este possa uma chamada ao escalonador. realizar uma série de otimizações. O compilador usa uma técnica de alocação de registradores eficiente e efetiva conhecida por Linear Scan. III.ADAPTIVE OPTIMIZATION SYSTEM A implementação do Jikes RVM AOS utiliza um número de As otimizações são agrupadas em três níveis: threads Java: As threads Organizer, pertencentes ao subsistema de medidas em tempo de execução (runtime measurements component), a thread Controler, e as threads do subsistema de compilação. As várias threads são  O trabalho em referência foi apresentado na conferência OOPSLA’00 fracamente acopladas, comunicando entre si através de filas realizado na cidade de Minneapolis, MN, USA. O resumo é parte do trabalho de (queues) compartilhadas ou estruturas de dados em memória. pesquisa de doutorado do Instituto de Computação da UNICAMP (IC-Unicamp) e foi elaborado por Pereira, M. M. (e-mail: mpereira@ic.unicamp.br ). Todas as filas no sistema são filas com prioridade e
  • 2. Jan 2012 bloqueantes. Se uma thread realiza uma operação de V. PROFILE-DIRECTED INLINING consumo (dequeue) quando a fila estiver vazia, a thread é Profile-directed inlining procura identificar as arestas no suspensa até que uma outra thread produza a informação grafo de chamadas (call graph), grafo este que representa as desejada (i.e., realiza uma operação enqueue). relações chamador-chamado, e que são frequentemente percorridas para determinar se há benefício em recompilar o O sistema AOS executa duas tarefas principais: otimização método chamador para permitir que se realize a otimização seletiva (Selective Optimization) e a transformação “em “em linha” (inlining optimization) dos métodos chamados. linha” dirigida por profile (Profile-Directed Inlining). O sistema coleta amostras estatísticas de chamadas de métodos durante a execução da aplicação e mantém uma IV. SELECTIVE OPTIMIZATION representação dinâmica aproximada do grafo de chamadas O objetivo da otimização seletiva é identificar regiões de com base nestes dados. Para isto, o sistema instala um código em que a aplicação gasta tempo significativo de listener que amostra as arestas de chamada (call edges) nos execução (frequentemente chamado de HotSpot), determinar pontos de cessão (yield points) na entrada e saída dos se o desempenho geral da aplicação irá melhorar se métodos. Na amostragem, o listener coleta o id dos métodos otimizações forem aplicadas em um ou mais HotSpots e, se chamado e chamador, bem como o offset da instrução de for o caso, compilá-los com as otimizações selecionadas e chamada no código do chamador. Quando o buffer estiver instalar o código otimizado na máquina virtual (VM). cheio, a janela de amostragem termina. No Jikes RVM, a unidade de otimização é o método. Então, O listener então “acorda” a thread Organizer para atualizar o para realizar a otimização seletiva, o subsistema de medidas grafo dinâmico de chamadas com os novos dados coletados. O em tempo de execução precisa identificar os métodos oráculo de otimização “em linha” faz uso então do grafo para candidatos (Hot methods). Para isto, o subsistema instala um guiar suas decisões de otimização. Maiores detalhes são listener que periodicamente amostra o método em execução encontradas em [4]. corrente nos pontos de interrupção da thread (yield points). Os yield points ocorrem nas entradas e saídas dos métodos e nas arestas de retorno dos laços (loop back edges). Quando VI. CONCLUSÕES for o momento de coletar uma amostra o listener inspeciona a Este resumo teve como objetivo descrever a arquitetura do pilha de chamada da thread (call stack) e grava a sistema AOS tão somente, porisso não foi apresentado a identificação do método corrente. Se a interrupção ocorre no metodologia usada na experimentação bem como os prólogo do método o listener adicionamente registra o resultados experimentais. Os autores demonstram no artigo identificador do método chamador (caller method). que o sistema AOS introduz um overhead de menos de 10% enquanto proporciona um desempenho total na aplicação Quando o buffer de amostragem fica cheio, a janela de competitivo com as melhores estratégias comerciais amostragem termina. O organizador de métodos quentes (Hot utilizadas. Além disso, pode-se observar que o sistema AOS Methods Organizer) processa o buffer atualizando os dados provê uma infraestrutura flexível de tal forma que futuras de amostragem dos métodos (Method Sample Data). Esta pesquisas possam ser realizadas no campo de otimizações estrutura de dados mantém para cada método o número total online. de vezes que este foi amostrado. Após atualizar a estrutura de dados, a thread Organizer cria um evento para cada método VII. REFERENCIAS que foi amostrado nesta janela e adiciona o mesmo na fila da [1] Matthew Arnold , Stephen Fink , David Grove , Michael Hind , Peter F. thread Controller usando o valor de sua amostragem como Sweeney, Adaptive optimization in the Jalapeño JVM, Proceedings of the 15th sua prioridade. ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, p.47-65, October 2000, Minneapolis, Minnesota, United States. Quando a fila com prioridades entrega um evento ao Controller este consome o evento aplicando uma politica de [2] B. Alpern , C. R. Attanasio , J. J. Barton , M. G. Burke , P. Cheng , J.-D. recompilação dirigida por modelo (model-driven Choi , A. Cocchi , S. J. Fink , D. Grove , M. Hind , S. F. Hummel , D. Lieber , recompilation policy) para determinar que ação (se for o V. Litvinov , M. F. Mergen , T. Ngo , J. R. Russell , V. Sarkar , M. J. Serrano , caso) deverá ser aplicada ao método indicado. Se o Controller J. C. Shepherd , S. E. Smith , V. C. Sreedhar , H. Srinivasan , J. Whaley, The Jalapeño virtual machine, IBM Systems Journal, v.39 n.1, p.211-238, January decidir por recompilar o método, este cria um evento de 2000. recompilação descrevendo o método a ser compilado e o plano de otimização que derverá ser usado e coloca-o na fila [3] Michael G. Burke , Jong-Deok Choi , Stephen Fink , David Grove , Michael de recompilação. Esta fila prioriza os eventos baseado em Hind , Vivek Sarkar , Mauricio J. Serrano , V. C. Sreedhar , Harini Srinivasan , uma estimativa de custo-benefício da computação futura do John Whaley, The Jalapeño dynamic optimizing compiler for Java, Proceedings of the ACM 1999 conference on Java Grande, p.129-141, June 12-14, 1999, método. San Francisco, California, United States. Quando um evento está disponível na fila de recompilação, a [4] M. Arnold, S. Fink, D. Grove, M. Hind, and P. F. Sweeney. Architecture and thread de recompilação remove o mesmo e realiza a atividade policy for adaptive optimization in virtual machines. Technical Report 23429, IBM Research, Nov. 2004. de compilação especificada pelo evento, instalando o resultado do método compilado na VM.