日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一台机器上有几个java虚拟机

發布時間:2025/4/14 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一台机器上有几个java虚拟机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一臺機器上java虛擬機會存在多少個?

一直以來,我都認為,每臺電腦上java虛擬機只存在一個;如果你啟動多個java程序,這些程序都在一個虛擬機中運行。這是常規的想法,就像我們自己的電腦,電腦只有一臺,可以跑很多個程序。
如果說有多個java虛擬機,顯然說法有問題。

諸如此類的疑問;
在一臺機器上啟動兩個tomcat,會有幾個java虛擬機?
再如在elcipse中run一個main方法,會單獨開一個java虛擬機嗎?
執行一個class文件,會單獨開一個java虛擬機嗎?

下面來看一下實際情況;

Java 程序本質上是 class 文件描述的字節碼,字節碼的是在 JVM 中 執行 的。
每個 Java 進程都是一個 JVM 實例。
一旦程序結束,JVM 實例也就銷毀了。

所以以java命令啟動的,都會新增一個jvm進程;
所以:
1.啟動2個tomcat,內部是java啟動,會有2個jvm進程;
2.eclipse中的run,內部是java啟動,會單獨開一個jvm進程;
3.執行class文件,如果是java去執行就會開,如果僅僅使用現有jvm進程來load就不會增加;

實際情況是:運行多個java程序,沒有多個java虛擬機,有多個java虛擬機的實例

有如下一段英文描述;

jvm實例的個數
Generally speaking, each application will get its own JVM instance and its own OS-level process and each JVM instance is independent of each other.

There are some implementation details such as Class Data Sharing, where multiple JVM instances might share some data/memory but those have no user-visible effect to the applications (except for improved startup time, hopefully).

A common scenario however is a single application server (or "web server") such as Glassfish or Tomcat running multiple web applications. In this case, multiple web applications can share a JVM.
? ? 第一句話說:一般而言,每個應用程序將有它自己的JVM實例......

一個java的應用程序對應于一個JVM實例,當一個java程序運行的時候,一個jvm實例就誕生了;

下面來做小程序驗證一下;
做3個小程序,代碼如下;

public class test1 { public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 111");Thread.sleep(1000);}} }public class test2 { public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 222");Thread.sleep(1000);}} }public class test3 { public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 333");Thread.sleep(1000);}} }

同時運行3個java程序;?

看一下任務管理器;有3個java.exe;并不是 test1,test2, test3 3個程序;看這3個java.exe的描述,是一樣的,Java(TM) Platform SE binary;?

結束test2程序;java.exe少了一個;?

如果都結束,3個java.exe都消失;

也就是;

每一個java程序對應一個jvm實例,都有自己的程序執行空間,每一個都有一套jvm虛擬機機制


一個java程序對應一個jvm實例,一個jvm對應一個堆;

堆內存用來存放運行時創建的對象。一般來講,通過 new 關鍵字創建出來的對象都存放在堆內存中。由于 JVM 是基于堆棧的虛擬機,而每個 Java 程序都運行在一個單獨的 JVM 實例上,每一個實例唯一對應一個堆,一個 Java 程序內的多個線程也就運行在同一個 JVM 實例上,因此這些線程之間會共享堆內存,鑒于此,多線程在訪問堆中的數據時需要對數據進行同步。

?

java虛擬機有多種實現版本;java -version命令中可以看到java虛擬機的名稱;

? ? Java HotSpot<TM> 64-Bit Server VM,這個是java虛擬機的名字;

總結

以上是生活随笔為你收集整理的一台机器上有几个java虚拟机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。