免费人成动漫在线播放r18-免费人成观看在线网-免费人成黄页在线观看日本-免费人成激情视频在线观看冫-jlzzjlzz亚洲大全-jlzzjlzz亚洲日本

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企資快報 » 企業(yè) » 正文

Java_反是_和_Java_new_的效率有

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

在我們的日常使用中,Java new是用的最多的,但是有些框架往往會使用Java反射來實現(xiàn)靈活性,那么它們之間的效率有什么區(qū)別呢?你有沒有想過,什么時候應該該用new來創(chuàng)建對象,什么時候該使用反射呢?兩者之間創(chuàng)建對

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

你有沒有想過,什么時候應該該用new來創(chuàng)建對象,什么時候該使用反射呢?

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

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 對象和反射創(chuàng)建對象的效率對比

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億個對象和反射創(chuàng)建1億個對象的效率相差很多倍。

那么讓我們來探討一下為什么會有如此大的差異。

一般來說,我們的Java代碼需要在虛擬機上編譯運行。

一般通過前端編輯器將java文件轉換成class文件,比如javac.

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

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

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

綜上所述,Java反射比使用new關鍵字創(chuàng)建對象的性能差,因為反射需要在運行時進行更多的操作,包括動態(tài)解析類信息、查找并調用構造函數(shù)、進行安全性檢查和進行額外的初始化工作等。在性能要求較高的場景中,應該盡可能地避免使用反射創(chuàng)建對象,而盡量使用new關鍵字進行對象創(chuàng)建。

2、反射的使用場景

反射的一些使用場景

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

    Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

    粵ICP備16078936號

    微信

    關注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

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

    反饋

    用戶
    反饋

    主站蜘蛛池模板: 国产精品国内免费一区二区三区 | 狠狠色狠狠色综合日日小蛇 | 看全免费的一级毛片 | 18视频免费网站 | 亚洲成成品网站有线 | 精品国产一区二区 | 麻豆一区二区三区在线观看 | 精品综合久久久久久8888 | 午夜色图 | 人人添人人澡人人澡人人诱 | 立即播放免费毛片一级 | 日本中文字幕一区二区有码在线 | av区无码字幕中文色 | 成人黄18免费视频 | 欧美一区日韩精品 | 日本免费一级视频 | 成人精品视频在线观看播放 | 天天夜日日日日碰日日摸 | 美女一级毛片无遮挡内谢 | 国产免费色视频 | se婷婷| 男女在线播放 | 日韩一区二区三区在线视频 | 久草手机在线观看视频 | 国产日韩视频在线观看 | 澳门一级毛片手机在线看 | 久久亚洲私人国产精品va | 一区二区三区视频在线 | 在线 你懂的 | xxxxx 日本| 免费一级毛片在线播放不收费 | 91免费公开视频 | 日韩三级大片 | 97视频在线观看免费播放 | 一个人看的在线www高清视频 | 成人a大片在线观看 | 91国自产精品中文字幕亚洲 | 性v天堂 | 欧美特黄一免在线观看 | 亚洲国产欧美日韩一区二区 | 在线观看国产区 |