最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java性能優(yōu)化之代碼緩存優(yōu)化

 更新時間:2022年07月08日 09:55:40   作者:??我犟不過你??  
這篇文章主要介紹了java性能優(yōu)化之代碼緩存優(yōu)化,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

JIT編譯器版本

JIT編譯器有不同的版本,而最終你使用哪種,取決于你所使用的系統(tǒng)平臺。前面的文章我們說到編譯器有-client-server,

具體劃分應該是如下所示:

  • -client 32位client編譯器
  • -server 32位server編譯器
  • -d64 64位server編譯器

如果你的系統(tǒng)是32位,那么你只能使用32位JVM,如果你是64位系統(tǒng),那么可以選擇32位或64位系統(tǒng)。

不同jvm的編譯器版本如下:

jvm版本-client-server-d64
linux 32位32位client32位server出錯
linux 64位64位server64位server64位server
windows 32位32位client32位server出錯
windows 64位64位server64位server64位server
macOS64位server64位server64位server

我們使用的java8,默認使用的都是server編譯器,同時是開啟分層編譯的。

默認情況JVM如何選擇編譯器?

假如我們沒有指定編譯器的參數(shù),那么JVM是如何選擇使用何種編譯器的呢?

實際上jvm是考慮機器的CPU數(shù)目:

  • 在64位系統(tǒng),無論機器多少CPU,都會使用server編譯器
  • 在32系統(tǒng)
    • 如果只有一個cpu,那么使用client編譯器
    • 多個cpu,使用server編譯器。

如何判斷當前環(huán)境jvm使用的編譯器?

我們最經常使用的查看java版本命令,就可以在最后一行展示當前所使用的編譯器類型:

[root@public-server9 esmp]# java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

如上所示,Linux環(huán)境下使用的是64位server編譯器。

小節(jié):

不同的平臺環(huán)境對應著不同的java版本,不同的java版本又對應著不同的編譯器版本。我們在使用的時候,只需要選擇對應于平臺的java版本,不需要手動指定編譯器,仰仗于平臺所支持的編譯器即可。

常規(guī)的調優(yōu)可能就是選擇不同的編譯器版本,開放分層編譯等。本章,將會具體分析除此以外的編譯器優(yōu)化場景。

代碼緩存

JVM在編譯代碼后,會在代碼緩存當中保存編譯后的匯編語言指令集。而代碼緩存的大小是固定的,換句話說,jvm能夠編譯的代碼數(shù)量就是固定的。

前面我們提到過,如果沒有被編譯成匯編語言的代碼,會通過解釋執(zhí)行的方式去運行,性能會大幅下降。所以如何控制代碼緩存的大小,是一個我們可以優(yōu)化的點。

代碼緩存占滿發(fā)生在什么情況?

通常在使用client編譯器時,會占用大量的代碼緩存,因為其在運行過程中需要編譯的代碼非常多。相反,server編譯器采用優(yōu)先編譯的方式,運行時只會對熱點代碼進行編譯,所以發(fā)生代碼緩存占滿的情況較少。綜上所述,在使用分層編譯的時候,也有一定的可能存在代碼緩存被占滿的情況。

代碼緩存默認大小

代碼緩存在不同版本的java當中,默認代碼緩存大小也不相同,如下僅展示java7和java8的部分:

java版本編譯器類型代碼緩存大小(MB)
java732位 client32
java732位 server32
java732位 server 分層編譯48
java832位 client32
java832位 server 分層編譯240
java864位 server 分層編譯240

如上可以發(fā)現(xiàn),java7的代碼緩存較小,比較容易出現(xiàn)問題。這也是為什么java7沒有默認開啟分層編譯,而java8則默認開啟。

我們可以通過下面的命令查看當前代碼緩存的大小,我這里是java8:

[root@hecs-402944 opt]# jps
14186 Jps
1434 jar
655 WrapperSimpleApp
[root@hecs-402944 opt]# jinfo -flag ReservedCodeCacheSize 1434
-XX:ReservedCodeCacheSize=251658240

251658240是字節(jié),換算后剛好240M。

如何確定正好的代碼緩存?

其實這個需要根據(jù)使用情況進行實際調整,通過ReservedCodeCacheSize可以指定大小。

但是代碼緩存的大小的設置要考慮到服務器實際內存的大小。如果我們將其分配過大,則這部分空間會被jvm預留出來,請確定你的服務器是否有足夠大的內存。

