我读到每个应用程序都在自己的JVM中运行.为什么会这样?为什么他们不让一个JVM运行2个或更多应用程序?
我读了一篇SO帖子,但无法在那里得到答案. 每个Java应用程序有一个JVM吗?
我在谈论通过public static void main(String [])方法启动的应用程序...)
Ste*_*n C 30
(我假设您正在谈论通过public static void main(String[])方法启动的应用程序......)
理论上,您可以在JVM中运行多个应用程序.在实践中,它们可以以各种方式相互干扰.例如:
简而言之,存在很多问题.人们努力做到这一点,但他们从未真正成功过.一个例子是Echidna图书馆,虽然该项目已经安静了大约10年. JNode是另一个例子,虽然他们(实际上我们)通过破解核心Java类(如java.lang.System)来"欺骗",以便每个应用程序都获得了看似独立的System.in/out/err版本,系统属性等等1.
1 - 这个("proclets")应该是一个临时的黑客,等待使用真正的"隔离"的正确解决方案.但隔离支持停滞不前,主要是因为JNode架构使用单个地址空间而没有明显的方法来分离"系统"和"用户"的东西.因此,虽然我们可以创建与隔离API匹配的API,但实际上不可能实现密钥隔离功能(如干净地杀死隔离).或者至少,这是我的观点.
有一个JVM预应用程序的原因,基本相同,每个应用程序都有OS进程.以下是为每个应用程序创建一个进程的几个原因.
那些像Chrome这样的应用程序甚至会进一步创建多个进程来隔离不同的选项卡和插件.
说到Java,没有多少理由不共享JVM.
虽然有几种情况,JVM实际上是在应用程序之间共享的:
但实际上,即使在服务器端java中,由于上述原因,每个应用程序通常最好使用JVM(或几个).
| 归档时间: |
|
| 查看次数: |
10412 次 |
| 最近记录: |