二維碼
        企資網

        掃一掃關注

        當前位置: 首頁 » 企資快報 » 微訊熱點 » 正文

        Java_反是_和_Java_new_的效率有

        放大字體  縮小字體 發布日期:2023-03-20 11:40:52    作者:馮梓嫙    瀏覽次數:59
        導讀

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

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

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

        兩者之間創建對象的效率如何?

        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 對象和反射創建對象的效率對比

        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

        最后我們發現新建1億個對象和反射創建1億個對象的效率相差很多倍。

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

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

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

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

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

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

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

        2、反射的使用場景

        反射的一些使用場景

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

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

        粵ICP備16078936號

        微信

        關注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯系
        客服

        聯系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

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

        反饋

        用戶
        反饋

        免费一区二区无码东京热| 久久精品中文字幕一区| 中文字幕亚洲码在线| 国产日韩精品中文字无码| 亚洲啪啪AV无码片| 中文字幕无码久久精品青草| 精品国产V无码大片在线看| MM1313亚洲精品无码| 最近完整中文字幕2019电影| 无码AV中文一区二区三区| 最近2019中文免费字幕在线观看| 中文字幕无码无码专区| 中文字幕人成高清视频| 亚洲日韩激情无码一区| 中文字幕有码无码AV| 亚洲AV永久无码精品一百度影院 | 中文字幕在线免费看线人| 色综合久久久久无码专区| 免费在线中文日本| 国产AV一区二区三区无码野战| 中文精品久久久久国产网址| 日韩电影无码A不卡| 亚洲欧洲日产国码无码网站 | 中文字幕aⅴ人妻一区二区 | 亚洲日产无码中文字幕| 人妻丝袜中文无码av影音先锋专区| 无码人妻精品一区二区三区久久| 亚洲欧美日韩中文字幕在线不卡 | 久久久久成人精品无码中文字幕| 精品一区二区三区无码免费视频 | 无码国产亚洲日韩国精品视频一区二区三区| 中文成人无码精品久久久不卡 | 无码国产精品一区二区免费3p| 亚洲精品无码AV中文字幕电影网站 | 亚洲中文字幕无码一久久区| 精品国产一区二区三区无码| 精品欧洲av无码一区二区14| 痴汉中文字幕视频一区| 亚洲午夜AV无码专区在线播放| 久久久久久国产精品免费无码| 一区二区三区无码视频免费福利|