在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java反射和new效率對(duì)比,差距有多大?

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 2022-12-22 14:50 ? 次閱讀

  • 一. 基礎(chǔ)概念
  • 二. new 對(duì)象和反射創(chuàng)建對(duì)象的效率對(duì)比
  • 三. 反射和new 的使用場(chǎng)景
cfc70a16-81b9-11ed-8abf-dac502259ad0.png

一. 基礎(chǔ)概念

Java中,一般我們創(chuàng)建一個(gè)對(duì)象可能會(huì)選擇new一下個(gè)實(shí)例。但是隨著我們技術(shù)的不斷提升,我們也學(xué)習(xí)到了,可以通過(guò)反射技術(shù)實(shí)現(xiàn)對(duì)象的創(chuàng)建。

可是,你有沒(méi)有想一下,什么時(shí)候我們改用new創(chuàng)建對(duì)象,什么時(shí)候我們改用反射創(chuàng)建對(duì)象呢?

兩者創(chuàng)建對(duì)象的效率又是如何呢?

//new方式創(chuàng)建對(duì)象
ReflectDemoreflectDemo=newReflectDemo();
//反射創(chuàng)建對(duì)象反射創(chuàng)建對(duì)象的三種方式
(1)ClassreflectDemoClass=ReflectDemo.class;
(2)ClassaClass=Class.forName("com.whale.springtransaction.transactiondemo.reflectdemo.ReflectDemo");
(3)ClassaClass=reflectDemoClass.getClass();

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二. new 對(duì)象和反射創(chuàng)建對(duì)象的效率對(duì)比

//測(cè)試代碼如下
publicclassReflectDemo{
publicstaticvoidmain(String[]args)throwsIllegalAccessException,InstantiationException{
proxyObject();
newObject();
}

//new創(chuàng)建對(duì)象
//5
publicstaticvoidnewObject(){
longstartTime=System.currentTimeMillis();
inti;
for(i=0;i100000000;i++){
ReflectDemoreflectDemo=newReflectDemo();
}
if(i==100000000){
longendTime=System.currentTimeMillis();
System.out.println("new耗時(shí)為:"+(endTime-startTime));
}
}

//反射創(chuàng)建對(duì)象
//30
publicstaticvoidproxyObject()throwsIllegalAccessException,InstantiationException{
longstartTime=System.currentTimeMillis();
ClassreflectDemoClass=ReflectDemo.class;
inti;
for(i=0;i100000000;i++){
ReflectDemoreflectDemo=reflectDemoClass.newInstance();
}
if(i==100000000){
longendTime=System.currentTimeMillis();
System.out.println("反射耗時(shí)為:"+(endTime-startTime));
}
}
}
cfd737d8-81b9-11ed-8abf-dac502259ad0.png

最終我們發(fā)現(xiàn),new 100000000 個(gè)對(duì)象和反射創(chuàng)建 100000000 個(gè)對(duì)象,效率相差了很多倍。

所以下面我們來(lái)探討一下為什么這么大差別?

首先第一點(diǎn),一般我們的Java代碼是需要編譯后在虛擬機(jī)里面運(yùn)行的。

我們一般都是通過(guò)一個(gè)前端編輯器,比如javac,把java文件轉(zhuǎn)為class文件。

接下來(lái),程序運(yùn)行期間,可能會(huì)通過(guò)一個(gè)JIT,即時(shí)編譯器將字節(jié)碼文件轉(zhuǎn)換為計(jì)算機(jī)認(rèn)識(shí)的機(jī)器碼文件。

另外一種可能是通過(guò)一個(gè)AOT編譯器,直接把java文件編譯為本地機(jī)器碼文件。其中JIT在程序運(yùn)行期會(huì)對(duì)程序進(jìn)行優(yōu)化,但是反射是通過(guò)動(dòng)態(tài)解析的方式,因此可能無(wú)法執(zhí)行某些java虛擬機(jī)的優(yōu)化。

總結(jié)起來(lái)有下面幾個(gè)原因:

