2009-05-01 6 views
9

Cuando ejecuta un programa a través de la línea de comando, puede usar java -Xms -Xmx para especificar los tamaños de montón. Si el programa se va a ejecutar haciendo doble clic en un archivo .jar, ¿hay alguna manera de utilizar más montón que el estándar?Asigne más espacio de montón a un jar de Java

Respuesta

8

No. Es por eso que a menudo hago un archivo .bat o .sh con esos parámetros y los usuarios directos lo ejecutan en lugar del .jar. Desafortunadamente, es un poco desagradable tener que abrir una ventana de símbolo del sistema, pero eso no se puede evitar.

Como beneficio adicional, si la aplicación se bloquea, puede dirigir a los usuarios a poner pause en el archivo por lotes (o hágalo usted mismo), y luego se puede ver ninguna traza de la pila que se produce.

Editar: También es posible usar una envoltura ejecutable como JSmooth o Launch4J en lugar de un archivo por lotes. Sin embargo, perdería compatibilidad con plataformas cruzadas.

+0

@mmyers: ¡Maldice tus deditos rápidos! ¡Me derrotaron por 54 segundos! – Welbog

+0

Lo siento, veo que estabas ocupado editando la pregunta. (Creo que es la primera vez que alguien ha maldecido mis deditos rápidos ...) –

+2

También podría usar algo como JSmooth: http://jsmooth.sourceforge.net/ – millimoose

5

En lugar de hacer doble clic en el archivo .jar directamente, puede usar un archivo por lotes que ejecute java -jar -Xms -Xmx your_file.jar. Desde el punto de vista del usuario, es lo mismo, pero te da más control sobre el comando que realmente se ejecuta.

+0

+1 por dar la misma respuesta que hice. :) –

2

Puede usar JSmooth o un contenedor similar, que crea un archivo EXE que inicia la JVM con los parámetros necesarios. De esta forma, puede evitar tener un archivo .bat y su cuadro de diálogo de consola. Todavía una manera más es iniciar el programa real en un nuevo proceso utilizando Runtime.exec o ProcessBuilder.

5

Puede hacer que el jar se inicie de nuevo con Runtime.getRuntime(). Exec() con las opciones que desee. El jar puede contener más de un método main() (en diferentes clases) y puede tener una llamada a la otra a través de un exec().

+0

Otra buena opción (aunque no es tan fácil averiguar cuánta memoria hay disponible para usar). +1 –

Cuestiones relacionadas