1. 程式人生 > >Android ClassLoader

Android ClassLoader

這樣的 實現 load 重復加載 自己 內存 邏輯 alt 添加

ClassLoader負責把類從磁盤加載進內存,交給虛擬機處理。

標準Java虛擬機的ClassLoader體系結構如下(都是抽象類ClassLoader的子類)

技術分享

ClassLoader使用雙親委派機制,加載一個類,先看上邊一系列父類有沒有加載,如果沒有的話父類再傳給下邊的一系列子類讓其自己加載。這樣的好處是防止重復加載,父類加載一次,所有繼承他的子類就都算加載了,並且安全性好,防止子類加載的類破壞父類已經加載的類。

技術分享

這個算法邏輯是在loadClass方法裏實現的,子類如果想添加自己的加載規則,不要覆蓋這個類,而是覆寫findClass,loadClass方法會在找不到類的使用調用子類的這個方法來加載

Android裏是從jar和odex,oat文件裏加載類,對此定制了自己的ClassLoader體系,把虛擬機裏的C++ bootstrap classloader放進了ClassLoader文件裏,成為BootClassLoader,並添加了PathClassLoader(下邊的圖說的不準,未安裝apk的dex也可以加載)和DexClassLoader,如下圖

技術分享

下面先看ClassLoader文件

Android ClassLoader