Method#invoke 方法會(huì)對(duì)參數(shù)做封裝和解封操作

  • 需要檢查方法可見(jiàn)
  • 需要校驗(yàn)參數(shù)
  • 反射方法難以內(nèi)聯(lián)
  • JIT 無(wú)法優(yōu)化

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三. 反射和new 的使用場(chǎng)景

反射的部分使用場(chǎng)景

  1. Spring通過(guò)反射來(lái)幫我們實(shí)例化對(duì)象,并放入到Ioc容器中
  2. 使用JDBC鏈接數(shù)據(jù)庫(kù)時(shí)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)Class.forName()
  3. 逆向代碼 例如反編譯
  4. 利用反射,在泛型為int的arryaList集合中存放一個(gè)String類型的對(duì)象

new 對(duì)象和反射的區(qū)別

  1. new的對(duì)象無(wú)法訪問(wèn)其中的私有屬性,反射出來(lái)的可以通過(guò)設(shè)置setAccessible()方法來(lái)省略訪問(wèn)權(quán)限符。
  2. new必須要知道類名,而反射創(chuàng)建對(duì)象不需要知道類型也可以創(chuàng)建

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2985

    瀏覽量

    106994
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3903

    瀏覽量

    65807
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1657

    瀏覽量

    49915

原文標(biāo)題:Java反射和new效率對(duì)比,差距有多大?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Java開(kāi)發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開(kāi)發(fā)者在用?

    Perforce JRebel是一款Java開(kāi)發(fā)效率工具,旨在幫助java開(kāi)發(fā)人員更快地編寫(xiě)更好的應(yīng)用程序。JRebel可即時(shí)重新加載對(duì)代碼的修改,無(wú)需重啟或重新部署應(yīng)用程序,就能讓開(kāi)發(fā)者即時(shí)看到代碼更改的效果,從而縮短開(kāi)發(fā)、調(diào)
    的頭像 發(fā)表于 04-27 13:44 ?168次閱讀
    <b class='flag-5'>Java</b>開(kāi)發(fā)者必備的<b class='flag-5'>效率</b>工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開(kāi)發(fā)者在用?

    請(qǐng)問(wèn)DLP5530S-Q1反射率多少?

    請(qǐng)問(wèn)DMD的反射效率是多少? DMD反射的光通量/入射到DMD有效面積上的光通量 下文只寫(xiě)了 window transmission (2 passes),請(qǐng)問(wèn)diffraction
    發(fā)表于 02-19 07:11

    時(shí)域反射計(jì)的技術(shù)原理和應(yīng)用場(chǎng)景

    位置及其阻抗值。反射信號(hào)的幅度和特性與傳輸線的阻抗密切相關(guān)。應(yīng)用場(chǎng)景時(shí)域反射計(jì)在多個(gè)領(lǐng)域廣泛的應(yīng)用,具體包括: 電氣工程與通信:用于檢測(cè)通信電纜和金屬電纜(如雙絞線、同軸電纜)中的斷點(diǎn)位置、連接器位置
    發(fā)表于 02-11 14:39

    國(guó)產(chǎn)芯片差距還有多大

    芯片
    芯廣場(chǎng)
    發(fā)布于 :2025年01月15日 17:45:07

    反射光束整形系統(tǒng)

    。 規(guī)格:像散激光光束 ?由激光二極管發(fā)出的強(qiáng)像散高斯光束 ?忽略發(fā)射區(qū)域在x和y方向可能發(fā)生的移動(dòng) 規(guī)格:柱形拋物面反射鏡 ?拋物面曲率的圓柱鏡 ?應(yīng)用用錐形常數(shù).-1來(lái)實(shí)現(xiàn)錐形界面 ?曲率半徑等于
    發(fā)表于 12-12 10:38

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語(yǔ)言功能、核心 API 以及 JVM,同時(shí)適合新的 Java 開(kāi)發(fā)者和高級(jí)開(kāi)發(fā)者。從?IntelliJ IDEA 2024.2?開(kāi)始已支持 Java
    的頭像 發(fā)表于 12-04 10:02 ?857次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java集合API的改進(jìn)介紹

    解答這些問(wèn)題。 我們將逐步學(xué)習(xí) Java 集合類的優(yōu)化過(guò)程,并按版本逐一對(duì)比分析。主要討論的焦點(diǎn)將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能
    的頭像 發(fā)表于 11-22 11:12 ?513次閱讀
    <b class='flag-5'>Java</b>集合API的改進(jìn)介紹

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?927次閱讀

    Java中時(shí)間戳的使用

    Java中時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?467次閱讀
    <b class='flag-5'>Java</b>中時(shí)間戳的使用

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C語(yǔ)言和Java語(yǔ)言進(jìn)行詳細(xì)對(duì)比
    的頭像 發(fā)表于 10-29 17:31 ?959次閱讀

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回Java源代碼的過(guò)程。雖然反編譯可以幫助理解代碼的邏輯和結(jié)構(gòu),但它并不總是能完美地還原原始源代碼。反編譯工具通常會(huì)產(chǎn)生與原始代碼
    的頭像 發(fā)表于 09-02 11:03 ?1682次閱讀

    不按INTEL的“3W-2S”規(guī)則設(shè)計(jì),出問(wèn)題的概率多大

    case,分別是“2W-2S”和“4W-2S”,Chris想仿真驗(yàn)證下不按intel要求的“3W-2S”設(shè)計(jì)的話,其他兩種case的性能差距多大! 唰的一聲,仿真的結(jié)果就出來(lái)了。那按照慣例還是先看無(wú)
    發(fā)表于 08-26 14:51

    為什么OPA365和OPA2365的輸出電壓vs輸出電流曲線會(huì)有很大的差距

    請(qǐng)教一下為什么OPA365和OPA2365的輸出電壓vs輸出電流曲線會(huì)有很大的差距。、 在輸出同樣的電流的情況下,例如30mA,25C時(shí),OPA365還能輸出2V以上,而OPA2365只大概
    發(fā)表于 08-12 08:20

    華納云:java web和java什么區(qū)別java web和java什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ堋⒂猛竞蛯?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語(yǔ)言,它提供了一種用于開(kāi)發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?1376次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b><b class='flag-5'>有</b>什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b><b class='flag-5'>有</b>什么區(qū)別

    貼片電容的抗電強(qiáng)度多大

    [104貼片電容]貼片電容的抗電強(qiáng)度多大?抗電強(qiáng)度是指貼片電容兩個(gè)引出端之間連接起來(lái)的引出端與金屬外殼之間所能接受的最大電壓,有時(shí)又把抗電強(qiáng)度叫做絕緣耐壓。 貼片電容的抗電強(qiáng)度通常指的是其能夠承受
    的頭像 發(fā)表于 07-05 16:29 ?580次閱讀
    主站蜘蛛池模板: 国产成人免费无庶挡视频 | 91日本视频 | 国产伦精品一区二区三区四区 | 美女黄网站人色视频免费国产 | 欧美成人全部免费观看1314色 | 手机看片国产福利 | 欧美一卡二卡科技有限公司 | 91视频免费观看 | 伊人9| 天天综合天天做天天综合 | 色综合久久综合欧美综合网 | 年下攻高h好涨 | 国产成人精品高清在线 | 激情性爽三级成人 | 中文字幕第15页 | 99九九成人免费视频精品 | 在线观看精品国产入口 | 天天操夜| 怡红院黄色 | 国产黄色在线看 | 热99re久久精品2久久久 | 黄色在线播放网站 | 免费一区二区视频 | 色视频免费版高清在线观看 | 狠狠干b| 日日爽夜夜 | 天天射天天爽 | 日韩成人影院 | 天天伊人 | 狠狠色婷婷丁香综合久久韩国 | 噜噜噜久久久 | 久久国产精品免费看 | 日日操夜夜爱 | 国产亚洲一区二区精品 | 夜夜夜操操操 | 四虎网址最新 | 老色批午夜免费视频网站 | xx在线观看| 色黄视频 | 国产福利在线观看你懂的 | 好男人社区在线观看www |