2011-08-16 20 views
5

¿tiene alguna idea de por qué me podía conseguir una 'Excepción en hilo java.lang.OutOfMemoryError 'principal': Java heap space' error al construir mi aplicación para Android, a pesar de que he añadido -vmargs -Xmx1024M -Xms512M a los argumentos del eclipse? Me gustaría saber qué error podría haber hecho que desencadenaría un error de este tipo en el momento de la compilación, ya que me parece que solo un error en Eclipse o Maven podría producir dicho error en el momento de la compilación. Estoy usando run as maven install para compilar mi aplicación (con el plugin maven android eclipse). Ejecutar como-> 'paquete maven' también produce la misma falla de compilación, después de esperar aproximadamente 1min30. Tengo una computadora de escritorio con 3GB de memoria y mi aplicación no es tan grande.espacio de almacenamiento dinámico de Java

Gracias.

+0

¿Está utilizando alguna función de mapa de bits en su aplicación? –

+0

sí, él es y yo soy – Moussa

Respuesta

8

Agregue -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path a su jvm args para que cuando se agote la memoria se descargue el montón. A continuación, puede usar Eclipse Memory Analyser o jhat para explorar el montón y diagnosticar dónde podría estar el problema.

Actualización: Intente aumentar la memoria de su plugin maven android. En su pom.xml, añadir un argumento de JVM para Xmx a la configuración del plugin:

<plugin> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
    <jvmArguments> 
     <argument>-Xmx1500m</argument> 
    </jvmArguments> 
    </configuration> 
</plugin> 
+0

Lo siento, no puedo deshacerme del montón. Son estos argumentos se supone que están insertados en la misma ubicación que los cuadro de texto '' VM argumentos de la 'configuración de ejecución' en eclipse, así: -Xms1024M -Xmx1024M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = "C:"? – John156

+0

@ John156 ver mi actualización sobre el aumento de la memoria del complemento – dogbane

+0

¡Dios mío, muchas gracias! He estado tratando de arreglar esto por días. ¿Podría obtener una breve explicación de por qué funciona esto, por qué utilizan jvms por separado y por qué los argumentos del proceso de llamada (eclipse, jre, ...) no se configuran automáticamente en el proceso hijo? – John156

2

Sus argumentos Eclipse JVM no importan. Tienes que aumentar el montón del compilador.

cito http://javahowto.blogspot.com/2006/06/fix-javac-java-lang-outofmemoryerror.html

If [...] you're running Eclipse, go into your "run As" dialog for your Build.xml and add -Xms256m -Xmx256m to the "VM Arguments" text box

+0

Esto fue tan inteligente que por un tiempo realmente pensé que resolvería mi problema. No sabía que la JVM del eclipse era diferente a la del compilador. Así que para que quede claro, lo que hice fue hacer clic en la flecha de ejecución, luego ejecutar configuraciones, luego seleccionar la configuración de ejecución, luego ir a la pestaña JRE y en el cuadro de texto en blanco 'Argumentos VM', agregar '-Xms1024M - Xmx1024M ', luego aplicar y ejecutar. Esto desafortunadamente no funcionó, el problema sigue siendo el mismo. – John156

+0

Sí, porque ahora me doy cuenta de que está utilizando el complemento Android de Maven y su integración con Eclipse. Eso significa que la configuración del compilador de Eclipse no es importante, sino la del complemento. –

0

Si el aumento no responde entonces sugeriría a usted que compruebe el número de líneas para cada clase que escribió. Puede ser un problema de compilación si hay muchos objetos, por lo que debe intentar particionar los métodos y/o copiarlos en nuevas clases si una o más de las clases tienen más de 3000 líneas.

1

Experimenté esta Conversión a formato Dalvik fallido: No se puede ejecutar dex: espacio de pila de Java. aumentar todos los valores en el archivo eclipse.ini no ayudó. Esto me sucedió después de que actualicé mi plugin ADT de 12 a 16. Cambié los SDK de Android que apuntaban a mis proyectos existentes antes de la actualización (de los sdks de Android que estaban conectados en mi adt anterior los cambié a los sdks de Android que estaban conectados a mi nuevo adt) y me solucionó el problema. espero que esto ayude. y si ayuda a alguien, vote por más 1 esto.

Cuestiones relacionadas