• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java動(dòng)態(tài)類加載機(jī)制應(yīng)用研究

      2018-09-13 10:47:16孫彬
      科技創(chuàng)新與應(yīng)用 2018年23期
      關(guān)鍵詞:結(jié)構(gòu)體系

      孫彬

      摘 要:在Java應(yīng)用程序運(yùn)行時(shí),Java虛擬機(jī)中的類加載機(jī)制能在不影響其他功能模塊運(yùn)行的情況下動(dòng)態(tài)加載類文件。文章簡(jiǎn)述了Java類加載器的層次體系結(jié)構(gòu)以及動(dòng)態(tài)加載機(jī)制原理,并結(jié)合具體的例子,將Java動(dòng)態(tài)加載機(jī)制應(yīng)用在高校網(wǎng)站管理平臺(tái)的文件發(fā)布模塊,實(shí)現(xiàn)了系統(tǒng)和靜態(tài)網(wǎng)頁(yè)的關(guān)聯(lián),可快速搭建二級(jí)網(wǎng)站,還能通過自定義加載器能對(duì)加密的字節(jié)碼進(jìn)行解密,得出了Java語(yǔ)言具有強(qiáng)大的靈活性和安全度,能很好的保護(hù)代碼安全。

      關(guān)鍵詞:Java;動(dòng)態(tài)類加載機(jī)制;結(jié)構(gòu)體系

      中圖分類號(hào):TP312 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):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

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

      1 Java類加載器的結(jié)構(gòu)體系

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

      2 Java動(dòng)態(tài)類加載機(jī)制原理

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

      3 Java動(dòng)態(tài)類加載的實(shí)現(xiàn)

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

      Public static Class forName(Sting className)throws ClassNotFoundException

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

      使用第三參數(shù)指定類加載器,與類關(guān)連的Class對(duì)象,第二個(gè)參數(shù)指定表示是否被初始化。

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

      根據(jù)用戶的需要,在實(shí)現(xiàn)動(dòng)態(tài)類加載時(shí),使用forName()方法或是自定義類加載器。forName()方法使用頻率較高,最為直接,使用forName()方法實(shí)現(xiàn)請(qǐng)求類型在加載時(shí)初始化。自定義類加載功能是實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中獲取或者進(jìn)行動(dòng)態(tài)創(chuàng)建,用定制方式轉(zhuǎn)換類型的全限定名轉(zhuǎn)為Java class文件格式字節(jié)數(shù)組,從而進(jìn)行安全防護(hù)。

      4 應(yīng)用例子

      Java類加載器有著非常強(qiáng)大的功能,通過將類進(jìn)行重載的方式達(dá)到程序加載功能實(shí)現(xiàn)。Java類加載器在生活中有著廣泛的應(yīng)用,這里將Java動(dòng)態(tài)類加載機(jī)制應(yīng)用在二級(jí)網(wǎng)站管理系統(tǒng)的文件發(fā)布模塊,加載被加密的Java類文件。在系統(tǒng)需求方面,需搭建網(wǎng)站通用平臺(tái)實(shí)現(xiàn)對(duì)二級(jí)網(wǎng)站的統(tǒng)一管理。通過管理平臺(tái)搭建完畢后,若想建設(shè)二級(jí)網(wǎng)站,只需做好靜態(tài)網(wǎng)頁(yè),在平臺(tái)中分配欄目,個(gè)性化功能需文件發(fā)布模塊,發(fā)布到通用平臺(tái)中。文件發(fā)布模塊能實(shí)現(xiàn)對(duì)二級(jí)網(wǎng)站靜態(tài)頁(yè)面的動(dòng)態(tài)化,使得靜態(tài)網(wǎng)頁(yè)和系統(tǒng)關(guān)聯(lián),增加系統(tǒng)拓展性,降低模塊間的耦合性,對(duì)文件代碼作出加密處理,保障了系統(tǒng)的安全。

      綜上所述,Java動(dòng)態(tài)類加載是Java程序中的重要機(jī)制,文章闡述了Java類加載器的技術(shù)結(jié)構(gòu)體系,闡明了動(dòng)態(tài)加載機(jī)制的原理,看出了Java動(dòng)態(tài)加載機(jī)制技術(shù)性嚴(yán)密,為技術(shù)人員提供了參考。文章最后結(jié)合具體的例子將這樣技術(shù)用在高校網(wǎng)站通用管理平臺(tái)的文件發(fā)布模塊,實(shí)現(xiàn)了二級(jí)網(wǎng)站建設(shè)的拓展,為系統(tǒng)增加了拓展性。已經(jīng)加密的代碼只能通過自定義加載器解密,保證了文件的安全性。

      參考文獻(xiàn):

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

      [2]朱丹丹.芻議Java動(dòng)態(tài)類加載機(jī)制研究與應(yīng)用[J].電子技術(shù)與軟件工程,2016(07):245.

      [3]王智恒.基于動(dòng)態(tài)加載技術(shù)的Android插件化開發(fā)框架研究與實(shí)現(xiàn)[D].云南大學(xué),2016.

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

      [5]崔娜.Java動(dòng)態(tài)類加載機(jī)制研究及運(yùn)用[J].信息與電腦(理論版),2015(24):15-16.

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

      [7]賀蘊(yùn)彬.Java虛擬機(jī)的自適應(yīng)動(dòng)態(tài)優(yōu)化[J].科技創(chuàng)新與應(yīng)用,

      2014(13):70.

      猜你喜歡
      結(jié)構(gòu)體系
      試論物理學(xué)的“知識(shí)的結(jié)構(gòu)體系”
      科技資訊(2017年1期)2017-03-27 00:13:28
      有關(guān)嵌入式微處理器的自行高炮火控監(jiān)測(cè)系統(tǒng)的研究
      卷宗(2016年10期)2017-01-21 15:16:22
      大型混凝土施工模板結(jié)構(gòu)體系控制技術(shù)研究
      不同結(jié)構(gòu)體系高層建筑的綜合經(jīng)濟(jì)效益研究
      商(2016年14期)2016-05-30 10:36:21
      淺議基本權(quán)利之國(guó)家義務(wù)
      法制博覽(2015年12期)2015-12-22 23:44:37
      建筑結(jié)構(gòu)抗震設(shè)計(jì)的基本要求及其設(shè)計(jì)重點(diǎn)探討
      科技視界(2015年27期)2015-10-08 13:09:43
      公安县| 聂荣县| 嘉义市| 遂溪县| 建始县| 洪湖市| 巨野县| 盱眙县| 南和县| 汶川县| 桦南县| 成都市| 昭苏县| 福安市| 张家界市| 白玉县| 吉木乃县| 宝坻区| 汝阳县| 天全县| 都兰县| 张家川| 修水县| 信阳市| 阳江市| 苍溪县| 海丰县| 仁化县| 永城市| 无极县| 襄樊市| 微山县| 鲜城| 高安市| 兴宁市| 洪江市| 讷河市| 广东省| 库伦旗| 元氏县| 澜沧|