Cómo genera Android el arte de compilación de Android
inTime) compila dinámicamente durante el tiempo de ejecución.
AOT y JIT tienen sus propias ventajas y desventajas. No los detallaré en detalle, solo enumeraré algunas de las ventajas y desventajas más importantes:
El proceso de compilación principal. AOT se realiza en la máquina de desarrollo, por lo que no importa si la velocidad de compilación es un poco más lenta, y se puede optimizar completamente y realizar varias optimizaciones que requieren mucho tiempo, mientras que JIT se compila dinámicamente en tiempo de ejecución y generalmente no puede; realizar demasiadas optimizaciones que requieren mucho tiempo. Esto afecta la velocidad de inicio y ejecución.
Más específicamente, tomando como ejemplo la JVM de Sun, JIT se divide aproximadamente en dos modos: cliente y servidor. La VM en modo cliente interpreta y ejecuta al mismo tiempo e identifica áreas activas para la compilación JIT, por lo que no afectará significativamente la velocidad de inicio; considerando el consumo de memoria, no se compilarán todos los códigos de bytes de Java. El modo de servidor es una compilación JIT completa
Porque no importa si el servidor se inicia lentamente, una vez que está en funcionamiento, se ejecuta durante mucho tiempo, por lo que vale la pena dedicar un poco de tiempo a optimizarlo por completo.
Debido a limitaciones de optimización, el código nativo compilado por JIT suele ser más grande, de 5 a 10 veces más grande que el código de bytes, mientras que el código nativo compilado por AOT es incluso más pequeño.
Debido a que es código de máquina precompilado, el código generado y cargado por AOT no es muy diferente del código local ordinario. Sin embargo, todavía se requiere compatibilidad con GC en tiempo de ejecución.
Aunque AOT tiene más tiempo y espacio para la optimización de la compilación, su rendimiento no es necesariamente mejor que el JIT, y hay muchas cosas que la JVM solo puede realizar dinámicamente en tiempo de ejecución para determinar si se puede aplicar la optimización de la compilación. (por ejemplo,
identificar métodos virtuales que se pueden insertar) y desoptimización dinámica en tiempo de ejecución (por ejemplo, cuando se encuentra una nueva instancia de una clase derivada, la original debe cancelarse
p>
en línea). Esto no es tan fácil de hacer con AOT.
El compilador de AOT generalmente se divide en dos versiones. Una versión se usa para compilar todo el sistema y las aplicaciones preinstaladas en la máquina de desarrollo, y la otra versión simplificada se ejecuta en el dispositivo y es responsable de la compilación y Nuevas instalaciones de conexión de aplicaciones.
El código compilado por AOT todavía requiere soporte de tiempo de ejecución, especialmente GC.
Si ART reemplaza JIT con un compilador AOT, además del rendimiento, la huella de memoria de Android también se beneficiará. Actualmente, el código dex ha pasado por dex =gt;
dex =gt optimizado; el proceso de caché JIT, la memoria debe acomodar tanto el caché odex como el JIT, se convertirá en dex
=gt; avena, solo hay avena en la memoria. Sin embargo, considerando que la desoptimización se menciona en el código del intérprete de ART, en algunos casos puede ser necesario cargar el código dex para su interpretación y ejecución. Es importante destacar que oat debe ser un código ejecutable directamente en mmap (en realidad es solo un archivo con formato ELF verdadero), y cargar/recargar con saltos de página será más rápido que compilar desde el estado dinámico de odex.
Más rápido.
En pocas palabras, el arte de ejecutar software que debería aprovechar LLVM es más eficiente
Se mejora el rendimiento y, por otro lado, se puede utilizar software propietario precargado para mantener la confidencialidad. , dejando El cuerpo del programa en la máquina es código de máquina y no hay deoat.
De hecho, Google hace algo similar con el navegador Chrome.
Actualmente, Chrome admite pNACL, un modo en el que el código de bytes se distribuye como código de bytes (LLVM) y se compila localmente. Su rendimiento es cercano al del software compilado directamente en código nativo.
Mozilla ofrece una alternativa, asm.js, que utiliza un motor javascript para ejecutar código nativo C.