java 反射真的慢嗎蔬蕊?

大家似乎有個(gè)默認(rèn)的常識(shí):java的反射性能不好僧叉,應(yīng)該使用asm奕枝、cglib之類的庫替代。

看java的反射實(shí)現(xiàn)會(huì)有兩種情況瓶堕,參考NativeMethodAccessorImpl

1.調(diào)用native方法隘道,涉及到方法查找,

2.生成字節(jié)碼,動(dòng)態(tài)加載類谭梗,使用MethodAccessorGenerator

就是說在調(diào)用次數(shù)超過閾值15之后忘晤,就會(huì)動(dòng)態(tài)生成類,來執(zhí)行反射方法默辨,本質(zhì)上和直接調(diào)用時(shí)一樣的德频。動(dòng)態(tài)生成類的模式和cglib也是一樣的苍息。

跑了幾個(gè)測(cè)試看看缩幸,計(jì)算的平均每次用時(shí),用的mac jdk8竞思,jvm參數(shù):-server -Xmx4g -Xms4g -Xmn512m? -Xss256k -verbose:gc (原來想貼一下代碼的表谊,簡書的“引用”實(shí)在太難用了)?

循環(huán)次數(shù) ? ?1000 ? ?10*1000 ? 100*1000 ? ? 1000*1000

cglib? ? ? 1392ns? ? 984ns? ? ? 228ns? ? ? ? ? ? ? 78ns

反射? ? ? ? 4753ns? 980ns? ? ? ? 163ns? ? ? ? ? ? ? 36ns


從測(cè)試結(jié)果看出來,次數(shù)越多盖喷,反射的性能越好爆办,這是為什么呢?和jit編譯有關(guān)课梳,使用-XX:+PrintCompilation可以看到距辆,循環(huán)次數(shù)到達(dá)1000*1000的時(shí)候,不僅編譯層數(shù)達(dá)到了4暮刃,而且發(fā)生了OSR編譯(棧上替換)跨算,運(yùn)行在OSR代碼中的次數(shù)越多,性能越好椭懊。

同樣的cglib的FastClass也會(huì)發(fā)生jit編譯诸蚕,也會(huì)使用OSR編譯,但是性能比不過反射氧猬,同時(shí)通過監(jiān)控內(nèi)存背犯,發(fā)現(xiàn)cglib使用的內(nèi)存也比較多,主要是動(dòng)態(tài)生成類的代碼不一樣盅抚。

cglib的FastClass是針對(duì)一個(gè)類動(dòng)態(tài)生成一個(gè)新的類漠魏;反射是針對(duì)每一個(gè)方法生成一個(gè)新的類,方法體比較小妄均,更適合jit做動(dòng)態(tài)編譯柱锹、內(nèi)聯(lián)。

加上-XX:+PrintInlining 參數(shù)丛晦,看內(nèi)聯(lián)的情況奕纫,反射的方法都經(jīng)過了內(nèi)聯(lián)優(yōu)化,而使用cglib生成的代碼無法內(nèi)聯(lián)烫沙,容易出現(xiàn)hot method too big的情況匹层。

查看cglib代碼可以通過System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"./");將動(dòng)態(tài)生成的代碼保存到文件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市升筏,隨后出現(xiàn)的幾起案子撑柔,更是在濱河造成了極大的恐慌,老刑警劉巖您访,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铅忿,死亡現(xiàn)場離奇詭異,居然都是意外死亡灵汪,警方通過查閱死者的電腦和手機(jī)檀训,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來享言,“玉大人峻凫,你說我怎么就攤上這事±缆叮” “怎么了荧琼?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長差牛。 經(jīng)常有香客問我命锄,道長,這世上最難降的妖魔是什么偏化? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任脐恩,我火速辦了婚禮,結(jié)果婚禮上夹孔,老公的妹妹穿的比我還像新娘被盈。我一直安慰自己,他們只是感情好搭伤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布只怎。 她就那樣靜靜地躺著,像睡著了一般怜俐。 火紅的嫁衣襯著肌膚如雪身堡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天拍鲤,我揣著相機(jī)與錄音贴谎,去河邊找鬼。 笑死季稳,一個(gè)胖子當(dāng)著我的面吹牛擅这,可吹牛的內(nèi)容都是我干的冒窍。 我是一名探鬼主播张吉,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼悯舟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溯香,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤鲫构,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玫坛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體结笨,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年湿镀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炕吸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肠骆,死狀恐怖算途,靈堂內(nèi)的尸體忽然破棺而出塞耕,到底是詐尸還是另有隱情蚀腿,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布扫外,位于F島的核電站莉钙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筛谚。R本人自食惡果不足惜磁玉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驾讲。 院中可真熱鬧蚊伞,春花似錦、人聲如沸吮铭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谓晌。三九已至掠拳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纸肉,已是汗流浹背溺欧。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柏肪,地道東北人姐刁。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像烦味,于是被迫代替她去往敵國和親聂使。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方岩遗,同時(shí)不同JDK版本的...
    高廣超閱讀 15,545評(píng)論 3 83
  • 從三月份找實(shí)習(xí)到現(xiàn)在扇商,面了一些公司,掛了不少宿礁,但最終還是拿到小米案铺、百度、阿里梆靖、京東控汉、新浪、CVTE返吻、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,192評(píng)論 11 349
  • java編譯器姑子,java解釋器 1.java程序是一種可跨平臺(tái)執(zhí)行的語言,之所以可以跨平臺(tái)测僵,是因?yàn)閖vm的存在街佑,J...
    rabbit_coding閱讀 6,988評(píng)論 2 18
  • Ivy艾薇老師,中文名歐亞思捍靠,89年的年輕寶媽一枚沐旨,寶貝4歲啦…… 來杭州兩年半,定居三墩金地板塊榨婆,是一枚嶄新而又...
    做自己Ivy閱讀 936評(píng)論 0 1
  • I need you磁携。
    蓬蓬蓬的毛毛熊閱讀 132評(píng)論 0 0