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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jit编译_意外分配– JIT编译抖动

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jit编译_意外分配– JIT编译抖动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jit編譯

在研究ByteWatcher時 (請參閱我的上一篇 文章 ),我遇到了一些非常奇怪的事情。

這是實際的代碼段,用于找出特定線程上的分配量:

return (long) mBeanServer.invoke(name,GET_THREAD_ALLOCATED_BYTES,PARAMS,SIGNATURE );
  • 有關完整上下文,請參見此處 。

(ByteWatcher的工作方式是定期調用此方法以監視分配。)

需要注意的一個重要點,尤其是當想要為程序的分配提供準確的數字時,就是調用上面的代碼本身–導致分配。

必須從返回的數字中減去此調用引起的分配,以便我們隔離程序引起的分配,即, 調用meanBeanServer =程序線程分配+調用開銷

我注意到的是,此分配量通常為336個字節。 但是,當我在循環中調用此方法時,發現了一些有趣的東西。 每隔一段時間,它將分配不同的金額。

對于此測試:

@Testpublic void testQuietMeasuringThreadAllocatedBytes() {ByteWatcherSingleThread am = new ByteWatcherSingleThread();System.out.println("MeasuringCostInBytes = " + am.getMeasuringCostInBytes());long[] marks = new long[1_000_000];for (int i = 0; i < 1_000_000; i++) {marks[i] = am.threadAllocatedBytes();}long prevDiff = -1;for (int i = 1; i < 1_000_000; i++) {long diff = marks[i] - marks[i - 1];if (prevDiff != diff)System.out.println("Allocation changed at iteration " + i + "->" + diff);prevDiff = diff;}}

這是典型的結果:

MeasuringCostInBytes = 336 Allocation changed at iteration 1->336 Allocation changed at iteration 12->28184 Allocation changed at iteration 13->360 Allocation changed at iteration 14->336 Allocation changed at iteration 1686->600 Allocation changed at iteration 1687->336 Allocation changed at iteration 2765->672 Allocation changed at iteration 2766->336 Allocation changed at iteration 5458->496 Allocation changed at iteration 5459->336 Allocation changed at iteration 6213->656 Allocation changed at iteration 6214->336 Allocation changed at iteration 6535->432 Allocation changed at iteration 6536->336 Allocation changed at iteration 6557->8536 Allocation changed at iteration 6558->336 Allocation changed at iteration 7628->576 Allocation changed at iteration 7629->336 Allocation changed at iteration 8656->4432 Allocation changed at iteration 8657->336 Allocation changed at iteration 9698->968 Allocation changed at iteration 9699->336 Allocation changed at iteration 11881->1592 Allocation changed at iteration 11882->336 Allocation changed at iteration 12796->1552 Allocation changed at iteration 12797->336 Allocation changed at iteration 13382->456 Allocation changed at iteration 13383->336 Allocation changed at iteration 14844->608 Allocation changed at iteration 14845->336 Allocation changed at iteration 36685->304 Allocation changed at iteration 52522->336 Allocation changed at iteration 101440->400 Allocation changed at iteration 101441->336

鑒于程序中肯定沒有分配,所以為什么同一調用有時分配不同的金額對我來說是一個謎。

總之,超過1,000,000次運行,該程序分配了大約25次不同的數量。 值得注意的是,經過10萬次迭代后沒有峰值。

我與亨氏·卡布茲(Heinz Kabutz)和克里斯·紐蘭(Chris Newland)分享了這個問題。 Chris注意到分配是由JIT編譯抖動引起的。 通過使用標志-Xint重新運行測試可以很清楚地看出這一點(僅以解釋模式運行,即沒有JIT編譯)。 現在只有2個峰值。

MeasuringCostInBytes = 336 Allocation changed at iteration 1->336 Allocation changed at iteration 12->28184 Allocation changed at iteration 13->360 Allocation changed at iteration 14->336

同樣使用-Xcomp標志運行(僅編譯):

MeasuringCostInBytes = 336 Allocation changed at iteration 1->336 Allocation changed at iteration 12->29696 Allocation changed at iteration 13->360 Allocation changed at iteration 14->336

因此,現在我們可以完全確定是導致準入分配的JIT編譯抖動。

我不完全理解為什么會這樣,但是我想這是可以理解的。 為了彌補這一點,我在ByteWatcher的構造函數中引入了一個校準階段,Heinz進一步完善了該校準階段。

