色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

jf_ro2CN3Fa ? 來源:CSDN ? 2022-12-22 14:50 ? 次閱讀

  • 一. 基礎概念
  • 二. new 對象和反射創建對象的效率對比
  • 三. 反射和new 的使用場景
cfc70a16-81b9-11ed-8abf-dac502259ad0.png

一. 基礎概念

Java中,一般我們創建一個對象可能會選擇new一下個實例。但是隨著我們技術的不斷提升,我們也學習到了,可以通過反射技術實現對象的創建。

可是,你有沒有想一下,什么時候我們改用new創建對象,什么時候我們改用反射創建對象呢?

兩者創建對象的效率又是如何呢?

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

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

二. new 對象和反射創建對象的效率對比

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

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

//反射創建對象
//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("反射耗時為:"+(endTime-startTime));
}
}
}
cfd737d8-81b9-11ed-8abf-dac502259ad0.png

最終我們發現,new 100000000 個對象和反射創建 100000000 個對象,效率相差了很多倍。

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

首先第一點,一般我們的Java代碼是需要編譯后在虛擬機里面運行的。

我們一般都是通過一個前端編輯器,比如javac,把java文件轉為class文件。

接下來,程序運行期間,可能會通過一個JIT,即時編譯器將字節碼文件轉換為計算機認識的機器碼文件。

另外一種可能是通過一個AOT編譯器,直接把java文件編譯為本地機器碼文件。其中JIT在程序運行期會對程序進行優化,但是反射是通過動態解析的方式,因此可能無法執行某些java虛擬機的優化。

總結起來有下面幾個原因:

Method#invoke 方法會對參數做封裝和解封操作

  • 需要檢查方法可見
  • 需要校驗參數
  • 反射方法難以內聯
  • JIT 無法優化

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

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

三. 反射和new 的使用場景

反射的部分使用場景

  1. Spring通過反射來幫我們實例化對象,并放入到Ioc容器中
  2. 使用JDBC鏈接數據庫時加載數據庫驅動Class.forName()
  3. 逆向代碼 例如反編譯
  4. 利用反射,在泛型為int的arryaList集合中存放一個String類型的對象

new 對象和反射的區別

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

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104707
  • 數據庫
    +關注

    關注

    7

    文章

    3795

    瀏覽量

    64367
  • 編譯器
    +關注

    關注

    1

    文章

    1624

    瀏覽量

    49112

