2017-05-12 33 views
-1

我们可以在一个JVM中运行多个进程吗?每个进程都应该有自己的内存配额?一个JVM下的多个进程

我的目标是在新的http请求进入时启动新进程,并为进程分配一个单独的内存,以便每个用户请求都有自己的内存配额 - 并且在其内存配额获取时不会打扰其他用户请求充分。

我该如何做到这一点?

不知道这是否是假设。

+2

*我们可以在一个JVM中运行多个进程吗?*是的。 *并且每个进程都应该有自己的内存配额?* No. –

回答

3

简短回答:不是。

Java平台为您提供了两种选择:

  1. 线程。这在很多情况下都是典型的答案:每个新的传入请求都由一个单独的线程处理(可能来自池以限制并行创建/使用的线程实例的总数)。但是当然:线程存在于同一个进程中;有没有这样的事情来控制线程正在做的“关联”的内存消耗。
  2. 子进程。您可以创建一个真实进程并使用它来运行您想要运行的任何程序。但当然:那么你有一个外部真实的过程来处理。

所以,本质上,真正的答案是:不,你不能将这个想法应用到Java。 “更多”Java解决方案将研究诸如应用服务器等概念,例如Tomcat或WebSphere。

或者,如果你坚持手动做事;你可以建立你自己的“负载平衡器”;你在哪里有一个面向客户端的JVM;它简单地将请求“转发”给许多其他JVM中的一个;而那些“其他”JVM将独立工作;每个都在自己的过程中运行;当然你可以对CPU /内存/使用情况进行“微观管理”。

+0

关于子进程“您有一个外部真实进程需要处理”是否打算启动另一个JVM? – manurajhada

+0

这是一个*子进程*。 *你*决定这个过程会做什么。当然,您可以在子进程中运行**另一个** JVM。但要明白:JVM完全运行**。这两个JVM之间没有任何魔术连接,所以如果你想与那个东西进行通信,你必须使用套接字或其他进程间通信方式! – GhostCat

+0

好的。我如何在JVM中运行多个进程,这些进程之间没有共享内存?如果我使用ProcessBuilder,它将启动另一个JVM。我的每个http请求都是孤立的,但为每个请求启动另一个JVM并不是一个好方法。所以我想要实现的情况是在一个jvm中运行多个进程并为每个进程控制内存配额。 – manurajhada

相关问题