<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Compiladores - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Compiladores - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 19:22:15 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/compiladores/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Compilação Just-in-Time explicada ]]>
                </title>
                <description>
                    <![CDATA[ A compilação Just-in-Time é um método para melhorar o desempenho de programas interpretados. Durante a execução, o programa pode ser compilado em código nativo para melhorar seu desempenho. Ela também é conhecida como compilação dinâmica. A compilação dinâmica tem algumas vantagens sobre a compilação estática. Ao executar aplicações em Java ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/compilacao-just-in-time-explicada/</link>
                <guid isPermaLink="false">66fde989c4cc5853cfe82902</guid>
                
                    <category>
                        <![CDATA[ Compiladores ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 03 Oct 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/5f9c9d05740569d1a4ca357b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/just-in-time-compilation-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Just in Time Compilation Explained</a>
      </p><p>A compilação <em>Just-in-Time</em> é um método para melhorar o desempenho de programas interpretados. Durante a execução, o programa pode ser compilado em código nativo para melhorar seu desempenho. Ela também é conhecida como compilação dinâmica.</p><p>A compilação dinâmica tem algumas vantagens sobre a compilação estática. Ao executar aplicações em Java ou C#, o ambiente de execução pode analisar a aplicação enquanto ela está sendo executada. Isso permite que um código mais otimizado seja gerado. Se o comportamento da aplicação mudar enquanto ela está sendo executada, o ambiente de execução pode recompilar o código.</p><p>Algumas das desvantagens incluem atrasos na inicialização e a sobrecarga da compilação durante a execução. Para limitar a sobrecarga, muitos compiladores JIT (abreviação de <em>Just-in-Time</em>) apenas compilam os caminhos de código que são frequentemente usados.</p><h2 id="vis-o-geral">Visão geral</h2><p>Tradicionalmente, existem dois métodos para converter o código-fonte em uma forma que pode ser executada em uma plataforma. A compilação estática converte o código em uma linguagem para uma plataforma específica. Um interpretador executa diretamente o código-fonte.</p><p>A compilação JIT tenta usar os benefícios dos dois métodos. Enquanto o programa interpretado está sendo executado, o compilador JIT determina o código mais frequentemente usado e o compila para código de máquina. Dependendo do compilador, isso pode ser feito em um método ou em uma seção menor de código.</p><p>A compilação dinâmica foi descrita pela primeira vez em um artigo por J. McCarthy sobre LISP, em 1960.</p><p>Compilação <em>Just-in-Time</em>, JIT, ou Tradução Dinâmica, é a compilação que é feita durante a execução de um programa – ou seja, em tempo de execução, em vez de antes da execução. O que acontece é a tradução para código de máquina. As vantagens de uma JIT são devidas ao fato de que, como a compilação ocorre em tempo de execução, um compilador JIT tem acesso a informações de tempo de execução dinâmicas, possibilitando melhores otimizações (como a incorporação de funções).</p><p>É importante entender sobre a compilação JIT que ela compilará o <em>bytecode</em> em instruções de código de máquina da máquina em execução. Em outras palavras, o código de máquina resultante é otimizado para a arquitetura da CPU da máquina em execução.</p><p>Alguns exemplos de compiladores JIT são a JVM (<em>Java Virtual Machine</em>) no Java e o CLR (<em>Common Language Runtime</em>), em C#.</p><h2 id="hist-ria">História</h2><p>No começo, um compilador era responsável por converter uma linguagem de alto nível (definida como mais elevada que <em>assembly</em>) em código objeto (instruções de máquina), que então seria ligado (por um <em>linker</em>) a um executável.</p><p>Em determinado ponto da evolução das linguagens, os compiladores compilavam uma linguagem de alto nível em pseudocódigo, que seria então interpretado (por um interpretador) para executar seu programa. Isso eliminou o código objeto e executáveis, permitindo que essas linguagens fossem portáveis para diversos sistemas operacionais e plataformas de <em>hardware</em>. Pascal (que compilava para P-Code) foi uma das primeiras. Java e C# são exemplos mais recentes. Eventualmente, o termo P-Code foi substituído por <em>bytecode</em>, já que a maioria das pseudo-operações são de um byte de comprimento.</p><p>Um compilador <em>Just-in-Time</em> (JIT) é um recurso do interpretador de tempo de execução que, em vez de interpretar <em>bytecode</em> toda vez que um método é invocado, compilará o <em>bytecode</em> em instruções de código de máquina da máquina em execução e, em seguida, invocará esse código objeto. Idealmente, a eficiência de executar o código objeto superará a ineficiência de recompilar o programa toda vez que ele for executado.</p><h3 id="cen-rio-t-pico">Cenário típico</h3><p>O código-fonte é completamente convertido em código de máquina.</p><h3 id="cen-rio-do-jit">Cenário do <em>JIT</em></h3><p>O código-fonte será convertido em uma estrutura semelhante a uma linguagem <em>assembly</em> – por exemplo, IL (linguagem intermediária) para C#, ou <em>bytecode</em> para Java].</p><p>O código intermediário é convertido em linguagem de máquina somente quando a aplicação precisa, ou seja, apenas os códigos necessários são convertidos em código de máquina.</p><h2 id="compara-o-jit-x-n-o-jit"><strong>Comparação JIT x não JIT</strong></h2><p>No JIT, nem todo o código é convertido em código de máquina; primeiro, uma parte do código que é necessária será convertida em código de máquina. Então, se um método ou funcionalidade chamado não estiver em máquina, será convertido em código de máquina, o que reduz o peso na CPU. Como o código de máquina será gerado em tempo de execução, o compilador JIT produzirá código de máquina otimizado para a arquitetura de CPU da máquina em execução.</p><p>Alguns exemplos de JIT são:</p><ul><li>Java: JVM (<em>Java Virtual Machine</em>)</li><li>C#: CLR (<em>Common Language Runtime</em>)</li><li>Android: DVM (<em>Dalvik Virtual Machine</em>) ou ART (<em>Android RunTime</em>) em versões mais recentes</li></ul><p>A máquina virtual do Java (JVM) executa <em>bytecode </em>e mantém uma contagem de quantas vezes uma função é executada. Se essa contagem exceder um limite predefinido, o JIT compila o código em linguagem de máquina, que pode ser diretamente executada pelo processador (ao contrário do caso normal em que o javac compila o código em <em>bytecode </em>e então o Java, o interpretador, interpreta esse <em>bytecode</em> linha por linha, converte-o em código de máquina e executa).</p><p>Além disso, na próxima vez que essa função for calculada, o mesmo código compilado é executado novamente, ao contrário da interpretação normal, em que o código é interpretado novamente linha por linha. Isso torna a execução mais rápida.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
