For faster navigation, this Iframe is preloading the Wikiwand page for Compilación anticipada.

Compilación anticipada

En informática, Compilación anticipada (AOT por sus siglas en inglés, ahead-of-time) es el acto de compilar un lenguaje de programación de alto nivel como C o C++, o un lenguaje intermedio como Java bytecode o el Common Intermediate Language (CIL) de .NET, a un código de máquina nativo (dependiente del sistema) con la intención de ejecutar el archivo binario resultante nativamente.

AOT produce código máquina optimizado, igual que un compilador nativo "estándar". La diferencia es que AOT transforma el bytecode de una máquina virtual (VM) a código máquina.

Reducción de la sobrecarga en tiempo de ejecución

Algunos lenguajes de programación con código gestionado que pueden ser compilados a un lenguaje intermedio hacen uso del justo-en-tiempo (JIT). Esto, en resumen, compila código intermedio a código máquina para una ejecución nativa mientras el código intermedio se está ejecutando, lo cual puede hacer disminuir el rendimiento de una aplicación. La compilación anticipada elimina la necesidad de este paso al ejecutar la compilación antes de la ejecución en vez de hacerlo durante la ejecución.

La compilación anticipada de lenguajes dinámicamente tipados a código de máquina nativa u otros bytecodes de máquina virtual es posible sólo en un número limitado de casos. Por ejemplo, el compilador AOT del HiPE para Erlang puede hacerlo gracias a avanzadas técnicas de reconstrucción de tipos estáticos y especulación de tipos.[cita requerida]

En la mayoría de los casos, el uso de programas y librerías compilados con AOT proporciona una reducción considerable del entorno de ejecución, ahorrando así espacio de disco, memoria, batería y tiempo de arranque (eliminación de la fase de JIT), etc. Gracias a este motivo, pueden ser muy útil en dispositivos móviles o embebidos.

Compensaciones en la ejecución

Los compiladores AOT consiguen complejas y avanzadas optimizaciones de código qué en la mayoría de los casos serían demasiado costosas de hacer con JIT. Por otro lado, AOT normalmente no puede ejecutar algunas optimizaciones posibles en JIT, como , optimizaciones guiadas por perfil, propagación pseudo-constante o funciones indirectas/virtuales en línea.

Además, los compiladores JIT pueden optimizar especulativamente código "caliente" haciendo especulaciones con el código. El código generado puede ser empeorado si una suposición especulativa resulta ser errónea más adelante. Estas operaciones hacen daño al rendimiento del software ejecutado hasta que el código es optimizado de nuevo por optimización adatativa. Un compilador AOT no puede hacer tales suposiciones y necesita recopilar tanta información como sea posible en tiempo de compilación. No puede usar tanto código especializado porque podría no saber realmente que tipos se usarían en un determinado método. Tales problemas pueden ser aliviados usando optimizaciones guiadas por perfil. Pero incluso así, el código generado no puede adaptarse a un nuevo perfil de ejecución como un compilador JIT haría.

Véase también

{{bottomLinkPreText}} {{bottomLinkText}}
Compilación anticipada
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?