哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

jf_ro2CN3Fa ? 來源: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í)到了,可以通過反射技術(shù)實(shí)現(xiàn)對(duì)象的創(chuàng)建。

可是,你有沒有想一下,什么時(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ì)象,效率相差了很多倍。

所以下面我們來探討一下為什么這么大差別?

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

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

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

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

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

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

  • 需要檢查方法可見
  • 需要校驗(yàn)參數(shù)
  • 反射方法難以內(nèi)聯(lián)
  • JIT 無法優(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通過反射來幫我們實(shí)例化對(duì)象,并放入到Ioc容器中
  2. 使用JDBC鏈接數(shù)據(jù)庫時(shí)加載數(shù)據(jù)庫驅(qū)動(dòng)Class.forName()
  3. 逆向代碼 例如反編譯
  4. 利用反射,在泛型為int的arryaList集合中存放一個(gè)String類型的對(duì)象

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

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

審核編輯 :李倩


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

    關(guān)注

    20

    文章

    3006

    瀏覽量

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

    關(guān)注

    7

    文章

    4083

    瀏覽量

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

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51911

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    反射內(nèi)存卡的具體應(yīng)用

    反射內(nèi)存卡在各種場(chǎng)景下的具體應(yīng)用
    的頭像 發(fā)表于 04-20 16:42 ?136次閱讀

    Java 開發(fā)者指南:全面對(duì)比傳統(tǒng) IDE AI 插件與 Cursor、Windsurf 等 AI 原生 IDE

    AI 正在以前所未有的速度重塑 Java 開發(fā)工作流。本文將為您深度解析 AI 在 Java 開發(fā)中的核心應(yīng)用場(chǎng)景,并全面對(duì)比傳統(tǒng) IDE(如 IntelliJ IDEA、VS Code)的 AI
    的頭像 發(fā)表于 03-26 14:36 ?585次閱讀
    <b class='flag-5'>Java</b> 開發(fā)者指南:全面<b class='flag-5'>對(duì)比</b>傳統(tǒng) IDE AI 插件與 Cursor、Windsurf 等 AI 原生 IDE

    智能顯示模塊Flash存儲(chǔ)空間多大?模塊的內(nèi)存有多大?

    智能顯示模塊Flash存儲(chǔ)空間多大?模塊的內(nèi)存有多大?
    發(fā)表于 02-26 09:17

    DRAM緩存真有那么重要嗎?天碩工業(yè)級(jí)SSD固態(tài)硬盤實(shí)測(cè)告訴你答案!

    在國產(chǎn)固態(tài)硬盤推薦榜中,推薦五花八門,很多用戶疑惑DRAM 緩存 SSD 值得買嗎?不同方案的國產(chǎn) SSD 性能對(duì)比差距到底多大??jī)r(jià)格差距
    的頭像 發(fā)表于 01-19 16:49 ?452次閱讀

    電池分容柜:“卷”出新高度,效率差距究竟有多大

    性直接影響電池生產(chǎn)效率與終端產(chǎn)品可靠性。 一、電池分容柜的核心定義:技術(shù)定位與核心功能 從技術(shù)本質(zhì)來看,電池分容柜是一種集成充放電控制、參數(shù)檢測(cè)、數(shù)據(jù)處理于一體的高精度電池性能測(cè)試設(shè)備,核心功能是通過模擬電池實(shí)際
    的頭像 發(fā)表于 01-08 11:31 ?469次閱讀

    HMC252A非反射式射頻開關(guān)

    HMC252A非反射式射頻開關(guān)HMC252A(ADI器件編號(hào)HMC252AQS24E)是一款基于 GaAs MMIC 工藝的 SP6T 非反射式射頻開關(guān),憑借其低插入損耗、高集成度及寬頻
    發(fā)表于 12-09 09:23

    同是電流檢測(cè)芯片F(xiàn)P137 與 INA139,實(shí)際性能差距多大?

    在電機(jī)驅(qū)動(dòng)的項(xiàng)目應(yīng)用上,為了防止過載和堵轉(zhuǎn)等異常情況的發(fā)生,往往都會(huì)實(shí)時(shí)檢測(cè)風(fēng)扇電機(jī)的工作電流。這樣可以更好的控制、掌握電機(jī)的運(yùn)行狀態(tài),保障電機(jī)的正常運(yùn)行。 客戶一個(gè) 無人機(jī)電調(diào)電機(jī)模塊項(xiàng)目
    發(fā)表于 11-17 10:45

    Arm Neoverse CPU上大代碼量Java應(yīng)用的性能測(cè)試

    Java 虛擬機(jī) (JVM) 內(nèi)執(zhí)行。JVM 必須先通過解釋器或即時(shí) (JIT) 編譯器將字節(jié)碼轉(zhuǎn)換為機(jī)器碼,而運(yùn)行時(shí)生成的機(jī)器碼對(duì) Java 應(yīng)用的效率和性能至關(guān)重要。
    的頭像 發(fā)表于 11-05 11:25 ?936次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應(yīng)用的性能測(cè)試

    反射系數(shù)、回波損耗、電壓駐波比之間的關(guān)系

    個(gè)參數(shù)。它表示反射波與入射波的比值,反映了當(dāng)電磁波遇到不匹配的阻抗時(shí),多少能量被反射回去。反射系數(shù)的計(jì)算公式涉及負(fù)載阻抗ZL和傳輸線阻抗Z0的比值。當(dāng)負(fù)載阻抗與
    的頭像 發(fā)表于 10-29 17:36 ?1541次閱讀
    <b class='flag-5'>反射</b>系數(shù)、回波損耗、電壓駐波比之間的關(guān)系

    橢偏儀選型指南 | 橢圓偏振法與反射法的優(yōu)劣對(duì)比

    橢圓偏振法和反射法是用于表面分析和薄膜表征的光學(xué)測(cè)量技術(shù)。這兩種方法都依賴于光反射:橢圓偏振法分析反射光偏振狀態(tài)的變化,反射法則測(cè)量其強(qiáng)度。橢圓偏振法和
    的頭像 發(fā)表于 09-15 18:02 ?964次閱讀
    橢偏儀選型指南 | 橢圓偏振法與<b class='flag-5'>反射</b>法的優(yōu)劣<b class='flag-5'>對(duì)比</b>

    Java效率提升指南:5個(gè)Java工具選型建議及Perforce JRebel和XRebel介紹

    企業(yè)級(jí)Java環(huán)境越來越復(fù)雜,真正的破局點(diǎn),可能不在“人”,而在于“工具”。5個(gè)實(shí)用建議,幫你理清Java工具的選型思路。
    的頭像 發(fā)表于 09-11 13:59 ?1902次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>效率</b>提升指南:5個(gè)<b class='flag-5'>Java</b>工具選型建議及Perforce JRebel和XRebel介紹

    0.04% vs 0.1%:精度差一點(diǎn),逆變器性能差距多大?

    本文導(dǎo)讀一臺(tái)光伏逆變器損失的功率可能僅僅源于0.3%的MPPT效率差距。這個(gè)足以影響產(chǎn)品競(jìng)爭(zhēng)力的數(shù)字,可能并非算法優(yōu)劣,而在于測(cè)試源頭的精度選擇:是0.04%還是0.1%?本文通過四大測(cè)試場(chǎng)景的量化
    的頭像 發(fā)表于 08-20 11:32 ?1850次閱讀
    0.04% vs 0.1%:精度差一點(diǎn),逆變器性能<b class='flag-5'>差距</b><b class='flag-5'>有</b><b class='flag-5'>多大</b>?

    LED芯片電極中的鋁反射層被含氯膠水腐蝕現(xiàn)象觸目驚心!

    出于亮度和成本考慮,越來越多的芯片廠采用鋁反射層的金電極。新結(jié)構(gòu)的LED芯片電極中有一層鋁,其作用為在電極中形成一層反射鏡以提高芯片出光效率,其次可在一定程度上減少蒸鍍電極時(shí)黃金的使用量從而
    的頭像 發(fā)表于 06-16 15:08 ?1870次閱讀
    LED芯片電極中的鋁<b class='flag-5'>反射</b>層被含氯膠水腐蝕現(xiàn)象觸目驚心!

    超聲波除油清洗設(shè)備的清洗范圍多大?

    清洗設(shè)備的清洗范圍多大,接下來,我們將詳細(xì)解答這個(gè)問題。一、超聲波除油清洗設(shè)備的清洗方式超聲波清洗是應(yīng)用于清洗工藝的一種新技術(shù),利用高頻振蕩產(chǎn)生的空泡和爆炸作用原
    的頭像 發(fā)表于 05-14 17:30 ?805次閱讀
    超聲波除油清洗設(shè)備的清洗范圍<b class='flag-5'>有</b><b class='flag-5'>多大</b>?

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

    Perforce JRebel是一款Java開發(fā)效率工具,旨在幫助java開發(fā)人員更快地編寫更好的應(yīng)用程序。JRebel可即時(shí)重新加載對(duì)代碼的修改,無需重啟或重新部署應(yīng)用程序,就能讓開發(fā)者即時(shí)看到代碼更改的效果,從而縮短開發(fā)、調(diào)
    的頭像 發(fā)表于 04-27 13:44 ?978次閱讀
    <b class='flag-5'>Java</b>開發(fā)者必備的<b class='flag-5'>效率</b>工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開發(fā)者在用?
    黄大仙区| 象山县| 英德市| 贡觉县| 邻水| 上饶市| 阿尔山市| 成安县| 安宁市| 临沭县| 车险| 什邡市| 福安市| 秦皇岛市| 西盟| 从化市| 阜城县| 陆丰市| 临江市| 佛坪县| 浦江县| 宜宾市| 建昌县| 荔波县| 朔州市| 原阳县| 墨脱县| 宝山区| 武陟县| 凤翔县| 博客| 永春县| 合山市| 宽城| 阿城市| 蓬溪县| 金平| 抚顺县| 伊川县| 灌阳县| 聂拉木县|