原文標題:Java反射和new效率對比,差距有多大?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Java 23功能介紹

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

    Java集合API的改進介紹

    解答這些問題。 我們將逐步學習 Java 集合類的優化過程,并按版本逐一對比分析。主要討論的焦點將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能
    的頭像 發表于 11-22 11:12 ?181次閱讀
    <b class='flag-5'>Java</b>集合API的改進介紹

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優勢和適用場景。以下是對這兩種編程語言的對比: 一、語法和易用性 Python 語法簡潔,代碼更易讀,非常適合初學者。 動態類型系統
    的頭像 發表于 11-15 09:31 ?290次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C語言和Java語言進行詳細對比
    的頭像 發表于 10-29 17:31 ?318次閱讀

    不按INTEL的“3W-2S”規則設計,出問題的概率多大

    case,分別是“2W-2S”和“4W-2S”,Chris想仿真驗證下不按intel要求的“3W-2S”設計的話,其他兩種case的性能差距多大! 唰的一聲,仿真的結果就出來了。那按照慣例還是先看無
    發表于 08-26 14:51

    華納云:java web和java什么區別java web和java什么區別

    Java Web和Java是兩個不同的概念,它們在功能、用途和實現方式上存在一些區別,下面將詳細介紹它們之間的區別。 1. 功能和用途: – Java是一種編程語言,它提供了一種用于開發各種應用程序
    的頭像 發表于 07-16 13:35 ?788次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b><b class='flag-5'>有</b>什么區別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b><b class='flag-5'>有</b>什么區別

    貼片電容的抗電強度多大

    [104貼片電容]貼片電容的抗電強度多大?抗電強度是指貼片電容兩個引出端之間連接起來的引出端與金屬外殼之間所能接受的最大電壓,有時又把抗電強度叫做絕緣耐壓。 貼片電容的抗電強度通常指的是其能夠承受
    的頭像 發表于 07-05 16:29 ?320次閱讀

    解讀 RF 反射

    本文要點理解什么是RF反射。RF反射對信號完整性的影響。抑制RF反射的方式。什么是RF反射?在設計低速信號時,工程師最關心的是信號如何從源頭到達目的地。當信號達到數百MHz或Ghz級別
    的頭像 發表于 03-23 08:11 ?740次閱讀
    解讀 RF <b class='flag-5'>反射</b>

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執行不同的任務或操作。Java中的多線程可以提高程序的效率和性能,使得程序可以同時處理多個任務。 Jav
    的頭像 發表于 03-14 16:55 ?693次閱讀

    三星顯示CEO:中韓OLED顯示器企業技術差距僅1年

    三星Display社長崔周善表示:“與中國顯示器企業的技術差距縮小到1年或1年半。為了維持技術超差距必要聚集人才,提高研發的效率。”
    的頭像 發表于 03-08 14:54 ?1107次閱讀

    示波器交流耦合時的電容多大

    在使用示波器時,輸出信號耦合方式直流耦合和交流耦合,直流耦合是將采集到的信號經衰減后直接耦合到示波器采集端口;而交流耦合是將采集到的衰減信號經電容耦合然后到示波器的采集端口,這個電容的目的就是通交阻直,由電路可知,這個電容越大,通交阻直的效果一般來說越好,那么這個電容一般而言
    發表于 02-25 20:50

    箱式變壓器輻射嗎,對周圍影響多大

    箱式變壓器是一種常見的電力設備,它將輸入的電壓通過變壓器原理進行轉換,輸出不同電壓的電力。關于箱式變壓器是否輻射以及對周圍的影響多大,這個問題涉及到電磁輻射和電磁污染的知識。在本文中,將詳細介紹
    的頭像 發表于 02-18 11:29 ?3011次閱讀

    電阻應變片形變量多大?電阻應變片能承受的拉應變最大是多少?

    電阻應變片形變量多大?電阻應變片能承受的拉應變最大是多少? 電阻應變片形變量多大? 電阻應變片是一種用于測量應變的傳感器,其形變量是根據材料的長度、寬度和厚度的變化來測量的。電阻應
    的頭像 發表于 02-04 15:11 ?1615次閱讀

    光學薄膜4——反射

    具有最大的反射率和最小的吸收率因而在激光應用和一些高要求的系統中得到了廣泛的使用。 金屬膜材料的選擇原則 1、先考慮使用波段要求 2、反射率要求 3、使用環境 4、制作成本等 5、常用Al、Ag、Au、Pt ●鋁:最常用,紫外
    的頭像 發表于 01-18 06:38 ?511次閱讀
    光學薄膜4——<b class='flag-5'>反射</b>膜

    請問N32G430多大的RAM?

    N32G430多大的RAM
    發表于 01-17 06:33
    主站蜘蛛池模板: 顶级欧美不卡一区二区三区| 亚洲qvod图片区电影| 蜜芽丅v新网站在线观看| 国产亚洲制服免视频| 国产精自产拍久久久久久蜜| 成年性生交大片免费看| 菠萝菠萝蜜免费播放高清| adc我们的永久网址| 99久久亚洲| 99视频国产在线| A级韩国乱理伦片在线观看| 99免费观看视频| CHINESE老阿姨免费视频| 芭乐草莓樱桃丝瓜18岁大全| 啊…嗯啊好深男男高h文总受| xnxx18美女| 国产AV亚洲国产AV麻豆| 国产青青草原| 狠狠干狠狠色| 久久精品电影网| 蜜桃视频一区二区| 欧美老少欢杂交另类| 青柠电影在线看| 日日操夜夜操天天操| 污污内射久久一区二区欧美日韩| 无码乱人伦一区二区亚洲| 亚洲国产精品久久精品成人网站 | 国产哺乳期奶水avav| 国产乱码卡二卡三卡4W | 中文国产乱码在线人妻一区二区| 在线色av| jizz老太婆| 国产www视频| 韩国演艺圈悲惨在线| 久久中文字幕人妻AV熟女| 欧美黑人巨大xxxxx| 丝袜美女自摸| 一本道亚洲区免费观看| 91福利在线观看| 高h gl肉文| 久久成人a毛片免费观看网站|