国产成人啪精品视频免费网-国产成人啪精品视频免费网站软件-国产成人盗拍精品免费视频-国产成人深夜福利在线观看-a中文字幕1区-a毛片

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁(yè) » 企資快報(bào) » 企業(yè) » 正文

Java_反是_和_Java_new_的效率有

放大字體  縮小字體 發(fā)布日期:2023-03-20 11:40:52    作者:馮梓嫙    瀏覽次數(shù):78
導(dǎo)讀

在我們的日常使用中,Java new是用的最多的,但是有些框架往往會(huì)使用Java反射來(lái)實(shí)現(xiàn)靈活性,那么它們之間的效率有什么區(qū)別呢?你有沒(méi)有想過(guò),什么時(shí)候應(yīng)該該用new來(lái)創(chuàng)建對(duì)象,什么時(shí)候該使用反射呢??jī)烧咧g創(chuàng)建對(duì)

在我們的日常使用中,Java new是用的最多的,但是有些框架往往會(huì)使用Java反射來(lái)實(shí)現(xiàn)靈活性,那么它們之間的效率有什么區(qū)別呢?

你有沒(méi)有想過(guò),什么時(shí)候應(yīng)該該用new來(lái)創(chuàng)建對(duì)象,什么時(shí)候該使用反射呢?

兩者之間創(chuàng)建對(duì)象的效率如何?

ReflectDemo reflectDemo = new ReflectDemo();Class<ReflectDemo> reflectDemoClass = ReflectDemo.class;Class<?> aClass = Class.forName ("com.jason.sample.ReflectDemo");Class<? extends Class> aClass = reflectDemoClass.getClass ();1. new 對(duì)象和反射創(chuàng)建對(duì)象的效率對(duì)比

public class ReflectDemo { public static void main (String[] args) throws IllegalAccessException, InstantiationException { proxyObject(); newObject(); } public static void newObject(){ long startTime = System.currentTimeMillis (); int i; for (i = 0; i < 100000000; i++) { ReflectDemo reflectDemo = new ReflectDemo (); } if (i == 100000000) { long endTime = System.currentTimeMillis (); System.out.println ("new time:" + (endTime - startTime)); } } public static void proxyObject() throws IllegalAccessException, InstantiationException { long startTime = System.currentTimeMillis (); Class<ReflectDemo> reflectDemoClass = ReflectDemo.class; int i; for (i = 0; i < 100000000; i++) { ReflectDemo reflectDemo = reflectDemoClass.newInstance (); } if (i == 100000000) { long endTime = System.currentTimeMillis (); System.out.println ("reflection time:" + (endTime - startTime)); } }}new time:3reflection time:230

最后我們發(fā)現(xiàn)新建1億個(gè)對(duì)象和反射創(chuàng)建1億個(gè)對(duì)象的效率相差很多倍。

那么讓我們來(lái)探討一下為什么會(huì)有如此大的差異。

一般來(lái)說(shuō),我們的Java代碼需要在虛擬機(jī)上編譯運(yùn)行。

一般通過(guò)前端編輯器將java文件轉(zhuǎn)換成class文件,比如javac.

接下來(lái),在程序執(zhí)行期間,JIT(即時(shí)編譯器)可以將字節(jié)碼文件轉(zhuǎn)換為計(jì)算機(jī)可識(shí)別的機(jī)器碼文件。另一種方式是通過(guò) AOT 編譯器直接將 java 文件編譯成本地機(jī)器碼文件。其中JIT會(huì)在程序運(yùn)行時(shí)對(duì)程序進(jìn)行優(yōu)化,但是反射是通過(guò)動(dòng)態(tài)分析的,所以可能無(wú)法對(duì)Java虛擬機(jī)進(jìn)行一些優(yōu)化。

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

  1. 反射需要?jiǎng)討B(tài)解析類信息:在使用反射創(chuàng)建對(duì)象時(shí),需要使用Class.forName()方法或類的class屬性等方式獲取類的信息。這個(gè)過(guò)程需要在運(yùn)行時(shí)進(jìn)行,而使用new關(guān)鍵字則在編譯時(shí)已經(jīng)解析了類信息,所以不需要進(jìn)行類信息解析。
  2. 反射需要查找并調(diào)用構(gòu)造函數(shù):使用反射創(chuàng)建對(duì)象需要先獲取構(gòu)造函數(shù)對(duì)象,然后通過(guò)反射調(diào)用構(gòu)造函數(shù)進(jìn)行對(duì)象創(chuàng)建。這個(gè)過(guò)程需要在運(yùn)行時(shí)進(jìn)行,而使用new關(guān)鍵字則直接調(diào)用構(gòu)造函數(shù)進(jìn)行對(duì)象創(chuàng)建,無(wú)需查找構(gòu)造函數(shù)。
  3. 反射需要進(jìn)行安全性檢查:使用反射創(chuàng)建對(duì)象時(shí),Java會(huì)對(duì)代碼進(jìn)行安全性檢查,以確保反射調(diào)用的方法和構(gòu)造函數(shù)是可訪問(wèn)的。這個(gè)過(guò)程也需要在運(yùn)行時(shí)進(jìn)行,而使用new關(guān)鍵字則不需要進(jìn)行安全性檢查。
  4. 反射創(chuàng)建的對(duì)象需要做額外的初始化工作:使用反射創(chuàng)建的對(duì)象需要進(jìn)行額外的初始化工作,例如調(diào)用對(duì)象的setAccessible(true)方法以訪問(wèn)私有成員變量和方法等。這些額外的操作也會(huì)增加反射創(chuàng)建對(duì)象的時(shí)間。

