亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JVM Client和Server端有什么區(qū)別

 更新時(shí)間:2020年11月16日 09:06:39   作者:Java老K  
這篇文章主要介紹了JVM Client和Server端有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

java -version 命令大家都用過,大部分就是看下jdk版本或檢查下環(huán)境變量的設(shè)置,但最后一行的信息也挺重要,如下圖所示:

Server VM表示我們的虛擬機(jī)類型,mixed mode表示虛擬機(jī)以混合模式工作。

一. 虛擬機(jī)

先說下本篇文章的內(nèi)容都是基于HotSpot虛擬機(jī)。

我們熟知的Java虛擬機(jī)是一種規(guī)范標(biāo)準(zhǔn),有多種實(shí)現(xiàn),比如HotSpot虛擬機(jī)就是JVM的一種實(shí)現(xiàn),也是目前使用范圍最廣的Java虛擬機(jī)。其實(shí)HotSpot最早也不是Sun開發(fā)的,是他早期收購的一家公司開發(fā)的,后來Sun把JDK開源后,OpenJDK誕生了,所以HotSpot成了這兩個(gè)JDK共用的虛擬機(jī)。

除了HotSpot虛擬機(jī),Oracle原來的JRockit VM也是Java虛擬機(jī)的實(shí)現(xiàn)(后面會把HotSpot和JRockit整合),還有IBM也有對應(yīng)的VM實(shí)現(xiàn)。

為什么叫HotSpot虛擬機(jī)?

如同它的名字,它的特點(diǎn)就是熱點(diǎn)代碼探測技術(shù),這個(gè)技術(shù)可以通過執(zhí)行計(jì)數(shù)器找出最具有編譯價(jià)值的代碼,然后通過JIT即時(shí)編譯成機(jī)器碼并緩存起來,提高執(zhí)行效率。

而JIT編譯只是一種概念,HotSpot內(nèi)置C1,C2這兩種編譯器實(shí)現(xiàn):

C1:編譯時(shí)間短,優(yōu)化策略簡單C2:編譯時(shí)間長,優(yōu)化策略復(fù)雜

C1,C2都屬于JIT編譯技術(shù),是JIT的不同實(shí)現(xiàn)

二. 虛擬機(jī)類型client server的區(qū)別

HotSpot虛擬機(jī)分client端和server端,準(zhǔn)確的說應(yīng)該是分兩種類型,因?yàn)閏lient,server VM是兩種適用不同業(yè)務(wù)場景的虛擬機(jī)類型。

  • client VM 使用的是C1編譯器
  • server VM 使用的是C2編譯器

在第一張圖中圈出的Server VM使用的就是C2編譯器。

所以clientserver最大的區(qū)別就是C1和C2的區(qū)別,主要體現(xiàn)在編譯策略上:

  • Client啟動快,內(nèi)存占用少,編譯快,針對桌面應(yīng)用程序優(yōu)化(比如GUI),為在客戶端環(huán)境中減少啟動時(shí)間而優(yōu)化
  • Server啟動慢,但是一旦運(yùn)行起來后,性能將會有很大的提升,因?yàn)榫幾g更完全,效率高,針對服務(wù)端應(yīng)用優(yōu)化

大家可以根據(jù)具體的業(yè)務(wù)場景選擇,不過現(xiàn)在的系統(tǒng)大部分都是B/S架構(gòu),前后端又是分離的,所以我們用的虛擬機(jī)大部分都是server類型。

網(wǎng)上有張c++和java的性能對比,如下:

可以看到最明顯的差異是JVM client端和server端關(guān)于method call方法調(diào)用上的性能對比(紅色是server VM,黃色是client VM,越高越好)。

另外client/server VM除了在編譯策略和性能上的區(qū)別外,在內(nèi)存分配和GC上也不一樣:

  • client 默認(rèn)-Xms是1M,-Xmx是64M,新生代選擇的是串行g(shù)c,舊生代選擇的是串行g(shù)c
  • server 默認(rèn)-Xms是128M,-Xmx是1024M,新生代選擇的是并行回收gc,舊生代選擇的是并行g(shù)c

如果需要修改HotSpot虛擬機(jī)的類型可以通過%JAVA_HOME%jrelibamd64文件夾里的jvm.cfg修改(jdk版本不一樣對應(yīng)的目錄可能不叫amd64這個(gè)名字),jvm.cfg文件內(nèi)容如下:

-server KNOWN-client IGNORE

當(dāng)該參數(shù)不指定時(shí),虛擬機(jī)啟動檢測主機(jī)是否為服務(wù)器,如果是,則以ServerVM啟動,否則以ClientVM啟動,檢測的根據(jù)是至少2個(gè)CPU和最低2GB內(nèi)存。

還有一種切換方式是每次執(zhí)行java命令時(shí)在后面加上-client或-server的參數(shù)指定。

