欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringAOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?-創(chuàng)新互聯(lián)

一、背景

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),邵原企業(yè)網(wǎng)站建設(shè),邵原品牌網(wǎng)站建設(shè),網(wǎng)站定制,邵原網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,邵原網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

昨天一位小伙伴面試的時(shí)候被問到:Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)效率更高?在知識(shí)星球整理了一下,今天特分享出來,供大家參考!

二、基本概念

首先,我們知道Spring AOP的底層實(shí)現(xiàn)有兩種方式:一種是JDK動(dòng)態(tài)代理,另一種是CGLib的方式。

自Java 1.3以后,Java提供了動(dòng)態(tài)代理技術(shù),允許開發(fā)者在運(yùn)行期創(chuàng)建接口的代理實(shí)例,后來這項(xiàng)技術(shù)被用到了Spring的很多地方。

JDK動(dòng)態(tài)代理主要涉及java.lang.reflect包下邊的兩個(gè)類:Proxy和InvocationHandler。其中,InvocationHandler是一個(gè)接口,可以通過實(shí)現(xiàn)該接口定義橫切邏輯,并通過反射機(jī)制調(diào)用目標(biāo)類的代碼,動(dòng)態(tài)地將橫切邏輯和業(yè)務(wù)邏輯編織在一起。

JDK動(dòng)態(tài)代理的話,他有一個(gè)限制,就是它只能為接口創(chuàng)建代理實(shí)例,而對(duì)于沒有通過接口定義業(yè)務(wù)方法的類,如何創(chuàng)建動(dòng)態(tài)代理實(shí)例哪?答案就是CGLib。

CGLib采用底層的字節(jié)碼技術(shù),全稱是:Code Generation Library,CGLib可以為一個(gè)類創(chuàng)建一個(gè)子類,在子類中采用方法攔截的技術(shù)攔截所有父類方法的調(diào)用并順勢織入橫切邏輯。

三、JDK 和 CGLib動(dòng)態(tài)代理區(qū)別

1、JDK動(dòng)態(tài)代理具體實(shí)現(xiàn)原理:

  • 通過實(shí)現(xiàn)InvocationHandler接口創(chuàng)建自己的調(diào)用處理器;

  • 通過為Proxy類指定ClassLoader對(duì)象和一組interface來創(chuàng)建動(dòng)態(tài)代理;

  • 通過反射機(jī)制獲取動(dòng)態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型就是調(diào)用處理器接口類型;

  • 通過構(gòu)造函數(shù)創(chuàng)建動(dòng)態(tài)代理類實(shí)例,構(gòu)造時(shí)調(diào)用處理器對(duì)象作為參數(shù)參入;

JDK動(dòng)態(tài)代理是面向接口的代理模式,如果被代理目標(biāo)沒有接口那么Spring也無能為力,Spring通過Java的反射機(jī)制生產(chǎn)被代理接口的新的匿名實(shí)現(xiàn)類,重寫了其中AOP的增強(qiáng)方法。

2、CGLib動(dòng)態(tài)代理:

CGLib是一個(gè)強(qiáng)大、高性能的Code生產(chǎn)類庫,可以實(shí)現(xiàn)運(yùn)行期動(dòng)態(tài)擴(kuò)展java類,Spring在運(yùn)行期間通過 CGlib繼承要被動(dòng)態(tài)代理的類,重寫父類的方法,實(shí)現(xiàn)AOP面向切面編程呢。

3、兩者對(duì)比:

  • JDK動(dòng)態(tài)代理是面向接口的。

  • CGLib動(dòng)態(tài)代理是通過字節(jié)碼底層繼承要代理類來實(shí)現(xiàn)(如果被代理類被final關(guān)鍵字所修飾,那么抱歉會(huì)失?。?/p>

4、使用注意:

  • 如果要被代理的對(duì)象是個(gè)實(shí)現(xiàn)類,那么Spring會(huì)使用JDK動(dòng)態(tài)代理來完成操作(Spirng默認(rèn)采用JDK動(dòng)態(tài)代理實(shí)現(xiàn)機(jī)制);

  • 如果要被代理的對(duì)象不是個(gè)實(shí)現(xiàn)類那么,Spring會(huì)強(qiáng)制使用CGLib來實(shí)現(xiàn)動(dòng)態(tài)代理。

四、JDK 和 CGLib動(dòng)態(tài)代理性能對(duì)比-教科書上的描述

我們不管是看書還是看文章亦或是我那個(gè)上搜索參考答案,可能很多時(shí)候,都可以找到如下的回答:

關(guān)于兩者之間的性能的話,JDK動(dòng)態(tài)代理所創(chuàng)建的代理對(duì)象,在以前的JDK版本中,性能并不是很高,雖然在高版本中JDK動(dòng)態(tài)代理對(duì)象的性能得到了很大的提升,但是他也并不是適用于所有的場景。主要體現(xiàn)在如下的兩個(gè)指標(biāo)中:

1、CGLib所創(chuàng)建的動(dòng)態(tài)代理對(duì)象在實(shí)際運(yùn)行時(shí)候的性能要比JDK動(dòng)態(tài)代理高不少,有研究表明,大概要高10倍;

2、但是CGLib在創(chuàng)建對(duì)象的時(shí)候所花費(fèi)的時(shí)間卻比JDK動(dòng)態(tài)代理要多很多,有研究表明,大概有8倍的差距;

3、因此,對(duì)于singleton的代理對(duì)象或者具有實(shí)例池的代理,因?yàn)闊o需頻繁的創(chuàng)建代理對(duì)象,所以比較適合采用CGLib動(dòng)態(tài)代理,反正,則比較適用JDK動(dòng)態(tài)代理。

