一个JVM是否可以同时运行多个程序?

2022-09-04 01:22:27

一个JVM是否可以同时运行多个程序?如果是这样,如何?如果不是,为什么?

要运行一个程序,我们只需做

java ProgramName

但是我们可以使用相同的JVM实例来运行另一个程序吗?


答案 1

答案取决于你对“程序”的定义。具有方法且以方法开头的 Java 程序通常不能在同一 JVM 中运行,因为没有资源或命名空间的内置分离。例如,如果两个程序使用同一库的冲突版本,该怎么办?mainjava NameOfClass

我们还有旨在共享 JVM 的应用程序,例如企业应用程序。这些程序被设计为在“应用程序服务器”的上下文中运行,该服务器基本上是用于运行其他程序的程序。应用程序服务器使用类装入器和安全性管理器将应用程序资源分开。例如,两个应用程序可能使用冲突版本的库或冲突的类名,并且由于通过不同的类装入器装入,它们仍然共享一个 JVM。


答案 2

不直接。但是,由于JVM确实支持线程,因此您可以通过创建一个包装器将两个程序粘贴在一起,该包装器在不同的线程中启动每个程序(假设它们是兼容的,并且不执行诸如定义具有相同名称的不同类之类的操作)。

如果您不希望程序能够相互干扰或共享任何状态,那么在同一进程中运行它们又有什么意义呢?如果您只想通过仅加载一次标准库来节省内存,则可以设置并隔离这两个程序。然而,这必然会阻止他们用反射做疯狂的事情。SecurityManagersClassLoaders


推荐