2017-05-12 34 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

相關問題