example ejemplo code java process ipc processbuilder

ejemplo - java process runtime exec timeout



Compartir objetos en los procesos de Java (4)

Creo que puedes usar cachés distribuidos para este propósito (EHCache, memcached, etc.)

Estoy ejecutando otra JVM (java.exe) desde la aplicación principal. ¿Hay alguna manera de compartir un objeto (un objeto bastante grande) con el proceso recién creado (en el momento de la creación o después de que se creó)?

someObject sO= new someObject(); //sO is populated //Creating new process Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("java -cp " + tempDir + jarsInPath + " " + appMain);

Ahora quiero que el objeto sO esté disponible para el proceso denotado por el objeto de proc

¿Provee ProcessBuilder alguna utilidad para este propósito?


No, no hay compatibilidad de memoria compartida en Java.

La forma más sencilla de abordar esto sería serializar el objeto en un archivo temporal y luego deserializarlo en la nueva JVM.


Puede exponer un servicio para permitir el acceso a los datos del objeto. Es comparativamente simple configurar la comunicación entre procesos usando RMI. Habrá una sobrecarga de IPC, por lo que no será tan eficaz como el acceso local, el acceso detallado resultará costoso, pero si obtiene un resumen u otros datos agregados, este podría ser un modelo decente.

Usted no dice por qué estos son procesos separados. ¿Tiene alguna oportunidad de cargar el código de su proceso hijo directamente en el padre? La carga y descarga dinámica es posible.


Si desea compartir objetos, la mejor manera es usar hilos en lugar de un proceso separado. Los procesos no pueden compartir memoria (excepto a través de JNI), por lo que tendría que copiar el objeto grande en forma serializada, ya sea a través de archivos o mediante una conexión de socket RMI (siendo esta última la mejor opción ya que da como resultado una sincronización inherente) .