老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

在使用log4j2打日志時,當發生大量異常時,造成大量線程block問題的問題。

成都創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、網站建設、克什克騰網絡推廣、微信平臺小程序開發、克什克騰網絡營銷、克什克騰企業策劃、克什克騰品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯公司為所有大學生創業者提供克什克騰建站搭建服務,24小時服務熱線:18982081108,官方網址:www.cdcxhl.com

大量線程block原因

發生異常,打印異常棧時,會調用org.apache.logging.log4j.core.impl.ThrowableProxy.toExtendedStackTrace方法。

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

ThrowableProxy.toExtendedStackTrace內部會進行loadClass操作。

并且可以看到ClassLoader的loadClass在加載類時

1)首先會持有鎖。2)調用findLoadedClass看下是否類已經被加載過了

3)如果類沒被加載過,根據雙親委派模型去加載類。

可以看到當某個類被加載過了,調用findLoadedClass會直接返回,鎖也會被很快釋放掉,無需經過雙親委派等后面的一系列步驟。

但是,在進行反射調用時,JVM會進行優化,會動態生成名為sun.reflect.GeneratedMethodAccessor的類,這個類無法通過ClassLoader.loadClass方法加載(為什么無法通過ClassLoader.loadClass加載?因為JVM內部自定義一個加載器DelegatingClassLoader來加載這個類,這導致應用類加載器 Launcher$AppClassLoader找不到它)。

導致每次解析異常棧進行類加載時,鎖占有的時間很長,最終導致阻塞。

關于JVM對反射調用的優化

Java中對反射的優化

使用反射調用某個類的方法,jvm內部有兩種方式

  1. JNI:使用native方法進行反射操作。

  2. pure-Java:生成bytecode進行反射操作,即生成類sun.reflect.GeneratedMethodAccessor,它是一個被反射調用方法的包裝類,代理不同的方法,類后綴序號會遞增。這種方式第一次調用速度較慢,較之第一種會慢3-4倍,但是多次調用后速度會提升20倍

對于使用JNI的方式,因為每次都要調用native方法再返回,速度會比較慢。所以,當一個方法被反射調用的次數超過一定次數(默認15次)時,JVM內部會進行優化,使用第2種方法,來加快運行速度。

JVM有兩個參數來控制這種優化

-Dsun.reflect.inflationThreshold=value默認為15,即反射調用某個方法15次后,會由JNI的方式變為pure-java的方式

-Dsun.reflect.noInflation=true

默認為false。當設置為true時,表示在第一次反射調用時,就轉為pure-java的方式

下面是一個驗證反射優化的樣例:

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

配置如下JVM參數,使得在第一次反射調用時,就轉為pure-java的方式

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

打斷點跟蹤:

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

可以看到GeneratedMethodAccessor1的classLoader為DelegatingClassLoader,其parent為AppClassLoader。

JVM反調調用優化,導致發生大量異常時log4j2線程阻塞

如何關閉JVM對反射調用的優化?

想關閉JVM對反射優化怎么辦?

JVM中只提供了兩個參數,因此,沒有辦法完全關閉反射優化。

一種能想到的接近于關閉反射優化的方法就是將inflationThreshold設為的一個特別大的數。

inflationThreshold是java中的int型值,可以考慮把其設置為Integer.MAX_VALUE ((2^31)-1)。

$ java-Dsun.reflect.inflationThreshold=2147483647MyApp



當前文章:JVM反調調用優化,導致發生大量異常時log4j2線程阻塞
當前路徑:http://www.xueling.net.cn/article/pooiei.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲国产精品无码久久久久久曰 | 高清免费a级在线观看国产 无遮挡边摸边吃奶边做视频免费 | 羞羞答答av成人免费看 | 中文字幕乱码久久午夜不卡 | 阿娇艳z门照片无码av4i | 日韩精品不卡一区二区 | 日韩性视频 | 亚洲爆乳成AV人在线视水卜 | 亚洲AV影院一区二区三区 | 免费国产a国产片高清不卡 欧美激欧美啪啪片 | 日韩中文字幕免费在线播放 | 欧美日韩一二三区 | 四虎海外影库www4hu | 免费看av大片 | 亚洲欧美国产另类 | 真人作爱视频免费 | 欧美国产精品va在线观看 | 亚洲男人的天堂在线播放 | 亚洲AV成人午夜福利在线观看 | 欧美人与动牲交精品 | 国产一区二区精品久 | 秀人顶级模特尤妮丝的最新视频 | JAPANESE国产高清在线观看播放 | 无码av免费一区二区三区 | 亚洲欧美成aⅴ人在线观看 这里只有精品在线 | 亚洲国产精品成人综合色 | 潮喷失禁大喷水aⅴ无码 | 国产三级网站在线观看 | 欧美成人精精品一区二区三区 | 日本少妇XXX做受 | 夜色资源站www国产在线观看 | 东北老妇爽的大叫天天看A片 | 日日爱99 | 亚洲国产黄色片 | 1204国产成人精品视频 | 欧美亚洲国产精品久久高清 | 一区二区视频网 | 国产精品国产 | 国产精品白丝喷浆 | 亚洲成人aaa | 懂色av中文一区二区在 |