在Java中,假设您希望在自己的堆空间中运行任务(例如,因为它可能因内存不足错误而崩溃而不影响程序的其余部分),您可以使用Runtime.exec来加载JVM以及来自文件系统的相关字节代码文件,并重做从头开始启动Java程序所需的所有工作。
如果您要运行的任务相当细粒度,则开销有点高。有没有更低的开销方式呢?
答案 0 :(得分:3)
既然您无论如何都要进行进程间通信,那么您是否正在寻找RMI的选项?使用RMI守护程序,您可以使用池化进程来提交作业并获取结果。这也使您无需手动管理产卵VM等。
或者查看基于作业队列的解决方案,其中主VM创建作业数据包并将其转储到由一个或多个进程监视的队列中。无论如何,AFAIK,这种最细粒度的方式并不是按需生成虚拟机。