Pregunta

Quiero ejecutar un frasco de mi propia aplicación java. (Que es imposible importar el frasco una biblioteca e iniciar la aplicación como un ejemplo de mi propia "lanzador"). Para ejecutar un frasco de mi propia aplicación de java ... estoy usando las siguientes líneas:

String [] cmd = new String [] {"java","-jar","myjar.jar"};
Process process = Runtime.getRuntime().exec(cmd, null, null);

Esto funciona perfectamente. No tengo ninguna queja de esto.

Mi pregunta es la siguiente: Qué tiene el mismo rendimiento que la ejecución de ese frasco de "java-jar myjar.jar" en la línea de comandos? O es peor ?? En el peor ... cualquier sugerencia sobre puedo hacer esto con el mismo rendimiento?

¿Fue útil?

Solución

El rendimiento es esencialmente el mismo, debido a que la esencia del mismo está sucediendo en ambos casos. Por ejemplo, en una plataforma UNIX / Linux:

  • El proceso actual es 'bifurcada'.
  • El nuevo proceso hijo 'exec es el 'comando java', pasando los argumentos de línea de comando especificado.
  • El niño JVM se inicia ...

Es posible que haya diferencias de rendimiento secundarias. Por ejemplo, en la forma en que los flujos de entrada / salida / error estándar del niño quedan a cargo de los padres puede ser diferente. Pero por lo general usted puede olvidarse de este tipo de cosas.

[notas Como @Amadan, usando un cargador de clases para iniciar la aplicación Java en el actual JVM es considerablemente más eficiente ... porque evita los gastos de inicio de la JVM, compilación JIT del código común, etc, pero el principal inconveniente (aparte de la simplicidad) es que no hay manera efectiva para la aplicación "padre" para controlar una aplicación de "niño" que se ejecuta en la misma JVM. Si el niño se queda atascado en un bucle o es generalmente descuidado con la gestión de recursos, los padres sufre también.]

Otros consejos

Es el misma.

La ejecución de un proceso se ejecuta un proceso, si el procesador de comandos o lo hace su aplicación.

Por supuesto que es igual. Utilice el nuevo ProcessBuilder API, que tiene una mejor forma de especificar argumentos ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top