結(jié)果是不是如上邊1、2、3條描述的那樣哪?下邊我們做一些小實(shí)驗(yàn)分析一下!

五、性能測試

1、首先有幾個(gè)Java類

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

2、Target.java

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

3、TargetImpl.java

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

4、JdkDynamicProxyTest.java

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

5、CglibProxyTest.java

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

6、ProxyPerformanceTest.java

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

7、測試結(jié)果

(1)JDK 1.6

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

(2)JDK 1.7

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

(3)JDK 1.8

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

經(jīng)過多次試驗(yàn),可以看出平均情況下的話,JDK動(dòng)態(tài)代理的運(yùn)行速度已經(jīng)逐漸提高了,在低版本的時(shí)候,運(yùn)行的性能可能不如CGLib,但是在1.8版本中運(yùn)行多次,基本都可以得到一致的測試結(jié)果,那就是JDK動(dòng)態(tài)代理已經(jīng)比CGLib動(dòng)態(tài)代理快了!

但是JDK動(dòng)態(tài)代理和CGLib動(dòng)態(tài)代理的適用場景還是不一樣的哈!

六、總結(jié)

最終的測試結(jié)果大致是這樣的,在1.6和1.7的時(shí)候,JDK動(dòng)態(tài)代理的速度要比CGLib動(dòng)態(tài)代理的速度要慢,但是并沒有教科書上的10倍差距,在JDK1.8的時(shí)候,JDK動(dòng)態(tài)代理的速度已經(jīng)比CGLib動(dòng)態(tài)代理的速度快很多了,希望小伙伴在遇到這個(gè)問題的時(shí)候能夠有的放矢!

Spring AOP中的JDK和CGLib動(dòng)態(tài)代理關(guān)于這個(gè)知識(shí)點(diǎn)很重要,關(guān)于兩者之間性能的對(duì)比經(jīng)過測試實(shí)驗(yàn)已經(jīng)有了一個(gè)初步的結(jié)果,以后再有人問你Spring AOP,不要簡單的說JDK動(dòng)態(tài)代理和CGLib這兩個(gè)了,是時(shí)候的可以拋出來對(duì)兩者之間區(qū)別的理解,是有加分的哦!

點(diǎn)擊獲取?附送學(xué)習(xí)進(jìn)階架構(gòu)資料、PDF書籍文檔、面試資料

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

Spring AOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

名稱欄目:SpringAOP中JDK和CGLib動(dòng)態(tài)代理哪個(gè)更快?-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://chinadenli.net/article20/cejsjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、企業(yè)網(wǎng)站制作品牌網(wǎng)站制作、網(wǎng)站排名、網(wǎng)站建設(shè)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
91精品国产综合久久不卡| 99少妇偷拍视频在线| 亚洲欧美日本国产不卡| 好吊日在线视频免费观看| 成人国产激情福利久久| 日韩欧美黄色一级视频| 色婷婷久久五月中文字幕| 欧洲日本亚洲一区二区| 亚洲综合香蕉在线视频| 东京干男人都知道的天堂| 国产视频在线一区二区| 亚洲最大福利在线观看| 国产成人亚洲综合色就色| 日本人妻免费一区二区三区| 国产精品成人免费精品自在线观看| 欧美日韩一区二区综合| 好吊日在线视频免费观看| 国产精品色热综合在线| 欧美日韩亚洲国产综合网| 粉嫩国产美女国产av| 青青操日老女人的穴穴| 中国美女草逼一级黄片视频| 日韩免费成人福利在线| 欧美国产日产在线观看| 又色又爽又无遮挡的视频 | 成人精品亚洲欧美日韩| 大尺度剧情国产在线视频| 精品少妇人妻av一区二区蜜桃 | 情一色一区二区三区四| 色婷婷亚洲精品综合网| 免费在线成人激情视频| 国产三级不卡在线观看视频| 精品欧美在线观看国产| 亚洲熟女国产熟女二区三区| 粉嫩国产一区二区三区在线| 国产一区二区三区四区中文| 日本午夜免费福利视频| 五月婷婷综合缴情六月| 人妻中文一区二区三区| 九九热精彩视频在线免费| 日韩蜜桃一区二区三区|