999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java動態類加載機制應用研究

2018-09-13 10:47:16孫彬
科技創新與應用 2018年23期

孫彬

摘 要:在Java應用程序運行時,Java虛擬機中的類加載機制能在不影響其他功能模塊運行的情況下動態加載類文件。文章簡述了Java類加載器的層次體系結構以及動態加載機制原理,并結合具體的例子,將Java動態加載機制應用在高校網站管理平臺的文件發布模塊,實現了系統和靜態網頁的關聯,可快速搭建二級網站,還能通過自定義加載器能對加密的字節碼進行解密,得出了Java語言具有強大的靈活性和安全度,能很好的保護代碼安全。

關鍵詞:Java;動態類加載機制;結構體系

中圖分類號:TP312 文獻標志碼:A 文章編號:2095-2945(2018)23-0180-02

Abstract: The class-loading mechanism in the Java Virtual Machine can dynamically load class files without affecting the running of other functional modules while the Java application is running. In this paper, the hierarchical structure of Java classloader and the principle of dynamic loading mechanism are briefly described. Based on specific examples, Java dynamic loading mechanism is applied to file publishing module of university website management platform. The association between the system and the static web page is realized, the secondary web site can be built quickly, and the encrypted bytecode can be decrypted by the custom loader. It is concluded that the Java language has strong flexibility and security, and can protect the code security very well.

Keywords: Java; dynamic classloading mechanism; architecture system

動態加載能在運行時安裝程序組件,Microsoft Windows等系統中都有用到動態加載技術。動態連接比靜態連接更有靈活性,并且能節約一定的內存空間。Java動態類加載是調用所用的類,這些類并未在源代碼中提到,單個程序是由多個類組成的。一個程序啟動時總是先加載一些基礎類到JVM,剩余的類是在需要時再另行加載的。這種加載方式能在很大程度上實現對內存的節約,體現Java語言加載的動態性。Java體系結構語言包括了Java語言、Java虛擬機4大部分、Java class文件和Java API,其中JVM是Java體系結構的核心部分[1]。Java動態類加載先將程序運行的基礎類加載到JVM中,等JVM用到時再加載其他類。

1 Java類加載器的結構體系

Java中的類需被裝載到JVM中實現運行,JVM中的有類加載器,負責完成對Java類的裝載。類加載器從硬盤中讀取類文件到內存里。Java中的類的形式多種多樣,根據功能和加載方式的不同,基本上可分為核心類、擴展類還要許多用戶根據自身需求自定義的類。對應不同Java中的類。JVM里面的類加載器也分為三種,它們分別是Bootstrap ClassLoader,負責對Java中核心類的加載;ExtClassLoader,負責對拓展類的加載;AppClassLoader,負責對用戶自定義類的加載。JVM程序內存在較為靈活的類裝載器組件,在單個應用程序中能允許多個類加載器同時允許,進行對類加載方式的自定義操作。Bootstrap ClassLoader加載器是用編寫虛擬機的語言編寫的,在系統中是唯一的。如若JVM使用C語言或C++語言在操作環境下完成運行目標,那么Bootstrap ClassLoader看做這兩種語言體系下實現部分,也是用C語言或者C++語言進行表示。Bootstrap ClassLoader加載Java運行環境提供程序運行的核心類,這些類有著重要的作用,要實現實現加載。Bootstrap ClassLoader在運行中,不僅要完成對核心類的加載,而且還要完成對Ext ClassLoader以及App ClassLoader的加載,它們是兩個用戶類加載器,作用是加載核心類之外的類。這兩個類加載器的本質其實也屬于類,也需要被加載,Bootstrap ClassLoade本身不屬于Java類。在分工方面,Ext ClassLoader負責加載jre/lib/ext中的所有類;App ClassLoader負責加載classpath指定路徑中程序所需的類[2]。JVM中的類加載器間的結構采用樹形結構,具有父子關系。App ClassLoader的父加載器是Ext ClassLoader,而Ext ClassLoader的父加載器是Bootstrap ClassLoade。JVM中的加載器不只三個,實際應用中,一些類不能被以上三個加載器加載,用戶這時候要根據自身的實際需求進行加載器的編寫,以達到相應的加載目的。

