2010-10-13 19 views
7

Duplicar posibles:
Java - C-Like Fork?cómo bifurcar JVM?

que quería saber cómo es posible que desembolsar un niño JVM de un JDK o incluso es posible hacerlo?

Algunos frameworks como hadoop fork a child JVM para tareas específicas, así Por favor, arroje algo de luz sobre el tema.

Gracias!

+2

¿Por qué el voto a favor? Es una pregunta razonable. –

Respuesta

7

En general, no creo que esto sea posible en el sentido que usted quiere decir. Puede System.exec() para derivar un nuevo proceso y puede llamar a una nueva JVM de esa manera. Tenga en cuenta que ciertamente puede llamar al fork() directamente desde el código nativo, pero en las palabras de un cartel here, "No lo haga. Simplemente no lo haga".

+1

Ese enlace es un poco demasiado específico de Android, ¿no? – ShiDoiSi

+1

No lo crea, al menos para algo vinculado y no copiado. La misma semántica de la horquilla se aplica en otra parte ... No creo que la horquilla sea significativa con una JVM, sin mucho equipaje adicional. – andersoj

13

La horquilla se suele confundir con spawn. Spawn es fork + exec (lo que significa que inicia un proceso que reemplaza al actual y hereda algunos de sus recursos externos, como los sockets abiertos ).

Spawn está disponible en Java (a través de System.exec y similares).

La horquilla no está en Java, porque sería extremadamente problemático.

La horquilla requiere la clonación del espacio de direcciones. El soporte del núcleo para hacer esto de manera eficiente no está disponible en la mayoría de los sistemas operativos que no son Unix; p.ej. U/win y Cygwin han luchado para emular el tenedor en Win32. En un lenguaje como Java, el recolector de elementos no utilizados & Los compiladores JIT tienden a tocar las páginas de Vmem, como , que el espacio no permanecerá mucho tiempo compartido después del tenedor.

La clonación tiene muchos efectos secundarios. P. ej., Los búferes de entrada o salida se procesarán en todos los de los hijos bifurcados. La memoria compartida SysV se desconectará.

La mayoría de los idiomas y muchas bibliotecas simplemente se niegan a bifurcación de soporte. Esto incluye la API (POSIX) de enhebrado; El niño no puede usar hilos hasta que ejecute (es decir, se convierta en un engendro)!

Perl utiliza la horquilla porque su interior está muy cerca de C/Unix, y su multihilo es abismal.

shell Unix utiliza una horquilla de diseño, que es la forma en que las instantáneas todas las variables locales y el estado. También es por eso que no hay shell Unix decente para un entorno que no sea de Unix.

+0

Muy buena respuesta. –