另一個方面,32位的jvm被允許使用的最大內存為4g,其中還包括堆內存,元空間,棧,以及本地方法等等,所以代碼緩存總是會被限制大小的。

在64位機器也不是越大越好,每個機器上的進程有自己的最大內存空間,超過它也是沒有效果的。

綜上所述,有些大型應用就需要我們對代碼緩存進行調優(yōu)。

如何監(jiān)控代碼緩存?

前面我們學習過jconsole的使用,如果你的服務允許開啟jmx服務的話,那么就可以進行監(jiān)控了,文章地址如下:java性能分析jconsole詳解

如下圖所示,就是監(jiān)控代碼緩存的動態(tài)圖標:

我們可以根據(jù)監(jiān)控的結果去調整自己服務的代碼緩存大小,我這個服務舉例默認的240M還有很大的差距,其實是不需要進行調優(yōu)的。

到此這篇關于java性能優(yōu)化之代碼緩存優(yōu)化的文章就介紹到這了,更多相關java 代碼緩存優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用@Value值注入及配置文件組件掃描

    使用@Value值注入及配置文件組件掃描

    這篇文章主要介紹了使用@Value值注入及配置文件組件掃描方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot如何訪問本地圖片

    SpringBoot如何訪問本地圖片

    這篇文章主要介紹了SpringBoot如何訪問本地圖片問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 分布式醫(yī)療掛號系統(tǒng)Nacos微服務Feign遠程調用數(shù)據(jù)字典

    分布式醫(yī)療掛號系統(tǒng)Nacos微服務Feign遠程調用數(shù)據(jù)字典

    這篇文章主要為大家介紹了分布式醫(yī)療掛號系統(tǒng)Nacos微服務Feign遠程調用數(shù)據(jù)字典,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-04-04
  • Java如何在PDF中添加ToolTip工具提示

    Java如何在PDF中添加ToolTip工具提示

    大家好,本篇文章主要講的是Java如何在PDF中添加ToolTip工具提示,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • SpringBoot使用PageHelper分頁詳解

    SpringBoot使用PageHelper分頁詳解

    這篇文章主要介紹了SpringBoot使用PageHelper分頁詳解,我們在任何的系統(tǒng)中,分頁功能是必不可少的,然而,對于這個功能如果有一種快速開發(fā)的實現(xiàn)方式,當然可以節(jié)省我們很多的時間了,接下來,我就給大家基于不同的環(huán)境來說說如何使用一個分頁插件,需要的朋友可以參考下
    2023-10-10
  • 簡單介紹Java編程中的線程池

    簡單介紹Java編程中的線程池

    這篇文章主要介紹了Java編程中的線程池,進程和線程的并發(fā)是Java編程中的重要環(huán)節(jié),需要的朋友可以參考下
    2015-09-09
  • Springboot整合spring-boot-starter-data-elasticsearch的過程

    Springboot整合spring-boot-starter-data-elasticsearch的過程

    本文詳細介紹了Springboot整合spring-boot-starter-data-elasticsearch的過程,包括版本要求、依賴添加、實體類添加、索引的名稱、分片、副本設置等,同時,還介紹了如何使用ElasticsearchRepository類進行增刪改查操作
    2024-10-10
  • 關于@Autowired注入依賴失敗的問題及解決

    關于@Autowired注入依賴失敗的問題及解決

    這篇文章主要介紹了關于@Autowired注入依賴失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 一文帶你玩轉Java異常處理

    一文帶你玩轉Java異常處理

    這篇文章主要為大家介紹一下Java中的異常處理機制,文中通過示例為大家進行了詳細的介紹,對我們學習有一定的幫助,感興趣的可以了解一下
    2022-08-08
  • spring boot 使用profile來分區(qū)配置的操作

    spring boot 使用profile來分區(qū)配置的操作

    這篇文章主要介紹了spring boot使用profile來分區(qū)配置的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

界首市| 南乐县| 襄汾县| 静乐县| 溧水县| 南京市| 文昌市| 上林县| 朔州市| 来宾市| 青田县| 金沙县| 崇明县| 友谊县| 普安县| 三亚市| 尼木县| 长治市| 师宗县| 阿拉善左旗| 太仓市| 兴仁县| 江门市| 体育| 荥阳市| 贞丰县| 白玉县| 平利县| 北票市| 铜陵市| 洛宁县| 鄄城县| 石柱| 阳高县| 富锦市| 平阳县| 芜湖县| 镇安县| 三门县| 黄平县| 朔州市|