欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-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ù)公司
欧美大胆美女a级视频| 亚洲天堂精品一区二区| 国产午夜精品亚洲精品国产| 少妇人妻一级片一区二区三区| 久久国产精品熟女一区二区三区| 国产又大又硬又粗又湿| 欧美日韩国产午夜福利| 成人精品网一区二区三区| 国产白丝粉嫩av在线免费观看| 国产午夜福利在线观看精品| 好骚国产99在线中文| 国内精品一区二区欧美| 人妻久久一区二区三区精品99| 91亚洲人人在字幕国产| 国产精品久久三级精品| 麻豆印象传媒在线观看| 国产黑人一区二区三区| 好吊日在线视频免费观看| 中文字幕乱子论一区二区三区| 国产二级一级内射视频播放| 日本免费一本一二区三区| 日韩欧美国产高清在线| 国产又粗又长又大的视频| 亚洲专区中文字幕视频| 欧美三级不卡在线观线看| 日本人妻免费一区二区三区| 又黄又硬又爽又色的视频| 少妇熟女亚洲色图av天堂| 亚洲国产av一二三区| 欧美日韩国产的另类视频| 字幕日本欧美一区二区| 91欧美亚洲精品在线观看| 日韩夫妻午夜性生活视频| 99久久无色码中文字幕免费| 日韩精品中文字幕亚洲| 久久精视频免费视频观看| 免费观看潮喷到高潮大叫| 激情五月天深爱丁香婷婷| 欧美有码黄片免费在线视频| 加勒比系列一区二区在线观看| 日韩精品成区中文字幕|