2016-07-29 76 views
0

我想問的是,如果我們運行使用的java命令一個獨立的Java應用程序,爲每個應用程序JVM的一個新的實例與一個單獨的堆等爲什麼在Java EE Application Server中使用單個JVM實例?

  1. 但是,爲什麼在一個Java EE創建應用程序服務器是否只有一個用於應用程序服務器實例上部署的每個耳朵或war文件的JVM實例?
  2. 爲什麼我們爲每個應用程序使用單獨的類加載器來區分應用程序而不是單獨的JVM實例。
  3. 在App服務器中是否需要單個JVM實例來管理servlet,jsp和ejb等的生命週期?

回答

0

假設你有開始,如Oracle應用服務器或JBoss應用需要JVM的一個實例bacause你必須配置JVM調整屬性到bin文件夾* .bat或* sh文件以分鐘和堆的最大尺寸以及僅在應用程序服務器上的所有jvm調優屬性。當您部署在應用程序服務器上部署的多個war文件時,它會從服務器獲取java屬性。

但是,當您使用獨立應用程序比在這種情況下,每個應用程序已配置在其自己的jvm屬性。

0

關於類加載器 - 它將(理論上)服務器與應用程序(EAR/WAR)以及每個應用程序相互隔離。例如,假設服務器使用Spring 3.x,並且應用程序1使用Spring 4.x.隔離允許服務器只看到3.x,而應用程序1只能看到4.x

但是,如果應用程序1的EAR/WAR中不包含Spring 4.x jar,會發生什麼?父類加載器(服務器)試圖加載Spring,它當然是3.x.然後,還會從服務器上下文中加載任何依賴項。這實際上可能看起來在功能上是可行的(可怕的),但更可能的是你最終得到了MethodNotFound和ClassNotFound異常。

相關問題