日韩性视频-久久久蜜桃-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编译抖动的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: youjizz麻豆 | 中文字幕一区二区三区四区欧美 | 久久精品一二三区 | 欧美成人福利 | 91视频免费在线 | 理论片高清免费理伦片 | 成人在线免费视频播放 | 国产欧美一区二区精品久久久 | 成人婷婷 | 国产老妇伦国产熟女老妇视频 | 亚洲第一页色 | 五月综合激情日本mⅴ | 不卡一区二区在线观看 | ass极品国模人体欣赏 | 欧美日韩亚洲激情 | 成人av番号网| 亚洲蜜桃精久久久久久久久久久久 | 调教驯服丰满美艳麻麻在线视频 | 国产免费又黄又爽又色毛 | 激情网五月 | 五十路六十路七十路熟婆 | 九色免费视频 | 青娱乐久久 | 免费的理伦片在线播放 | 尤物视频网站在线观看 | 国产一级黄 | 国产夫妻性生活视频 | 五月网婷婷 | 97超碰人人在线 | 国产高清片 | 精品视频 | 日本一区二区免费看 | 91久久爱 | 黄色片欧美 | 亚洲av无码一区二区三区性色 | 亚洲中文字幕一区在线 | 国产精品久久影院 | 久久观看最新视频 | 中文在线一区 | 久久伊人中文字幕 | 国产夫妻在线观看 | 2021天天操| 日本jizz在线观看 | 91精品在线免费观看 | 国产在线视频99 | 亚洲h片 | 日本青青草视频 | 日本精品一区二区视频 | 欧美日韩国产不卡 | 中文字幕有码无码人妻av蜜桃 | 男ji大巴进入女人视频 | 中文字幕精品一区二区精品 | 国产精品久久久久久久久久小说 | 亚洲www啪成人一区二区麻豆 | 欧美日韩国产一区二区在线观看 | 日韩av网址大全 | 日色视频 | 91成人在线免费 | 色爽av| 天天操精品 | 男女爽爽 | 自拍一区在线 | 久久免费观看视频 | 九九综合视频 | 一区视频在线免费观看 | 免费观看h片 | 亚洲精品水蜜桃 | 男人天堂欧美 | 成人免费播放 | 天天干天天操天天干 | 免费极品av一视觉盛宴 | 依人久久 | 久久国产精品久久久久久 | 久久久久久久久久久久久久久久久久久 | 天天做天天爱天天做 | 长篇乱肉合集乱500小说日本 | 国产精品国产三级国产aⅴ原创 | 精品在线视频免费 | 人人爽久久涩噜噜噜网站 | 毛片在线免费 | 欧美日本韩国一区二区三区 | 午夜写真片福利电影网 | 丰满人妻一区二区三区免费视频 | 午夜时刻免费入口 | 在线免费观看福利 | 免费观看视频一区二区 | 亚洲国产成人一区二区精品区 | 亚洲天堂一级 | 人人爽人人爽人人爽人人爽 | 久久久亚洲精品无码 | 正在播放一区二区 | 黄瓜视频在线免费观看 | 岛国片在线免费观看 | 男女互插视频 | 亚洲黄色影院 | 国产欧美综合一区 | 欧美三级又粗又硬 | 国产精品一级 | 日韩有码第一页 |