欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
ClassLoader介紹
JVM在運行時(shí)會(huì )產(chǎn)生三個(gè)ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.其中,Bootstrap是用C++編寫(xiě)的,我們在Java中看不到它,是null。它用來(lái)加載核心類(lèi)庫,在JVM源代碼中這樣寫(xiě)道:
  static const char classpathFormat[] =
  "%/lib/rt.jar:"
  "%/lib/i18n.jar:"
  "%/lib/sunrsasign.jar:"
  "%/lib/jsse.jar:"
  "%/lib/jce.jar:"
  "%/lib/charsets.jar:"
  "%/classes";
  知道為什么不需要在classpath中加載這些類(lèi)了吧?人家在JVM啟動(dòng)的時(shí)候就自動(dòng)加載了,并且在運行過(guò)程中根本不能修改Bootstrap加載路徑。
  Extension ClassLoader用來(lái)加載擴展類(lèi),即/lib/ext中的類(lèi)。
  最后AppClassLoader才是加載Classpath的。
  ClassLoader加載類(lèi)用的是委托模型。即先讓Parent類(lèi)(而不是Super,不是繼承關(guān)系)尋找,Parent找不到才自己找??磥?lái)ClassLoader還是蠻孝順的。三者的關(guān)系為:AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent為Bootstrap ClassLoader。加載一個(gè)類(lèi)時(shí),首先BootStrap先進(jìn)行尋找,找不到再由ExtClassLoader尋找,最后才是AppClassLoader。
  為什么要設計的這么復雜呢?其中一個(gè)重要原因就是安全性。比如在A(yíng)pplet中,如果編寫(xiě)了一個(gè)java.lang.String類(lèi)并具有破壞性。假如不采用這種委托機制,就會(huì )將這個(gè)具有破壞性的String加載到了用戶(hù)機器上,導致破壞用戶(hù)安全。但采用這種委托機制則不會(huì )出現這種情況。因為要加載java.lang.String類(lèi)時(shí),系統最終會(huì )由Bootstrap進(jìn)行加載,這個(gè)具有破壞性的String永遠沒(méi)有機會(huì )加載。 bitsCN.nET*中國網(wǎng)管博客
  我們來(lái)看這段代碼:
  [code]//A.java
  public class A{
  public static void main(String[] args){
  A a=new A();
  System.out.println(System.getProperty("java.ext.dirs"));
  System.out.println(a.getClass().getClassLoader());
  B b=new B();
  b.print();
  }
  }
  //B.java
  public class B{
  public void print(){
  System.out.println(this.getClass().getClassLoader());
  }
  }[/code]
  
  1、我們將它放在Classpath中,則打印出
  sun.misc.Launcher$AppClassLoader@92e78c
  sun.misc.Launcher$AppClassLoader@92e78c
  可見(jiàn)都是由AppClassLoader來(lái)加載的。
  2、我們將其放在%jre%/lib/ext/classes(即ExtClassLoader的加載目錄。其加載/lib/ext中的jar文件或者子目錄classes中的class文件)中。則會(huì )打印出:
  sun.misc.Launcher$ExtClassLoader
  sun.misc.Launcher$ExtClassLoader
  3、我們將A.class放到%jre%/lib/ext/classes中,而將B.class放到classpaht中又會(huì )怎么樣呢?結果是:
  sun.misc.Launcher$ExtClassLoader
  Exception in thread "main" java.lang.NoClassDefFoundError:B [bitsCN_com]
  at A.main(A.java:6)
  
  怎么會(huì )這樣呢?這其中有一個(gè)重要的問(wèn)題:A類(lèi)當然是由ExtClassLoader來(lái)加載的,B類(lèi)要由哪個(gè)加載呢?B類(lèi)要由調用它自己的類(lèi)的類(lèi)加載器(真拗口)。也就是說(shuō),A調用了B,所以B由A的類(lèi)加載器ExtClassLoader來(lái)加載。ExtClassLoader根據委托機制,先拜托Bootstrap加載,Bootstrap沒(méi)有找到。然后它再自己尋找B類(lèi),還是沒(méi)找到,所以?huà)伋霎惓?。ExtClassLoader不會(huì )請求AppClassLoader來(lái)加載!你可能會(huì )想:這算什么問(wèn)題,我把兩個(gè)類(lèi)放到一起不就行了?
  
  呵呵,沒(méi)這么簡(jiǎn)單。比如JDBC是核心類(lèi)庫,而各個(gè)數據庫的JDBC驅動(dòng)則是擴展類(lèi)庫或在classpath中定義的。所以JDBC由Bootstrap ClassLoader加載,而驅動(dòng)要由AppClassLoader加載。等等,問(wèn)題來(lái)了,Bootstrap不會(huì )請求AppClassLoader加載類(lèi)啊。那么,他們怎么實(shí)現的呢?我就涉及到一個(gè)Context ClassLoader的問(wèn)題,調用Thread.getContextClassLoader。
本文來(lái)自: 中國網(wǎng)管聯(lián)盟(bitsCN.com) 詳細出處參考:http://www.bitscn.com/java/other/200605/23751.html
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
類(lèi)加載器機器委托機制的深入
一看你就懂,Java中的ClassLoader詳解
Java ClassLoader基礎知識(網(wǎng)上內容整理后所得)
一個(gè)Java程序的執行過(guò)程
Classloader總結
classLoader動(dòng)態(tài)加載
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久