国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java jvm中Code Cache案例詳解

Java jvm中Code Cache案例詳解

2021-11-25 14:16go4it Java教程

這篇文章主要介紹了Java jvm中Code Cache案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

Code Cache

JVM生成的native code存放的內(nèi)存空間稱之為Code Cache;JIT編譯、JNI等都會(huì)編譯代碼到native code,其中JIT生成的native code占用了Code Cache的絕大部分空間

相關(guān)參數(shù)

Codecache Size Options

  • -XX:InitialCodeCacheSize

用于設(shè)置初始CodeCache大小

  • -XX:ReservedCodeCacheSize

用于設(shè)置Reserved code cache的最大大小,通常默認(rèn)是240M

  • -XX:CodeCacheExpansionSize

用于設(shè)置code cache的expansion size,通常默認(rèn)是64K

Codecache Flush Options

  • -XX:+UseCodeCacheFlushing

是否在code cache滿的時(shí)候先嘗試清理一下,如果還是不夠用再關(guān)閉編譯,默認(rèn)開啟

Compilation Policy Options

  • -XX:CompileThreshold

方法觸發(fā)編譯時(shí)的調(diào)用次數(shù),默認(rèn)是10000

  • -XX:OnStackReplacePercentage

方法中循環(huán)執(zhí)行部分代碼的執(zhí)行次數(shù)觸發(fā)OSR編譯時(shí)的閾值,默認(rèn)是140

Compilation Limit Options

  • -XX:MaxInlineLevel

針對(duì)嵌套調(diào)用的最大內(nèi)聯(lián)深度,默認(rèn)為9

  • -XX:MaxInlineSize

方法可以被內(nèi)聯(lián)的最大bytecode大小,默認(rèn)為35

  • -XX:MinInliningThreshold

方法可以被內(nèi)聯(lián)的最小調(diào)用次數(shù),默認(rèn)為250

  • -XX:+InlineSynchronizedMethods

是否允許內(nèi)聯(lián)synchronized methods,默認(rèn)為true

Diagnostic Options

  • -XX:+PrintFlagsFinal(默認(rèn)沒(méi)有啟用)

用于查看所有可設(shè)置的參數(shù)及最終值(JDK 6 update 21開始才可以用),默認(rèn)是不包括diagnostic或experimental系的。如果要在-XX:+PrintFlagsFinal的輸出里看到這兩種參數(shù)的信息,分別需要顯式指定-XX:+UnlockDiagnosticVMOptions / -XX:+UnlockExperimentalVMOptions(-XX:+PrintCommandLineFlags 這個(gè)參數(shù)的作用是顯示出VM初始化完畢后所有跟最初的默認(rèn)值不同的參數(shù)及它們的值)

  • -XX:+PrintCodeCache(默認(rèn)沒(méi)有啟用)

-XX:+PrintCodeCache用于jvm關(guān)閉時(shí)輸出code cache的使用情況

  • -XX:+PrintCodeCacheOnCompilation(默認(rèn)沒(méi)有啟用)

用于在方法每次被編譯時(shí)輸出code cache的使用情況

查看Code Cache的使用情況

-XX:+PrintCodeCache

?
1
2
3
4
5
6
7
8
9
10
CodeHeap 'non-profiled nmethods': size=120032Kb used=2154Kb max_used=2160Kb free=117877Kb
 bounds [0x00000001178ea000, 0x0000000117b5a000, 0x000000011ee22000]
CodeHeap 'profiled nmethods': size=120028Kb used=10849Kb max_used=11005Kb free=109178Kb
 bounds [0x00000001103b3000, 0x0000000110e73000, 0x00000001178ea000]
CodeHeap 'non-nmethods': size=5700Kb used=1177Kb max_used=1239Kb free=4522Kb
 bounds [0x000000010fe22000, 0x0000000110092000, 0x00000001103b3000]
 total_blobs=5638 nmethods=4183 adapters=435
 compilation: enabled
              stopped_count=0, restarted_count=0
 full_count=0
  • jvm啟動(dòng)參數(shù)加上-XX:+PrintCodeCache,可以在jvm關(guān)閉時(shí)輸出code cache的使用情況
  • 這里分了non-profiled nmethods、profiled nmethods、non-nmethods三部分來(lái)展示
  • 其中size就是限制的最大大小,used表示實(shí)際使用量,max_used就是使用大小的high water mark,free由size-used得來(lái)

jcmd pid Compiler.codecache

?
1
2
3
4
5
6
7
8
9
10
11
12
/ # jcmd 1 Compiler.codecache
1:
CodeHeap 'non-profiled nmethods': size=120036Kb used=1582Kb max_used=1582Kb free=118453Kb
 bounds [0x00007f1e42226000, 0x00007f1e42496000, 0x00007f1e4975f000]