您可以在此處看到校準代碼,但是它包含兩個階段:

  • 調用該方法以計算線程在緊密循環中分配了多少(我們稱其為100,000次)–允許JIT適當地預熱代碼,以便將其全部編譯
  • 等待50毫秒–這使JVM有機會完成編譯抖動
  • 在構造函數中使用此代碼,即使沒有特殊標志運行也不會出現分配高峰。

    結論

    • JIT編譯抖動導致一些分配
    • 在沒有編譯抖動(即僅解釋或僅編譯)的情況下運行程序會大大減少該分配,但并不能完全消除該分配。
    • 在100k運行之后,分配停止,這表明需要100k運行才能停止抖動。 這很有趣,因為我們知道代碼應該在10k次迭代后進行編譯。

    翻譯自: https://www.javacodegeeks.com/2015/09/an-unexpected-allocation-jit-compilation-jitter.html

    jit編譯

    總結

    以上是生活随笔為你收集整理的jit编译_意外分配– JIT编译抖动的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: wwwwxxxxx日本| 亚洲精品字幕在线观看 | 黄色自拍网站 | 一本色道久久综合无码人妻 | 老熟妇毛茸茸 | 黄色片免费 | 精品人妻一区二区三区三区四区 | 在线观看黄色 | 致命魔术电影高清在线观看 | 欧美日韩日本国产 | 国产精品视频第一页 | 少妇综合 | 中文字幕乱码人妻无码久久95 | 你懂的在线免费观看 | 成人午夜免费毛片 | 91黄在线看| 青草国产视频 | 成人91视频 | 中文字幕一区二区人妻痴汉电车 | 国模在线| 免费不卡视频 | 97成人资源站| 中文字幕+乱码+中文 | 六月婷婷av| jizz91| 国产精品视频久久久久 | 亚洲专区在线视频 | 国产91欧美 | 国产精品一区视频 | 精品深夜av无码一区二区老年 | 成人av一区二区三区在线观看 | 成人午夜小视频 | 成人欧美一区二区三区黑人免费 | 亚洲欧美日韩国产 | 午夜精品久久 | 欧美日韩在线视频免费播放 | 亚洲av无码一区二区三区网址 | 在线日本视频 | 国产又大又硬又粗 | 日本不卡123 | 日本亚洲最大的色成网站www | 国内黄色一级片 | www.麻豆av | 香蕉一级视频 | 特级毛片爽www免费版 | 久久久精品视频在线观看 | 一区二区三区四区不卡 | 国产精品高清无码 | 精品无码m3u8在线观看 | www四虎精品视频免费网站 | 久草资源福利 | 日韩av在线观看免费 | 国产福利精品在线观看 | 亚洲国产精品午夜久久久 | www黄色网址 | 国产不卡视频在线观看 | 国产视频播放 | 宅宅少妇无码 | 亚洲熟妇丰满大屁股熟妇 | 国产麻豆剧传媒精品国产av | 国偷自产av一区二区三区麻豆 | 国产一级爱 | 日韩无码专区 | 九九热视频精品在线观看 | 午夜亚洲aⅴ无码高潮片苍井空 | 女人高潮娇喘声mp3 乱色视频 | 好吊色综合 | 欧美日韩综合一区二区 | 欧美精品乱人伦久久久久久 | 国产精彩视频一区二区 | 97天天操 | 电影《走路上学》免费 | 亚洲精品视频免费观看 | 久久久久久久精 | 欧美特黄视频 | 亚洲经典一区 | 美女脱光衣服让男人捅 | 久久无码高潮喷水 | 久久久欧洲| 日韩av在线免费看 | 少妇粉嫩小泬白浆流出 | 国产精品成人久久电影 | 一边摸一边抽搐一进一出视频 | 日韩色婷婷 | 欧美视频福利 | 美女视频久久 | 免费的一级黄色片 | 日韩电影在线观看中文字幕 | 夜夜春视频 | 日韩久久一级片 | 国产一区网 | 懂色av一区二区三区四区五区 | 国产精品日韩无码 | 污视频免费看 | 欧美第二页 | 亚洲综合一区在线观看 | 欧美一区二区三区影视 | 国产三级视频 | 欧美日韩中文字幕一区二区三区 |