日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

一臺機(jī)器上java虛擬機(jī)會存在多少個?

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

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

下面來看一下實際情況;

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

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

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

有如下一段英文描述;

jvm實例的個數(shù)
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.
? ? 第一句話說:一般而言,每個應(yīng)用程序?qū)⒂兴约旱腏VM實例......

一個java的應(yīng)用程序?qū)?yīng)于一個JVM實例,當(dāng)一個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程序;?

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

結(jié)束test2程序;java.exe少了一個;?

如果都結(jié)束,3個java.exe都消失;

也就是;

每一個java程序?qū)?yīng)一個jvm實例,都有自己的程序執(zhí)行空間,每一個都有一套jvm虛擬機(jī)機(jī)制


一個java程序?qū)?yīng)一個jvm實例,一個jvm對應(yīng)一個堆;

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

?

java虛擬機(jī)有多種實現(xiàn)版本;java -version命令中可以看到j(luò)ava虛擬機(jī)的名稱;

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。