綜上所述,Java反射比使用new關(guān)鍵字創(chuàng)建對(duì)象的性能差,因?yàn)榉瓷湫枰谶\(yùn)行時(shí)進(jìn)行更多的操作,包括動(dòng)態(tài)解析類信息、查找并調(diào)用構(gòu)造函數(shù)、進(jìn)行安全性檢查和進(jìn)行額外的初始化工作等。在性能要求較高的場(chǎng)景中,應(yīng)該盡可能地避免使用反射創(chuàng)建對(duì)象,而盡量使用new關(guān)鍵字進(jìn)行對(duì)象創(chuàng)建。

2、反射的使用場(chǎng)景

反射的一些使用場(chǎng)景

  • 框架設(shè)計(jì):Java反射可以在框架設(shè)計(jì)中使用,例如Spring框架中就廣泛地使用了反射技術(shù),可以根據(jù)注解或配置文件動(dòng)態(tài)地加載和實(shí)例化對(duì)象,而不需要手動(dòng)創(chuàng)建對(duì)象。
  • 測(cè)試工具:Java反射可以用于編寫測(cè)試工具,例如JUnit框架就使用反射來(lái)執(zhí)行測(cè)試方法,并獲取測(cè)試結(jié)果等信息。
  • 插件化:Java反射可以用于插件化開(kāi)發(fā),可以通過(guò)反射獲取插件中的類、方法、屬性等信息,從而實(shí)現(xiàn)插件化功能。
  • 動(dòng)態(tài)代理:Java反射可以用于動(dòng)態(tài)代理技術(shù)中,可以動(dòng)態(tài)地生成代理類,并在代理類中調(diào)用被代理對(duì)象的方法,從而實(shí)現(xiàn)代理功能。
  • 序列化和反序列化:Java反射可以用于序列化和反序列化操作,例如在Jackson和Gson等JSON解析庫(kù)中就使用了反射技術(shù),可以自動(dòng)地將JSON字符串轉(zhuǎn)換為Java對(duì)象,或者將Java對(duì)象轉(zhuǎn)換為JSON字符串。
  •  
    (文/馮梓嫙)
    免責(zé)聲明
    本文僅代表作發(fā)布者:馮梓嫙個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

    粵ICP備16078936號(hào)

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號(hào): weishitui

    客服001 客服002 客服003

    工作時(shí)間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    主站蜘蛛池模板: 久久精品一区二区三区中文字幕 | 九九九热在线精品免费全部 | 欧美视频第一页 | 亚洲欧美一区二区三区在线观看 | 亚洲高清在线观看视频 | 美女视频黄的免费视频网页 | 亚洲理论欧美理论在线观看 | 国产精品久久久久影院色 | 色哟哟国产成人精品 | 美女一级毛片免费不卡视频 | 国产精品日韩一区二区三区 | 最新中文字幕乱码在线 | 久久精品视频5 | 免费看a级 | 91无毒不卡 | 超薄肉色丝袜精品足j福利 超级乱淫视频aⅴ播放视频 | jyzzjyzzjyzz日本在线观看 | 亚洲国产精品线播放 | 在线观看香蕉免费啪在线观看 | 国产精品久久久久久影视 | 国产亚洲福利 | 经典三级在线视频 | 亚洲激情视频网 | 日本无卡码免费一区二区三区 | 国产精品一区伦免视频播放 | ffyybb免费福利视频 | 欧美成人中文字幕 | 精品欧美成人高清在线观看2021 | 国内精品国语自产拍在线观看55 | 久久亚洲私人国产精品 | 欧美精品片在线观看网站 | 欧美一级淫片免费播放口 | 日本理论片免费高清影视在线观看 | 欧美黄色一级视屏 | 欧美性猛交xxxxx按摩国内 | 成人手机视频在线观看 | 一色屋精品亚洲香蕉网站 | 亚洲综合第一欧美日韩中文 | 在线a毛片免费视频观看 | 武松金莲肉体交战在线观看 | 精品91精品91精品国产片 |