2010-05-19 9 views
8

necesito para invocar el archivo .jar en la JVM separada de otra aplicación Java, y es muy CPU que consume, por lo que debe correr con prioridad fondo con el fin de no afectar el resto de la sistema. ¿Hay algún método multiplataforma para hacer esto?forma de plataforma cruzada para cambiar la prioridad del proceso java

+0

en el * "escribir una vez, ejecutar en cualquier lugar" * sentido multiplataforma, no. Pero crear una pequeña pieza de código no portátil que funcione en cada Un * x (incluido OS X) y cada máquina de Windows realmente no es tan difícil. +1 a la respuesta de Stephen C. – SyntaxT3rr0r

Respuesta

3

La respuesta simple es que no hay manera portátil para cambiar la prioridad de un proceso en Java. (Hilos - sí, Procesos - No.)

Si su aplicación Java necesita iniciar una nueva JVM para ejecutar la aplicación intensiva de CPU, entonces es probable que ya no sea totalmente portátil. Por ejemplo, se suele necesitar dar el nombre de ruta del comando java (o equivalente), un argumento -cp (o equivalente), opciones de JVM específicos del sistema, y ​​así sucesivamente.

Por lo tanto, suponiendo que el comando para iniciar la JVM es ya no portátil, cabe apenas importa si se reemplaza el comando con un guión envoltorio que hace cosas específicas del OS para cambiar la prioridad del proceso iniciado. (Por ejemplo, para UNIX o Linux simplemente podría utilizar nice para poner en marcha la JVM.)

1

No sé la manera de establecer la prioridad de un proceso externo. Thread sin embargo tiene un método setPriority, por lo que si el control de la aplicación de destino, tal vez podría añadir un interruptor, contando la aplicación para establecer su propia prioridad al mínimo:

theThread.setPriority(Thread.MIN_PRIORITY);

Si aún afecta al sistema, lo sugiero que intercalen algunos cortos sleep ing para descargar la CPU.


Otra opción:

Si se pone el objetivo .jar en la ruta de clase de la aplicación "iniciación", simplemente puede invocar la main -method del fichero-jar en un hilo de nueva creación , y luego configure la prioridad usando el método anterior. (Esto debería funcionar incluso si usted no controla el código fuente del archivo jar de destino.)

+1

Entiendo que necesita generar otro proceso, y este método es para un hilo, así que no creo que pueda funcionar ... – Persimmonium

+0

oh ... mmm ... buen punto. Supongo que esto solo tiene sentido entonces, si existe la posibilidad de agregar un cambio al programa que se está ejecutando. – aioobe

+0

Si tiene la fuente del otro proceso que se está ejecutando, puede establecerse en MIN_PRIORITY, ¿verdad? –

Cuestiones relacionadas