這里需要注意一點(diǎn):無論是哪種方式切換,都是調(diào)用對應(yīng)的jvm.dll執(zhí)行的,所以在你本地必須有client和server各自對應(yīng)的jvm.dll文件存在才行,否則無法切換虛擬機(jī)類型。

三.虛擬機(jī)工作模式

第一張圖里的最后一個(gè)圈出的mixed mode表示虛擬機(jī)的工作模式為混合模式,在命令行輸入java -X可以查看其它模式:

還有一種-Xcomp表示純編譯模式。

下面講下三種模式的區(qū)別

  • -Xmixed 混合模式:mixed mode是HotSpot虛擬機(jī)的默認(rèn)工作模式,在上篇文章中講到過虛擬機(jī)執(zhí)行字節(jié)碼分兩種方式:解釋執(zhí)行和編譯執(zhí)行,編譯執(zhí)行就是JIT(C1/C2),所以混合模式就是解釋執(zhí)行+編譯執(zhí)行(根據(jù)clientVM還是serverVM類型區(qū)分使用C1還是C2編譯器),這樣就可以發(fā)揮解釋執(zhí)行和編譯執(zhí)行的優(yōu)勢。
  • -Xint 解釋模式:interpreted mode,強(qiáng)制JVM以解釋方式執(zhí)行所有的字節(jié)碼
  • -Xcomp 編譯模式:compiled mode,與-Xint相反,JVM在第一次使用時(shí)會把所有的字節(jié)碼編譯成本地代碼(實(shí)際我測試下來的效果并不如混合模式)

解釋模式和編譯模式的區(qū)別上篇文章也有講到,這里就不展開了

同樣工作模式也可以切換,在命令行加上-Xint或-Xcomp的參數(shù)設(shè)置:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot使用ip2region獲取地理位置信息的方法

    SpringBoot使用ip2region獲取地理位置信息的方法

    這篇文章主要介紹了SpringBoot使用ip2region獲取地理位置信息的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 解析java中的condition

    解析java中的condition

    Condition 將 Object 監(jiān)視器方法(wait()、notify()和notifyAll())分解成截然不同的對象,以便通過將這些對象與任意Lock實(shí)現(xiàn)組合使用,為每個(gè)對象提供多個(gè)等待 set(wait-set)
    2021-06-06
  • Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實(shí)例詳解)

    Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實(shí)例詳解)

    unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實(shí)例對象,defineAnonymousClass可以創(chuàng)建一個(gè)VM匿名類(VM?Anonymous?Class),以及直接從內(nèi)存級別修改對象的值。這篇文章主要介紹了Java中的Unsafe在安全領(lǐng)域的一些應(yīng)用總結(jié)和復(fù)現(xiàn),需要的朋友可以參考下
    2022-03-03
  • MyBatis中resultType屬性的使用

    MyBatis中resultType屬性的使用

    這篇文章主要介紹了MyBatis中resultType屬性的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 小議Java的源文件的聲明規(guī)則以及編程風(fēng)格

    小議Java的源文件的聲明規(guī)則以及編程風(fēng)格

    這篇文章主要介紹了小議Java的源文件的聲明規(guī)則以及編程風(fēng)格,僅給Java初學(xué)者作一個(gè)簡單的示范,需要的朋友可以參考下
    2015-09-09
  • IDEA中程序包Org.Springframework.Boot不存在問題及解決

    IDEA中程序包Org.Springframework.Boot不存在問題及解決

    這篇文章主要介紹了IDEA中程序包Org.Springframework.Boot不存在問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法

    Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法,涉及java文件I/O操作及字符串遍歷、運(yùn)算實(shí)現(xiàn)統(tǒng)計(jì)功能相關(guān)技巧,需要的朋友可以參考下
    2017-07-07
  • Java源碼重讀之ConcurrentHashMap詳解

    Java源碼重讀之ConcurrentHashMap詳解

    ConcurrentHashMap(CHM)是日常開發(fā)中使用頻率非常高的一種數(shù)據(jù)結(jié)構(gòu)。本文將從源碼角度帶大家深入了解一下ConcurrentHashMap的使用,需要的可以收藏一下
    2023-05-05
  • Spring中的@EnableConfigurationProperties使用方式以及作用詳解

    Spring中的@EnableConfigurationProperties使用方式以及作用詳解

    這篇文章主要介紹了Spring中的@EnableConfigurationProperties使用方式以及作用詳解,使用了?@ConfigurationProperties?注解的配置類生效,將該類注入到?IOC?容器中,交由?IOC?容器進(jìn)行管理,此時(shí)則不用再配置類上加上@Component,需要的朋友可以參考下
    2024-01-01
  • java異步編程之一文看完其異步函數(shù)表

    java異步編程之一文看完其異步函數(shù)表

    這篇文章主要為大家介紹了java異步編程之一文看完其異步函數(shù)表示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評論