2 Java動態類加載機制原理

JVM在運行過程中,產生的類加載器數量最少是三個,通常是Ext ClassLoader、Bootstrap ClassLoader以及APP ClassLoader,為了將多個類加載器能互相配合工作,就需要根據它們的功能分類并劃分級別,級別不同,加載的類也不一樣,此時引入了一個Parent概念,就是我們通常所說的“雙親”。JVM根據這種層次關系完成一系列加載工作,實現按需加載。在對類進行加載時,首先會對父類加載器發出請示,如果父類加載器搜索路徑加載不到,自己類加載器才進行搜索,呈現遞歸性。這種遞歸作用大大的增強了加載的安全性,防止一些惡意類帶來的破壞。同一個類能在不同加載器間實現多次加載,同一加載器的加載次數只有一次。加載器在完成對類的加載前會對類進行檢測,判定是否被加載過。每個類由名字和類加載器兩個參數組成。抽象類ClassLoader是由Java核心類庫提供的,在相關的制約下,所有的自定義類加載器必須對獲取的類對象實施繼承性和實例化轉型操作,自定義類加載器須對類對象進行繼承性操作,自定義加載器對其他加載器有一定的依賴度,會對JVM技術體系中Bootstrap ClassLoader發出請求。一個類加載器請求另一個類加載器的過程若能實現形式化建制,也就意味著實現了對“雙親委托”模型的構建。除了啟動類加載器,技術運行體系中,其他所有的類加載器只有一個“雙親”。若“雙親”沒實現清晰制定,可根據運行狀況分配默認狀態下的技術區位[3]。

3 Java動態類加載的實現

JVM要通過加載、連接和初始化三步解釋字節碼,加載是.class格式文件進行讀入,創建class對象;連接是把已加載數據合并到虛擬機運行中;初始化是將類變量賦以初始值[4]。Java中是動態加載,通過“雙親”機制完成。Java動態類加載分為顯式加載和隱式加載,顯式加載方式分為Class.forName()方法,第二種是LoadClass()提供,顯式加載相比于隱式加載,靈活度得到了提升。自定義的加載器從Java.Lang.ClassLoader的任何子類創建,需指定一個父加載器。任何類加載通過ClassLoader類或者子類實現,是Java核心API中的一部分,自定義類加載器須繼承并實例化該類,采取Class LoadClass、Class findClass、Class defineClass、Class findSystemClass和Class findLoadedClass等重要方法[5]。動態類加載使用Java.Lang.Class的forName()方法,有兩種重載形式:

Public static Class forName(Sting className)throws ClassNotFoundException

Public static Class forName(string name,boolean initialize,ClassLoader Loader)

使用第三參數指定類加載器,與類關連的Class對象,第二個參數指定表示是否被初始化。

Class.forName(“FOO”,true,this.getClass).getClassLoader

根據用戶的需要,在實現動態類加載時,使用forName()方法或是自定義類加載器。forName()方法使用頻率較高,最為直接,使用forName()方法實現請求類型在加載時初始化。自定義類加載功能是實現從數據庫中獲取或者進行動態創建,用定制方式轉換類型的全限定名轉為Java class文件格式字節數組,從而進行安全防護。

4 應用例子

Java類加載器有著非常強大的功能,通過將類進行重載的方式達到程序加載功能實現。Java類加載器在生活中有著廣泛的應用,這里將Java動態類加載機制應用在二級網站管理系統的文件發布模塊,加載被加密的Java類文件。在系統需求方面,需搭建網站通用平臺實現對二級網站的統一管理。通過管理平臺搭建完畢后,若想建設二級網站,只需做好靜態網頁,在平臺中分配欄目,個性化功能需文件發布模塊,發布到通用平臺中。文件發布模塊能實現對二級網站靜態頁面的動態化,使得靜態網頁和系統關聯,增加系統拓展性,降低模塊間的耦合性,對文件代碼作出加密處理,保障了系統的安全。

