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.

主站蜘蛛池模板: 亚洲中文字幕av无码区| 国产在线一区视频| 久久人午夜亚洲精品无码区| 呦女精品网站| 婷婷伊人久久| 婷婷亚洲视频| 美女亚洲一区| 欧美日本激情| 99热国产在线精品99| 成年人免费国产视频| 青草91视频免费观看| 91久久精品国产| 亚洲中文字幕97久久精品少妇| 高清无码手机在线观看| 亚洲人成色77777在线观看| 香蕉伊思人视频| 永久毛片在线播| 成人国产一区二区三区| 日韩免费视频播播| 欧美亚洲第一页| 九色视频在线免费观看| 亚洲人成人伊人成综合网无码| 四虎永久免费地址| 国产成人综合网在线观看| 漂亮人妻被中出中文字幕久久| 国产自在线播放| 狠狠ⅴ日韩v欧美v天堂| 色噜噜综合网| 中文字幕色在线| 国产一级在线观看www色| 免费国产黄线在线观看| 凹凸国产分类在线观看| 欧美精品亚洲精品日韩专区| 日韩福利在线视频| 国产午夜人做人免费视频| 精品人妻一区二区三区蜜桃AⅤ| 国产欧美日本在线观看| 日本一本正道综合久久dvd | 91啪在线| 亚洲香蕉在线| 国产午夜在线观看视频| 成人一区专区在线观看| 欧美成人影院亚洲综合图| 激情综合婷婷丁香五月尤物| 在线中文字幕网| 亚洲区一区| 蜜臀AV在线播放| 在线国产91| 蝌蚪国产精品视频第一页| 国产一区二区丝袜高跟鞋| 国产成人艳妇AA视频在线| 欧美性爱精品一区二区三区 | 国产精品专区第1页| 亚洲欧美不卡| 色偷偷一区二区三区| 激情五月婷婷综合网| 国产亚洲欧美日本一二三本道| 日本一区二区不卡视频| 国产肉感大码AV无码| 国产精品护士| 国产青青操| 亚洲一区黄色| 无码高潮喷水在线观看| 香蕉综合在线视频91| 国产精品网址你懂的| 伊伊人成亚洲综合人网7777| 91精品人妻互换| 亚洲美女视频一区| V一区无码内射国产| 日本高清有码人妻| 国产美女久久久久不卡| 亚洲中久无码永久在线观看软件| 国产在线第二页| 亚洲日韩AV无码一区二区三区人| 中文成人在线视频| 精品国产成人三级在线观看| 亚洲男人天堂久久| 中文字幕在线播放不卡| 极品国产在线| 国产精品视频999| 欧美日韩国产高清一区二区三区| 国产成人无码AV在线播放动漫 |