CodeHeap 'profiled nmethods': size=120032Kb used=9621Kb max_used=9621Kb free=110410Kb
 bounds [0x00007f1e3acee000, 0x00007f1e3b65e000, 0x00007f1e42226000]
CodeHeap 'non-nmethods': size=5692Kb used=1150Kb max_used=1198Kb free=4541Kb
 bounds [0x00007f1e3a75f000, 0x00007f1e3a9cf000, 0x00007f1e3acee000]
 total_blobs=5610 nmethods=4369 adapters=412
 compilation: enabled
              stopped_count=0, restarted_count=0
 full_count=0

使用jcmd的Compiler.codecache也可以查看code cache的使用情況,輸出跟-XX:+PrintCodeCache相同

jcmd pid VM.native_memory

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/ # jcmd 1 VM.native_memory
1:
 
Native Memory Tracking:
 
Total: reserved=1928023KB, committed=231182KB
-                 Java Heap (reserved=511488KB, committed=140288KB)
                            (mmap: reserved=511488KB, committed=140288KB)
 
-                     Class (reserved=1090832KB, committed=46608KB)
                            (classes #8218)
                            (  instance classes #7678, array classes #540)
                            (malloc=1296KB #19778)
                            (mmap: reserved=1089536KB, committed=45312KB)
                            (  Metadata:   )
                            (    reserved=40960KB, committed=39680KB)
                            (    used=38821KB)
                            (    free=859KB)
                            (    waste=0KB =0.00%)
                            (  Class space:)
                            (    reserved=1048576KB, committed=5632KB)
                            (    used=5190KB)
                            (    free=442KB)
                            (    waste=0KB =0.00%)
 
-                    Thread (reserved=37130KB, committed=2806KB)
                            (thread #36)
                            (stack: reserved=36961KB, committed=2636KB)
                            (malloc=127KB #189)
                            (arena=42KB #70)
 
-                      Code (reserved=248651KB, committed=15351KB)
                            (malloc=963KB #4600)
                            (mmap: reserved=247688KB, committed=14388KB)
 
-                        GC (reserved=21403KB, committed=7611KB)
                            (malloc=5419KB #9458)
                            (mmap: reserved=15984KB, committed=2192KB)
 
-                  Compiler (reserved=150KB, committed=150KB)
                            (malloc=20KB #447)
                            (arena=131KB #5)
 
-                  Internal (reserved=3744KB, committed=3744KB)
                            (malloc=1696KB #6416)
                            (mmap: reserved=2048KB, committed=2048KB)
 
-                     Other (reserved=24KB, committed=24KB)
                            (malloc=24KB #2)
 
-                    Symbol (reserved=10094KB, committed=10094KB)
                            (malloc=7305KB #219914)
                            (arena=2789KB #1)
 
-    Native Memory Tracking (reserved=4130KB, committed=4130KB)
                            (malloc=12KB #158)
                            (tracking overhead=4119KB)
 
-               Arena Chunk (reserved=177KB, committed=177KB)
                            (malloc=177KB)
 
-                   Logging (reserved=7KB, committed=7KB)
                            (malloc=7KB #264)
 
-                 Arguments (reserved=18KB, committed=18KB)
                            (malloc=18KB #500)
 
-                    Module (reserved=165KB, committed=165KB)
                            (malloc=165KB #1699)
 
-                 Safepoint (reserved=4KB, committed=4KB)
                            (mmap: reserved=4KB, committed=4KB)
 
-                   Unknown (reserved=4KB, committed=4KB)
                            (mmap: reserved=4KB, committed=4KB)

使用jcmd的VM.native_memory也可以查看code cache的使用情況(Code部分),Compiler部分為Memory tracking used by the compiler when generating code

使用MemoryPoolMXBean查看

?
1
2
3
4
5
6
7
8
9
10
@Test
public void testGetCodeCacheUsage(){
    ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class)
            .stream()
            .filter(e -> MemoryType.NON_HEAP == e.getType())
            .filter(e -> e.getName().startsWith("CodeHeap"))
            .forEach(e -> {
                LOGGER.info("name:{},info:{}",e.getName(),e.getUsage());
            });
}

MemoryPoolMXBean包含了HEAP及NON_HEAP,其中code cache屬于NON_HEAP,其輸出如下:

12:21:10.728 [main] INFO com.example.CodeCacheTest - name:CodeHeap 'non-nmethods',info:init = 2555904(2496K) used = 1117696(1091K) committed = 2555904(2496K) max = 5836800(5700K)
12:21:10.743 [main] INFO com.example.CodeCacheTest - name:CodeHeap 'profiled nmethods',info:init = 2555904(2496K) used = 1543808(1507K) committed = 2555904(2496K) max = 122908672(120028K)
12:21:10.743 [main] INFO com.example.CodeCacheTest - name:CodeHeap 'non-profiled nmethods',info:init = 2555904(2496K) used = 319616(312K) committed = 2555904(2496K) max = 122912768(120032K)

spring boot應(yīng)用查看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ # curl -i "http://localhost:8080/actuator/metrics/jvm.memory.used?tag=area:nonheap"
HTTP/1.1 200
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 30 Mar 2019 04:26:39 GMT
 
{"name":"jvm.memory.used","description":"The amount of used memory","baseUnit":"bytes","measurements":[{"statistic":"VALUE","value":6.5295408E7}],"availableTags":[{"tag":"id","values":["CodeHeap 'non-profiled nmethods'","CodeHeap 'profiled nmethods'","Compressed Class Space","Metaspace","CodeHeap 'non-nmethods'"]}]}
 
/ # curl -i "http://localhost:8080/actuator/metrics/jvm.memory.used?tag=area:nonheap&tag=id:CodeHeap%20%27non-profiled
%20nmethods%27"
HTTP/1.1 200
Content-Disposition: inline;filename=f.txt
Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 30 Mar 2019 04:24:58 GMT
 
{"name":"jvm.memory.used","description":"The amount of used memory","baseUnit":"bytes","measurements":[{"statistic":"VALUE","value":1592448.0}],"availableTags":[]}

springboot使用micrometer,通過(guò)/actuator/metrics接口提供相關(guān)指標(biāo)查詢功能,其中code cache在jvm.memory.used這個(gè)metric中
它是基于MemoryPoolMXBean來(lái)實(shí)現(xiàn)的,具體詳見micrometer-core-1.1.3-sources.jar!/io/micrometer/core/instrument/binder/jvm/JvmMemoryMetrics.java

小結(jié)

  • JVM生成的native code存放的內(nèi)存空間稱之為Code Cache;JIT編譯、JNI等都會(huì)編譯代碼到native code,其中JIT生成的native code占用了Code Cache的絕大部分空間
  • -XX:ReservedCodeCacheSize用于設(shè)置Reserved code cache的最大大小,通常默認(rèn)是240M;對(duì)于有些應(yīng)用來(lái)說(shuō)240M可能太大,code cache可能都填不滿,相當(dāng)于unconstrained,此時(shí)JIT就會(huì)繼續(xù)編譯任何它認(rèn)為可以編譯的code
  • 查看Code Cache的內(nèi)存使用情況有好幾種方法:
    • jvm啟動(dòng)參數(shù)加上-XX:+PrintCodeCache,可以在jvm關(guān)閉時(shí)輸出code cache的使用情況
    • 使用jcmd的Compiler.codecache,其輸出跟-XX:+PrintCodeCache相同;
    • 使用jcmd的VM.native_memory也可以查看code cache的使用情況(Code部分)
    • 使用JMX來(lái)獲取NON_HEAP類型中的name為CodeHeap開頭的MemoryPoolMXBean可以得到code cache的使用情況
    • 如果是springboot應(yīng)用,它使用micrometer,通過(guò)/actuator/metrics接口提供相關(guān)指標(biāo)查詢功能,其中code cache在jvm.memory.used這個(gè)metric中

doc

15 Codecache Tuning

JVM的編譯策略

What are ReservedCodeCacheSize and InitialCodeCacheSize?

Why does the JVM have a maximum inline depth?

Code Cache滿導(dǎo)致應(yīng)用性能降低

到此這篇關(guān)于Java jvm中Code Cache案例詳解的文章就介紹到這了,更多相關(guān)Java jvm中Code Cache內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.jianshu.com/p/b064274536ed

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲欧美日韩另类一区二区 | 日本精品在线播放 | 午夜看片网站 | 日韩国产一区 | 久久9999 | 日韩亚洲一区二区 | 99精品一区二区 | 国产真实精品久久二三区 | 国产麻豆一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 国产精品久久久久久亚洲调教 | 99免费在线播放99久久免费 | 后人极品翘臀美女在线播放 | 91av免费 | 免费观看在线毛片 | 日韩精品一区二区三区在线播放 | 亚洲一区二区三区高清 | 大片免费播放在线观看视频 | 国产成人黄色 | 免费国产一区 | 日本一区二区不卡在线观看 | 精品久久亚洲 | 精品国产99| 欧美另类视频在线 | 无码一区二区三区视频 | 99草在线视频 | 国产色秀视频在线观看 | 在线观看一区二区三区视频 | 日本天天操 | 日韩高清中文字幕 | 亚洲精品欧洲精品 | 国产一区| 日本高清中文字幕 | 久久视频在线 | 亚洲日本欧美日韩高观看 | 日韩在线观看 | 三级视频在线观看 | 国产一区中文字幕 | 国产在线精品视频 | 精品一区欧美 | 久久免费精品国产 |