綜上所述,Java動態類加載是Java程序中的重要機制,文章闡述了Java類加載器的技術結構體系,闡明了動態加載機制的原理,看出了Java動態加載機制技術性嚴密,為技術人員提供了參考。文章最后結合具體的例子將這樣技術用在高校網站通用管理平臺的文件發布模塊,實現了二級網站建設的拓展,為系統增加了拓展性。已經加密的代碼只能通過自定義加載器解密,保證了文件的安全性。

參考文獻:

[1]黃軍.Java動態類加載機制研究及應用[J].信息與電腦(理論版),2018(04):3-4.

[2]朱丹丹.芻議Java動態類加載機制研究與應用[J].電子技術與軟件工程,2016(07):245.

[3]王智恒.基于動態加載技術的Android插件化開發框架研究與實現[D].云南大學,2016.

[4]鄒煜.Java類文件混合加密算法的研究與分析[D].華中師范大學,2017.

[5]崔娜.Java動態類加載機制研究及運用[J].信息與電腦(理論版),2015(24):15-16.

[6]籍慧文.Web應用開發中JAVA編程語言的應用探討[J].科技創新與應用,2017(07):90.

[7]賀蘊彬.Java虛擬機的自適應動態優化[J].科技創新與應用,

2014(13):70.

主站蜘蛛池模板: 国产小视频a在线观看| 国产91九色在线播放| 亚洲制服中文字幕一区二区| 亚洲欧美日韩视频一区| 亚洲国产精品一区二区第一页免 | 亚洲天堂网在线播放| 一级毛片免费观看久| 免费aa毛片| 女人一级毛片| 久精品色妇丰满人妻| 国产精品尤物在线| 伊人中文网| 夜夜操狠狠操| 四虎精品免费久久| 日本不卡在线播放| 老司机久久99久久精品播放| 亚洲九九视频| a毛片免费在线观看| 亚洲精品制服丝袜二区| 日韩中文无码av超清 | 奇米精品一区二区三区在线观看| 91视频精品| 亚洲美女视频一区| 小蝌蚪亚洲精品国产| 国产97色在线| 国产资源免费观看| 全部无卡免费的毛片在线看| 亚洲午夜国产精品无卡| 欧美精品啪啪一区二区三区| 日韩欧美国产综合| 婷婷99视频精品全部在线观看| 国产国语一级毛片| 亚洲中文字幕久久精品无码一区| 国产精品香蕉| 91精品aⅴ无码中文字字幕蜜桃 | 婷婷亚洲最大| 國產尤物AV尤物在線觀看| Jizz国产色系免费| 欧美日韩中文国产va另类| 日韩一区精品视频一区二区| 亚洲精品另类| 久久黄色毛片| 国产白浆视频| 91娇喘视频| 亚洲精品国产成人7777| 亚洲中文字幕无码mv| www.99在线观看| 毛片基地视频| 一级毛片免费高清视频| 伊人丁香五月天久久综合| 国产91透明丝袜美腿在线| 亚洲福利一区二区三区| 毛片久久网站小视频| aa级毛片毛片免费观看久| 久久综合色天堂av| 狠狠做深爱婷婷久久一区| 国产永久在线观看| 亚洲第一成年人网站| 久久久久人妻一区精品| 婷婷丁香在线观看| 一本一道波多野结衣一区二区 | 2020久久国产综合精品swag| 成人午夜视频免费看欧美| 国产av色站网站| A级毛片高清免费视频就| 亚洲视屏在线观看| 色综合久久88色综合天天提莫 | 亚洲成人播放| 亚洲无码一区在线观看| AV无码无在线观看免费| 精品精品国产高清A毛片| 老司机午夜精品网站在线观看 | 亚洲一区二区黄色| 原味小视频在线www国产| 久久综合干| 激情综合五月网| 狠狠色狠狠色综合久久第一次| 久久久波多野结衣av一区二区| 亚洲乱强伦| 国产一级精品毛片基地| 婷婷午夜影院| 自拍偷拍欧美日韩|