¿El tiempo de ejecución de Android ART tiene las mismas limitaciones de límite de método que Dalvik?


¿El tiempo de ejecución de Android ART tiene las mismas limitaciones de límite de método que Dalvik? Actualmente, hay un límite de métodos 64k en el archivo dex primario

Author: Charles, 2014-02-01

2 answers

El problema no es con el tiempo de ejecución de Dalvik ni el formato de archivo DEX, sino con el conjunto actual de instrucciones Dalvik. Específicamente, los diversos métodos de invocación de métodos, que se ven así:

invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB

B: method reference index (16 bits)

Puede hacer referencia a un gran número de métodos en un archivo DEX, pero solo puede invocar el primer 65536, porque eso es todo el espacio que tiene en la instrucción de invocación de métodos.

Me gustaría señalar que la limitación está en el número de métodos hace referencia, no el número de métodos definido. Si su archivo DEX tiene solo unos pocos métodos, pero juntos llaman a 70,000 métodos diferentes definidos externamente, va a exceder el límite.

Una forma de solucionar esto es agregar instrucciones adicionales que tomen referencias de métodos más amplias. Un enfoque llamado "jumbo opcodes" se implementó y lanzó en Android 4.0 (ICS), pero nunca se puso completamente en acción, y más tarde se eliminó del árbol. (Me de vez en cuando ver mensajes aquí con mensajes de error de " dx " que hacen referencia a jumbo ops, o de desarrolladores que tropezó con ellos.)

Tenga en cuenta que este no es el problema resuelto por el hack de Facebook . Eso se debe a un búfer de tamaño fijo para contener metadatos de clase/método/campo. No hay un límite específico del método allí; puede eliminar el búfer al tener muchos campos.

Entiendo que la implementación actual de ART maneja el mismo conjunto de instrucciones Dalvik lo hace, así que la situación no será diferente.

 68
Author: fadden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:51

Anwar Ghuloum dijo en este Android Desarrolladores Backstage episodio que no van a arreglar el bytecode en un futuro próximo.
En su lugar, a partir de Android L, admitirán de forma nativa multi-dex al colapsar todos los archivos dex (de un APK) en un solo archivo oat.

 5
Author: Alex Lipov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-04 19:54:14