Java ClassLoader原理深入講解

          時間:2024-10-19 00:14:48 JAVA認證 我要投稿
          • 相關推薦

          Java ClassLoader原理深入講解

            JAVA啟動后,是經過JVM各級ClassLoader來加載各個類到內存。為了更加了解加載過程,下面為大家深入講解Java ClassLoader原理,僅供參考!

            當JVM(Java虛擬機)啟動時,會形成由三個類加載器組成的初始類加載器層次結構:

            bootstrap classloader

            |

            extension classloader

            |

            system classloader

            bootstrap classloader -引導(也稱為原始)類加載器,它負責加載Java的核心類。在Sun的JVM中,在執行java的命令中使用-Xbootclasspath選項或使用 - D選項指定sun.boot.class.path系統屬性值可以指定附加的類。這個加載器的是非常特殊的,它實際上不是 java.lang.ClassLoader的子類,而是由JVM自身實現的。大家可以通過執行以下代碼來獲得bootstrap classloader加載了那些核心類庫:

            URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs();

            for (int i = 0; i < urls.length; i++) {

            System.out.println(urls.toExternalform());

            }

            在我的計算機上的結果為:

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/dom.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/sax.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/xalan-2.3.1.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/xercesImpl-2.0.0.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/xml-apis.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/endorsed/xsltc.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/rt.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/i18n.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/sunrsasign.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/jsse.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/jce.jar

            文件:/C:/j2sdk1.4.1_01/jre/lib/charsets.jar

            文件:/C:/j2sdk1.4.1_01/jre/classes

            這時大家知道了為什么我們不需要在系統屬性CLASSPATH中指定這些類庫了吧,因為JVM在啟動的時候就自動加載它們了。

            extension classloader -擴展類加載器,它負責加載JRE的擴展目錄(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系統屬性指定的)中JAR的 類包。這為引入除Java核心類以外的新功能提供了一個標準機制。因為默認的擴展目錄對所有從同一個JRE中啟動的JVM都是通用的,所以放入這個目錄的 JAR類包對所有的JVM和system classloader都是可見的。在這個實例上調用方法getParent()總是返回空值null,因為引導加載器bootstrap classloader不是一個真正的ClassLoader實例。所以當大家執行以下代碼時:

            System.out.println(System.getProperty("java.ext.dirs"));

            ClassLoader extensionClassloader=ClassLoader.getSystemClassLoader().getParent();

            System.out.println("the parent of extension classloader : "+extensionClassloader.getParent());

            結果為:

            C:/j2sdk1.4.1_01/jre/lib/ext

            the parent of extension classloader : null

            extension classloader是system classloader的parent,而bootstrap classloader是extension classloader的parent,但它不是一個實際的classloader,所以為null。

            system classloader -系統(也稱為應用)類加載器,它負責在JVM被啟動時,加載來自在命令java中的-classpath或者java.class.path系統屬性或 者 CLASSPATH操作系統屬性所指定的JAR類包和類路徑。總能通過靜態方法ClassLoader.getSystemClassLoader()找 到該類加載器。如果沒有特別指定,則用戶自定義的任何類加載器都將該類加載器作為它的父加載器。執行以下代碼即可獲得:

            System.out.println(System.getProperty("java.class.path"));

            輸出結果則為用戶在系統屬性里面設置的CLASSPATH。

            classloader 加載類用的是全盤負責委托機制。所謂全盤負責,即是當一個classloader加載一個Class的時候,這個Class所依賴的和引用的所有 Class也由這個classloader負責載入,除非是顯式的使用另外一個classloader載入;委托機制則是先讓parent(父)類加載器 (而不是super,它與parent classloader類不是繼承關系)尋找,只有在parent找不到的時候才從自己的類路徑中去尋找。此外類加載還采用了cache機制,也就是如果 cache中保存了這個Class就直接返回它,如果沒有才從文件中讀取和轉換成Class,并存入cache,這就是為什么我們修改了Class但是必 須重新啟動JVM才能生效的原因。

            每個ClassLoader加載Class的過程是:

            1.檢測此Class是否載入過(即在cache中是否有此Class),如果有到8,如果沒有到2

            2.如果parent classloader不存在(沒有parent,那parent一定是bootstrap classloader了),到4

            3.請求parent classloader載入,如果成功到8,不成功到5

            4.請求jvm從bootstrap classloader中載入,如果成功到8

            5.尋找Class文件(從與此classloader相關的類路徑中尋找)。如果找不到則到7.

            6.從文件中載入Class,到8.

            7.拋出ClassNotFoundException.

            8.返回Class.

            其中5.6步我們可以通過覆蓋ClassLoader的findClass方法來實現自己的載入策略。甚至覆蓋loadClass方法來實現自己的載入過程。

            類加載器的順序是:

            先 是bootstrap classloader,然后是extension classloader,最后才是system classloader。大家會發現加載的Class越是重要的越在靠前面。這樣做的原因是出于安全性的考慮,試想如果system classloader“親自”加載了一個具有破壞性的“java.lang.System”類的后果吧。這種委托機制保證了用戶即使具有一個這樣的類, 也把它加入到了類路徑中,但是它永遠不會被載入,因為這個類總是由bootstrap classloader來加載的。大家可以執行一下以下的代碼:

            System.out.println(System.class.getClassLoader());

            將會看到結果是null,這就表明java.lang.System是由bootstrap classloader加載的,因為bootstrap classloader不是一個真正的ClassLoader實例,而是由JVM實現的,正如前面已經說過的。

            下面就讓我們來看看JVM是如何來為我們來建立類加載器的結構的:

            sun.misc.Launcher,顧名思義,當你執行java命令的時候,JVM會先使用bootstrap classloader載入并初始化一個Launcher,執行下來代碼:

            System.out.println("the Launcher's classloader is "+sun.misc.Launcher.getLauncher().getClass().getClassLoader());

            結果為:

            the Launcher's classloader is null (因為是用bootstrap classloader加載,所以class loader為null)

            Launcher 會根據系統和命令設定初始化好class loader結構,JVM就用它來獲得extension classloader和system classloader,并載入所有的需要載入的Class,最后執行java命令指定的帶有靜態的main方法的Class。extension classloader實際上是sun.misc.Launcher$ExtClassLoader類的一個實例,system classloader實際上是sun.misc.Launcher$AppClassLoader類的一個實例。并且都是 java.net.URLClassLoader的子類。

            讓我們來看看Launcher初試化的過程的部分代碼。

            Launcher的部分代碼:

            public class Launcher {

            public Launcher() {

            ExtClassLoader extclassloader;

            try {

            //初始化extension classloader

            extclassloader = ExtClassLoader.getExtClassLoader();

            } catch(IOException ioexception) {

            throw new InternalError("Could not create extension class loader");

            }

            try {

            //初始化system classloader,parent是extension classloader

            loader = AppClassLoader.getAppClassLoader(extclassloader);

            } catch(IOException ioexception1) {

            throw new InternalError("Could not create application class loader");

            }

            //將system classloader設置成當前線程的context classloader(將在后面加以介紹)

            Thread.currentThread().setContextClassLoader(loader);

            ......

            }

            public ClassLoader getClassLoader() {

            //返回system classloader

            return loader;

            }

            }

            extension classloader的部分代碼:

            static class Launcher$ExtClassLoader extends URLClassLoader {

            public static Launcher$ExtClassLoader getExtClassLoader()

            throws IOException

            {

            File afile[] = getExtDirs();

            return (Launcher$ExtClassLoader)AccessController.doPrivileged(new Launcher$1(afile));

            }

            private static File[] getExtDirs() {

            //獲得系統屬性“java.ext.dirs”

            String s = System.getProperty("java.ext.dirs");

            File afile[];

            if(s != null) {

            StringTokenizer stringtokenizer = new StringTokenizer(s, File.pathSeparator);

            int i = stringtokenizer.countTokens();

            afile = new File;

            for(int j = 0; j < i; j++)

            afile[j] = new File(stringtokenizer.nextToken());

            } else {

            afile = new File[0];

            }

            return afile;

            }

            }

            system classloader的部分代碼:

            static class Launcher$AppClassLoader extends URLClassLoader

            {

            public static ClassLoader getAppClassLoader(ClassLoader classloader)

            throws IOException

            {

            //獲得系統屬性“java.class.path”

            String s = System.getProperty("java.class.path");

            File afile[] = s != null ? Launcher.access$200(s) : new File[0];

            return (Launcher$AppClassLoader)AccessController.doPrivileged(new Launcher$2(s, afile, classloader));

            }

            }

            看 了源代碼大家就清楚了吧,extension classloader是使用系統屬性“java.ext.dirs”設置類搜索路徑的,并且沒有parent。system classloader是使用系統屬性“java.class.path”設置類搜索路徑的,并且有一個parent classloader。Launcher初始化extension classloader,system classloader,并將system classloader設置成為context classloader,但是僅僅返回system classloader給JVM。

            這里怎么又出來一個context classloader呢?它有什么用呢?我們在建立一個線程Thread的時候,可以為這個線程通過setContextClassLoader方法來 指定一個合適的classloader作為這個線程的context classloader,當此線程運行的時候,我們可以通過getContextClassLoader方法來獲得此context classloader,就可以用它來載入我們所需要的Class。默認的是system classloader。利用這個特性,我們可以“打破”classloader委托機制了,父classloader可以獲得當前線程的context classloader,而這個context classloader可以是它的子classloader或者其他的classloader,那么父classloader就可以從其獲得所需的 Class,這就打破了只能向父classloader請求的限制了。這個機制可以滿足當我們的classpath是在運行時才確定,并由定制的 classloader加載的時候,由system classloader(即在jvm classpath中)加載的class可以通過context classloader獲得定制的classloader并加載入特定的class(通常是抽象類和接口,定制的classloader中是其實現),例 如web應用中的servlet就是用這種機制加載的.

            好了,現在我們了解了classloader的結構和工作原理,那么我們 如何實現在運行時的動態載入和更新呢?只要我們能夠動態改變類搜索路徑和清除classloader的cache中已經載入的Class就行了,有兩個方 案,一是我們繼承一個classloader,覆蓋loadclass方法,動態的尋找Class文件并使用defineClass方法來;另一個則非常 簡單實用,只要重新使用一個新的類搜索路徑來new一個classloader就行了,這樣即更新了類搜索路徑以便來載入新的Class,也重新生成了一 個空白的cache(當然,類搜索路徑不一定必須更改)。噢,太好了,我們幾乎不用做什么工作,java.netURLClassLoader正是一個符 合我們要求的classloader!我們可以直接使用或者繼承它就可以了!

            這是j2se1.4 API的doc中URLClassLoader的兩個構造器的描述:

            URLClassLoader(URL[] urls)

            Constructs a new URLClassLoader for the specified URLs using the default delegation parent ClassLoader.

            URLClassLoader(URL[] urls, ClassLoader parent)

            Constructs a new URLClassLoader for the given URLs.

            其中URL[] urls就是我們要設置的類搜索路徑,parent就是這個classloader的parent classloader,默認的是system classloader。

            好,現在我們能夠動態的載入Class了,這樣我們就可以利用newInstance方法來獲得一個Object。但我們如何將此Object造型呢?可以將此Object造型成它本身的Class嗎?

            首先讓我們來分析一下java源文件的編譯,運行吧!javac命令是調用“JAVA_HOME/lib/tools.jar”中的“com.sun.tools.javac.Main”的compile方法來編譯:

            public static int compile(String as[]);

            public static int compile(String as[], PrintWriter printwriter);

            返回0表示編譯成功,字符串數組as則是我們用javac命令編譯時的參數,以空格劃分。例如:

            javac -classpath c:/foo/bar.jar;. -d c:/ c:/Some.java

            則 字符串數組as為{"-classpath","c://foo//bar.jar;.","-d","c://","c://Some.java"}, 如果帶有PrintWriter參數,則會把編譯信息出到這個指定的printWriter中。默認的輸出是System.err。

            其中 Main是由JVM使用Launcher初始化的system classloader載入的,根據全盤負責原則,編譯器在解析這個java源文件時所發現的它所依賴和引用的所有Class也將由system classloader載入,如果system classloader不能載入某個Class時,編譯器將拋出一個“cannot resolve symbol”錯誤。

            所以首先編譯就通不過,也就是編譯器無法編譯一個引用了不在CLASSPATH中的未知Class的java源文件,而由于拼寫錯誤或者沒有把所需類庫放到CLASSPATH中,大家一定經常看到這個“cannot resolve symbol”這個編譯錯誤吧!

            其 次,就是我們把這個Class放到編譯路徑中,成功的進行了編譯,然后在運行的時候不把它放入到CLASSPATH中而利用我們自己的 classloader來動態載入這個Class,這時候也會出現“java.lang.NoClassDefFoundError”的違例,為什么呢?

            我 們再來分析一下,首先調用這個造型語句的可執行的Class一定是由JVM使用Launcher初始化的system classloader載入的,根據全盤負責原則,當我們進行造型的時候,JVM也會使用system classloader來嘗試載入這個Class來對實例進行造型,自然在system classloader尋找不到這個Class時就會拋出“java.lang.NoClassDefFoundError”的違例。

            OK, 現在讓我們來總結一下,java文件的編譯和Class的載入執行,都是使用Launcher初始化的system classloader作為類載入器的,我們無法動態的改變system classloader,更無法讓JVM使用我們自己的classloader來替換system classloader,根據全盤負責原則,就限制了編譯和運行時,我們無法直接顯式的使用一個system classloader尋找不到的Class,即我們只能使用Java核心類庫,擴展類庫和CLASSPATH中的類庫中的Class。

            還 不死心!再嘗試一下這種情況,我們把這個Class也放入到CLASSPATH中,讓system classloader能夠識別和載入。然后我們通過自己的classloader來從指定的class文件中載入這個Class(不能夠委托 parent載入,因為這樣會被system classloader從CLASSPATH中將其載入),然后實例化一個Object,并造型成這個Class,這樣JVM也識別這個Class(因為 system classloader能夠定位和載入這個Class從CLASSPATH中),載入的也不是CLASSPATH中的這個Class,而是從 CLASSPATH外動態載入的,這樣總行了吧!十分不幸的是,這時會出現“java.lang.ClassCastException”違例。

            為 什么呢?我們也來分析一下,不錯,我們雖然從CLASSPATH外使用我們自己的classloader動態載入了這個Class,但將它的實例造型的時 候是JVM會使用system classloader來再次載入這個Class,并嘗試將使用我們的自己的classloader載入的Class的一個實例造型為system classloader載入的這個Class(另外的一個)。大家發現什么問題了嗎?也就是我們嘗試將從一個classloader載入的Class的一 個實例造型為另外一個classloader載入的Class,雖然這兩個Class的名字一樣,甚至是從同一個class文件中載入。但不幸的是JVM 卻認為這個兩個Class是不同的,即JVM認為不同的classloader載入的相同的名字的Class(即使是從同一個class文件中載入的)是 不同的!這樣做的原因我想大概也是主要出于安全性考慮,這樣就保證所有的核心Java類都是system classloader載入的,我們無法用自己的classloader載入的相同名字的Class的實例來替換它們的實例。

            看到這里,聰明的讀者一定想到了該如何動態載入我們的Class,實例化,造型并調用了吧!

            那 就是利用面向對象的基本特性之一的多形性。我們把我們動態載入的Class的實例造型成它的一個system classloader所能識別的父類就行了!這是為什么呢?我們還是要再來分析一次。當我們用我們自己的classloader來動態載入這我們只要把 這個Class的時候,發現它有一個父類Class,在載入它之前JVM先會載入這個父類Class,這個父類Class是system classloader所能識別的,根據委托機制,它將由system classloader載入,然后我們的classloader再載入這個Class,創建一個實例,造型為這個父類Class,注意了,造型成這個父類 Class的時候(也就是上溯)是面向對象的java語言所允許的并且JVM也支持的,JVM就使用system classloader再次載入這個父類Class,然后將此實例造型為這個父類Class。大家可以從這個過程發現這個父類Class都是由 system classloader載入的,也就是同一個class loader載入的同一個Class,所以造型的時候不會出現任何異常。而根據多形性,調用這個父類的方法時,真正執行的是這個Class(非父類 Class)的覆蓋了父類方法的方法。這些方法中也可以引用system classloader不能識別的Class,因為根據全盤負責原則,只要載入這個Class的classloader即我們自己定義的 classloader能夠定位和載入這些Class就行了。

            這樣我們就可以事先定義好一組接口或者基類并放入CLASSPATH中,然 后在執行的時候動態的載入實現或者繼承了這些接口或基類的子類。還不明白嗎?讓我們來想一想Servlet吧,web application server能夠載入任何繼承了Servlet的Class并正確的執行它們,不管它實際的Class是什么,就是都把它們實例化成為一個Servlet Class,然后執行Servlet的init,doPost,doGet和destroy等方法的,而不管這個Servlet是從web- inf/lib和web-inf/classes下由system classloader的子classloader(即定制的classloader)動態載入。說了這么多希望大家都明白了。在applet,ejb等 容器中,都是采用了這種機制.

            對于以上各種情況,希望大家實際編寫一些example來實驗一下。

            最后我再說點別的, classloader雖然稱為類加載器,但并不意味著只能用來加載Class,我們還可以利用它也獲得圖片,音頻文件等資源的URL,當然,這些資源必 須在CLASSPATH中的jar類庫中或目錄下。我們來看API的doc中關于ClassLoader的兩個尋找資源和Class的方法描述吧:

            public URL getResource(String name)

            用指定的名字來查找資源,一個資源是一些能夠被class代碼訪問的在某種程度上依賴于代碼位置的數據(圖片,音頻,文本等等)。

            一個資源的名字是以'/'號分隔確定資源的路徑名的。

            這個方法將先請求parent classloader搜索資源,如果沒有parent,則會在內置在虛擬機中的classloader(即bootstrap classloader)的路徑中搜索。如果失敗,這個方法將調用findResource(String)來尋找資源。

            public static URL getSystemResource(String name)

            從用來載入類的搜索路徑中查找一個指定名字的資源。這個方法使用system class loader來定位資源。即相當于ClassLoader.getSystemClassLoader().getResource(name)。

            例如:

            System.out.println(ClassLoader.getSystemResource("java/lang/String.class"));

            的結果為:

            jar:文件:/C:/j2sdk1.4.1_01/jre/lib/rt.jar!/java/lang/String.class

            表明String.class文件在rt.jar的java/lang目錄中。

            因此我們可以將圖片等資源隨同Class一同打包到jar類庫中(當然,也可單獨打包這些資源)并添加它們到class loader的搜索路徑中,我們就可以無需關心這些資源的具體位置,讓class loader來幫我們尋找了!

          【Java ClassLoader原理深入講解】相關文章:

          Java ClassLoader原理詳細分析201603-04

          2016最新java classloader詳解03-04

          小升初奧數知識講解之抽屜原理01-28

          揮桿原理03-23

          導游講解技巧04-08

          office知識講解03-18

          素描知識講解01-10

          JavaScript的課堂講解03-31

          學習Java的技巧03-05

          麻豆成人国产电影传媒一区,日韩精品在线看,久久精品这里,亚洲综合久久1区2区3区,日韩欧美国产中文,国产原创中文字幕,亚洲福利专区,国产一区二区福利,色综合久久中文色婷婷,日本欧美不卡一区二区三区在线
          97精品国产福利一区二区三区 中文无码日韩欧 久久99精品久久久久久野外 欧美日产国产亚洲综合图区一 欧美日韩免费在线视频 在线视频观看一区 国产精品国产三级国产专 91精品国产一区 亚洲另类中文字幕 日本亚洲国产精品久久 伊人久久精品 亚洲国产精品看片在线观看 欧美国产在线视频 国产精品成人自拍 2021久久精品国产99国产 亚洲丁香色婷婷综合欲色啪 久久亚洲不卡一区二区 国产日韩欧美一区二区三区视频 日本福利片国产午夜久久 伊人热久久 国产视频第二页 天天干在线观看 999精品视频 精品在线第一页 亚洲国产夜色在线观看 日韩一区二区三区四区 亚洲伊人久久综合一区二区 久久精品免视看国产成人2021 日本中文字幕一区二区三区不卡 亚洲国产成人在线 久久91精品国产91久 久久久青草青青亚洲国产免观 中文字幕不卡在线播放 欧美日本在线播放 亚洲一区二区免费视频 欧美aa在线观看 日本国产一区二区三区 国产精品视频一区二区亚瑟 亚洲综合免费视频 国产四虎免费精品视频 亚洲视频一二 午夜久久久精品 色吧五月婷婷 亚洲免费观看网站 久久99精品久久久久久青青91 欧美第一区 亚洲男人天堂手机版 国产91久久最新观看地址 亚洲国产日韩成人综合天堂 中文字幕日韩精品在线 香蕉久久a毛片 男人天堂成人 欧美成a人免费观看 青青草国产精品久久 国产成人免费在线观看 亚洲精品美女久久777777 欧美日韩国产综合一区二区三区 在线视频三区 四虎永久在线 国产成人精品日本亚洲专区6 一区二区在线播放视频 久久99久久99 欧美亚洲日本一区 亚洲成a人片在线网站 中文字幕一区二区在线播放 久久久久久久久性潮 91香蕉视频色 九月色婷婷 午夜精品久久久久久中宇 中文有码第一页 色综合久久中文色婷婷 99精品视频在线这里只有 一木道一二三区精品 亚洲国产毛片aaaaa无费看 国产小视频在线播放 久久精品视频8 性做久久久久久久久浪潮 久久黄色精品视频 91在线视频一区 亚洲精品乱码久久久久久蜜桃欧美 在线观看91精品国产不卡免费 国产真实伦在线观看 青青青免费在线视频 精品国产91久久久久久久 国产在线自在拍91精品黑人 中文字幕精品乱码亚洲一区 亚洲高清在线视频 精品久久久久久久久免费影院 国产精品久久成人影院 中文综合网 国产不卡精品一区二区三区 www.youjizz.com在线观看 日韩精品在线一区 亚洲一区自拍 欧美日韩一区不卡 国产欧美亚洲精品第3页在线 色综合久久久久综合99 成人欧美精品一区二区不卡 亚洲色图视频在线 亚洲涩涩精品专区 欧美日韩亚洲一区二区 www91在线观看 国产成人久久精品一区二区三区 国产色产综合色产在线观看视频 国产成人鲁鲁免费视频a 欧美性猛交99久久久久99 久青草国产免费观看 日本中文字幕一区二区三区不卡 国产日韩欧美一区二区 色综合久久久久综合99 日本一区二区三区免费观看 欧美在线aa 另类综合视频 日本免费专区 亚洲日本欧美在线 九月色婷婷 91在线一区二区三区 亚洲精品乱码久久久久久蜜桃欧美 欧美一区二区三区免费高 欧美亚洲国产精品久久 另类专区欧美 久草综合在线观看 伊人精品视频在线 日韩美一区二区 手机看片福利久久 久久精品国产99久久72 99国产小视频 一区二区三区精品国产 亚洲毛片免费观看 欧美一区二区三区视频在线观看 91亚洲精品视频 亚洲欧美在线免费 丁香婷婷综合网 欧美国产成人在线 日韩精品中文乱码在线观看 日韩在线无 亚洲成人综合网站 欧美午夜一区二区福利视频 精品国产91久久久久久久 久久福利一区二区三区 日韩精品中文乱码在线观看 欧美亚洲国产一区二区 国产青草视频在线观看 91精品国产99久久 91在线一区二区三区 欧美日韩精品一区二区三区视频播放 国产成人一区二区三区在线视频 欧美区国产区 久久r热这里有精品视频 亚洲国产日韩成人综合天堂 国产九九精品 99精品影院 亚洲精品在线不卡 婷婷五月在线视频 欧美性猛交99久久久久99 国产精品三级视频 亚洲国产美女精品久久久久 国产在线精品福利一区二区三区 色天天综合 欧美三区在线 国产观看精品一区二区三区 亚洲国产专区 香蕉尹人综合精品 欧美日韩精品一区二区免费看 亚洲伊人久久综合一区二区 亚洲午夜久久久精品影院视色 国产亚洲精品午夜高清影院 日本mv精品中文字幕 国产精品剧情原创麻豆国产 综合久久伊人 国产成人久久精品一区二区三区 中文字幕亚洲综合久久202 国产精品福利网站 国产成人久久精品一区二区三区 999人在线精品播放视频 日本aⅴ在线不卡免费观看 香蕉视频免费在线播放 国产成人综合网在线播放 国产成+人+亚洲+欧美综合 久久国产精品久久久久久久久久 亚洲精品自拍区在线观看 日韩精品免费观看 亚洲欧美高清在线 日本mv精品中文字幕 午夜精品久久久 成人影院午夜久久影院 久久久香蕉 久久婷婷电影网 亚洲国产综合久久精品 国产91精选在线观看麻豆 久久ri精品高清一区二区三区 日韩成人在线网站 午夜香蕉成视频人网站高清版 99re九精品视频在线视频 亚洲视频一区在线播放 亚洲国产麻豆 东方伊人免费在线观看 欧美成人中文字幕 www.精品国产 精品久久精品久久 亚洲欧洲国产精品久久 手机在线视频一区 欧美日韩国产一区二区三区 欧美成人综合 青青青视频精品中文字幕 久久成人精品 久久婷婷电影网 九九在线精品视频播放 欧美精品久久久亚洲 久久一区视频 色婷婷综合网 国产精品美女久久久久网站 欧美极品一区 久久精品国产三级不卡 亚洲综合在线观看一区www 亚洲婷婷丁香 伊人福利视频导航 国产免费a视频 香蕉青草久久成人网 999人在线精品播放视频 欧美日韩中文国产一区 91日本在线精品高清观看 手机国产精品一区二区 久久精品国产亚洲 国产精品亚洲精品日韩电影 欧美日韩亚洲国产一区二区三区 国产青草 亚洲免费天堂 久久91精品国产91久 久草视频在线资源 中文字幕日本久久2019 亚洲伦理一区 欧美精品亚洲精品日韩经典 国产精品视频久久久久 日本一区二区三区欧美在线观看 色综合久久综合网观看 六月婷婷在线 五月天色婷婷综合 日韩亚洲综合精品国产 欧美综合自拍亚洲综合网 亚洲综合在线观看视频 免费国产网站 欧美成人综合 午夜香蕉成视频人网站高清版 伊人久久大香线蕉综合爱婷婷 亚洲日韩精品欧美一区二区 亚洲欧美在线中文字幕不卡 国产在线资源站 亚洲伊人久久综合一区二区 中文字幕日韩精品中文区 日韩成人在线网站 另类免费视频 国产一区二区三区毛片 色综合久久精品中文字幕 精品在线一区二区三区 青青草原综合久久大伊人精品 亚洲免费区 国产精品久久久久久久免费 国产免费a视频 久久精品国产精品亚洲精品 国产精品久久久久久久成人午夜 日韩精品久久久久久久电影 日韩欧美一区二区久久 精品国产中文一级毛片在线看 国产在线拍 亚洲视频在线一区二区三区 亚洲人成网站色在线观看 伊人网综合在线视频 欧美在线一区二区三区不卡 亚洲黄色片在线观看 中文字幕第一页亚洲 亚洲精品乱码久久久久久蜜桃欧美 久久久久亚洲 日本免费一区二区三区视频 国产精品成人自拍 亚洲片在线观看 亚洲欧洲精品久久 亚洲丁香色婷婷综合欲色啪 久久精品国产亚洲a不卡 国内精品久久久久久久亚洲 色精品 国产欧美精品三区 国产欧美精品三区 日本一区二区免费在线 天天干在线观看 国产精品久久久久久免费播放 日韩一区二区三区四区 国产精品一区久久 亚洲一级视频在线观看 亚洲v天堂v手机在线观看 亚洲码在线观看 国产精品成人影院 亚洲福利精品一区二区三区 久久青草影院 欧美国产成人在线 国模极品一区二区三区 日韩福利网 免费人成激情视频在线观看 日韩欧美一区二区三区 精品三级久久久久久久电影 国产精品国产三级国产an 狠狠干中文字幕 精品一久久 日韩中文字幕一区二区不卡 亚洲乱码在线播放 国产亚洲高清不卡在线观看 国产青草视频 中文字幕亚洲综合久久202 亚洲另类中文字幕 久久国内精品 国产成人午夜精品免费视频 国产成人免费高清在线观看 日韩欧美亚洲国产精品字幕久久久 91亚洲成人 99精品国产三级在线观看 亚洲一区色图 午夜视频久久久久一区 伊人成人久久 国产亚洲精品日韩综合网 亚洲综合香蕉 亚洲第一国产 尤物精品在线观看 欧美极品一区 青青青视频精品中文字幕 91久久大香线蕉 日本免费专区 国产高清福利91成人 久草视频福利资源站 久久综合久久综合久久 伊人福利视频导航 国产青草视频在线观看 欧美色欧美亚洲另类二区 久久久久亚洲 91在线精品国产丝袜超清 国产在线一区二区三区四区 国产精品视频久久久久 天天干在线观看 久久精品国产亚洲香蕉 亚洲免费观看网站 日本伊人精品一区二区三区 亚洲一区二区在线播放 亚洲色图视频在线 亚洲成人日韩 在线中文字幕日韩欧美 亚洲成人网在线播放 一二三区免费视频 日韩精品久久久久久久电影 一个色综合久久 亚洲国产精品久久久久666 www亚洲精品 国精视频一区二区视频 国内精品久久久久久久亚洲 91综合久久婷婷久久 日韩精品久久久久久久电影 国产精品视频一区二区亚瑟 亚洲另类色区欧美日韩 久草视频国产 2021久久精品国产99国产 91在线播放国产 久久人人做人人玩人精品 欧美成人精品一区二区三区 久久亚洲不卡一区二区 久久国产精品免费观看 青青草国产免费国产是公开 欧美亚洲h在线一区二区 狠狠五月深爱婷婷网 国产一区亚洲 色婷婷综合久久久久中文 日本欧美亚洲 中文字幕亚洲综合久久202 日本一区二区不卡久久入口 亚洲另类在线欧美制服 国产日韩欧美一区二区三区综合 国产精品久久久久久久成人午夜 四虎精品国产一区二区三区 日韩一区二区三区视频在线观看 亚洲一区视频在线 久久三级国产 亚洲精品中文字幕乱码三区一二 国产亚洲婷婷香蕉久久精品 欧美日韩不卡在线 九九成人免费视频 亚洲一区中文字幕 亚洲区一区 国产精品美乳在线观看 国产一区二区自拍视频 国产福利一区二区在线观看 久久久高清免费视频 日韩中文视频 欧美亚洲h在线一区二区 国产精品自产拍在线观看 国产亚洲高清不卡在线观看 麻豆国产在线不卡一区二区 不卡视频一区二区 中文字幕日韩一区二区 国产在线观看自拍 亚洲视频一区在线 最新国产精品自拍 精品伊人久久大线蕉地址 久爱免费精品视频在线播放 亚洲视频日韩 欧美日韩中文国产一区 亚洲欧洲日本在线观看 欧美日本一本 亚洲欧美v视色一区二区 国产视频第二页 国产成人精品一区二三区 国产成人一区二区三区免费观看 六月婷婷在线 国产精品久久久久999 国产精品成人第一区 欧美日韩国产人成在线观看 欧美一级视频在线 一区二区三区在线免费看 综合网视频 国产成+人+综合+亚洲专 国内精品久久久久久影院8f 中文字幕第一页在线 日韩欧美一区二区三区 亚洲精品国产日韩 午夜手机福利 久久精品国产四虎 丁香婷婷久久大综合 色综合久久中文色婷婷 国产99精品 91中文在线 国产视频精品免费 国产麻豆福利av在线播放 日本亚洲乱码中文字幕影院 亚洲伊人色欲综合网 中文国产成人久久精品小说 久久综合久久综合久久 欧美亚洲国产另类 欧美亚洲国产精品久久 亚洲男人天堂网 欧美成人精品一区二区三区 a男人的天堂久久a毛片 中文字幕日本久久2019 亚洲天堂在线播放 国产成人综合一区人人 亚洲日本欧美综合在线一 韩国美女激情视频一区二区 欧美日韩精品一区二区免费看 激情亚洲综合网 国产精品最新 国产美女91视频 国产一区二区三区在线视频 欧美日韩国产在线人 九九在线精品视频播放 日本免费一区二区三区视频 国产一级不卡毛片 久久精品国产四虎 久久99精品久久久久久青青91 欧美日本一本 欧美精品在线一区二区三区 久久九九久精品国产 精品国产91久久久久久久 夜夜躁日日躁狠狠久久 99热2 国产乱人视频免费播放 久久国产香蕉 午夜欧美精品久久久久久久久 日韩在线综合 久久精品国产三级不卡 99这里精品 欧美亚洲日本一区 欧美日韩国产精品 精品成人一区二区三区免费视频 欧美一区二区自偷自拍视频 国产成人精品亚洲 欧美日韩国产一区二区三区 国产精品一区二 久久亚洲女同第一区 四虎精品国产一区二区三区 国产www在线播放 欧洲精品一区二区 日韩小视频网站 亚洲伊人久久综合一区二区 久久99精品国产 青青色在线视频 国产99精品 亚洲日韩在线视频 久久ri精品高清一区二区三区 久久久中文 亚洲欧洲精品视频 久久国产精品免费网站 国产成人一区二区三区免费观看 亚洲国产精品综合久久20 久久久久四虎国产精品 伊人国产在线 久久精品视频8 亚洲激情中文字幕 国产成人愉拍免费视频 日韩一级不卡 a级片在线观看视频 国产精品久久久久毛片 99久久精品国产国产毛片 国产成人免费高清在线观看 国产91久久最新观看地址 欧美精品在线一区 亚洲天堂h 日本精品一区二区在线播放 欧美精品亚洲精品日韩经典 中文字幕亚洲综合久久202 久久亚洲电影 久久精品国产久精国产80cm 国内精品久久久久久影院8f 日韩欧美一区在线观看 久久亚洲精品成人 欧美中文在线 国产精品麻豆一区二区三区 欧美日韩精品一区二区三区视频播放 91香蕉视频色 亚洲国产欧美日韩精品一区二区三区 国产91精选在线观看麻豆 九九在线精品视频播放 在线五月婷婷 日本在线日本中文字幕日本在线视频播放 国产丝袜一区 久久999 91精品久久久久久久久中文字幕 中文字幕不卡在线高清 香蕉尹人综合精品 国产一区二区三区怡红院 日韩在线一区二区 91精品国产99久久 亚洲国产欧美自拍 久草视频在线资源 国产福利不卡一区二区三区 亚洲乱码在线播放 欧美日韩国产58香蕉在线视频 欧美一级日韩 久久精品美乳 日本精品一区二区在线播放 欧美一区二区三区免费高 亚洲深夜视频 亚洲v天堂v手机在线观看 成人久久精品 韩国欧美日产国产精品 亚洲国产欧洲精品路线久久 国模极品一区二区三区 国产精品自产拍在线观看 成人日韩在线 久热中文 日本精品一区二区在线播放 久久婷五月综合 亚洲欧洲日本在线观看 日韩一区二区久久久久久 六月婷婷导航福利在线 久久99欧美 久久青草免费97线频观 欧美日韩中文字幕在线观看 婷婷黄色网 91系列在线 色亚洲影院 在线观看一区二区三区视频 国产午夜亚洲精品国产 国产一级免费视频 日韩视频在线观看一区二区 中文无码日韩欧 日韩精品在线看 伊人久久精品 91av在线导航 久久久一级 欧美日产国产亚洲综合图区一 精品成人一区二区三区免费视频 国产成人资源 一区二区三区精品国产欧美 欧美日韩高清观看一区二区 亚洲精品在线免费 国产精品一区久久 久久久久综合一本久道 久久精品66 久久综合丁香 欧美久草 亚洲涩涩精品专区 久久中文字幕一区二区三区 欧美精品福利 国产高清在线精品一区二区三区 欧美手机手机在线视频一区 另类免费视频 久久久香蕉 国产三级国产精品 丁香婷婷综合网 亚洲欧洲一二三区 国产在线精品一区二区高清不卡 国产精品久久二区三区色裕 亚洲美女综合网 91精品视频免费在线观看 国内精品久久久久激情影院 精品一区二区久久 亚洲国产精品久久精品怡红院 欧美αv天堂在线视频 中出五十路免费视频 99成人免费视频 国产一级免费视频 国产成人精品久久综合 亚洲欧美日韩综合网导航 午夜国产福利在线观看 91在线视频免费播放 国产亚洲小视频 亚洲欧美日韩另类在线专区 99久久精品久久久久久清纯 欧美国产在线看 亚洲经典在线观看 日本mv精品中文字幕 日韩黄色精品 男人天堂成人 久久精品一区二区三区四区 日韩不卡一区二区三区 日韩亚洲欧美综合一区二区三区 免费日本一区 97成人精品 国产成+人+综合+欧美亚洲 国产91久久最新观看地址 精品免费久久 99久久精品国产国产毛片 国产成人一区二区三区 亚洲男人天堂网 国产精品偷伦视频播放 精品一区二区久久 免费在线观看一区 日本伊人精品一区二区三区 在线日韩欧美 色老99久久九九爱精品69堂 国产成人a 免费在线观看a 福利一区在线 亚洲视频一二 91成人免费在线视频 一区二区午夜 国产精品美女久久福利网站 久久久高清免费视频 亚洲另类中文字幕 亚洲国产欧美自拍 久久午夜视频 四虎在线永久 欧美性猛交99久久久久99 97精品伊人久久久大香线焦 久久综合久久综合久久 国产精品久久久久久久久久久久久久 久久精品这里只有精品 欧美激情在线精品三区 日韩午夜网站 久久永久免费视频 精品一区二区在线观看 成人在线观看国产 成人欧美精品一区二区不卡 日本视频二区 久久久久夜夜夜精品国产 日韩欧美一区二区久久 国产精品偷伦视频播放 亚洲午夜精品久久久久久成年 精品国产区一区二区三区在线观看 成人国产精品免费视频不卡 色妞www精品视频免费看 婷婷综合五月中文字幕欧美 国产精品亚洲综合天堂夜夜 久久精品免费 欧美视频日韩专区午夜 久久久久久久久97 国产精品亚洲片夜色在线 国产精品一页 久久精品国产一区二区小说 久久国产欧美日韩高清专区 久久99免费 久久久久毛片免费观看 亚洲第一页在线 日韩a在线播放 国产免费一区二区 免费在线观看一区 久久se精品动漫一区二区三区 亚洲日韩在线视频 99re在线观看视频 亚洲成aⅴ人片在线观 亚洲v天堂v手机在线观看 国产福利在线导航 国产成人久久精品一区二区三区 手机看片久久高清国产日韩 日本一区二区三区高清福利视频 2021久久精品国产99国产 9久9久女女免费精品视频在线观看 亚洲欧美视频网站 性做久久久久久久久浪潮 久久久精品2019中文字幕2020 日韩国产一区二区 日韩在线一区二区 久久精品国产亚洲a不卡 国产精品成人影院 亚洲日韩在线视频 91福利专区 亚洲综合日韩在线亚洲欧美专区 亚洲综合影院 91精品成人福利在线播放 永久免费精品视频 男人懂得成a人v网站 伊人久久精品 成人国产精品视频 青青在线视频免费 午夜精品久久久久久 欧洲亚洲一区 久久精品屋 国产观看精品一区二区三区 久久99久久99 国产午夜视频在线观看 午夜国产福利在线观看 亚洲免费天堂 久久青草免费97线频观 久久综合丁香 精品动漫中文字幕一区二区三区 国产精品成人第一区 国产精品久久久福利 国产精品久久毛片 日本视频二区 免费一区在线观看 国产亚洲区 色综合久久中文色婷婷 国产成人aa视频在线观看 亚洲欧洲日本在线观看 在线中文字幕 国产福利不卡一区二区三区 日本国产在线观看 国产色产综合色产在线观看视频 国产永久在线观看 亚洲国产日韩在线观频 欧美激情人成日本在线视频 欧美亚洲日本一区 在线亚洲精品国产成人二区 香蕉69精品视频在线观看 中文有码第一页 亚洲免费色 香蕉尹人综合精品 视频一区免费 中文字幕日韩精品在线 欧美高清在线精品一区 亚洲欧洲一二三区 国产高清在线免费 国产调教视频在线观看 最新高清无码专区 久久青青草原热精品 日韩一区国产二区欧美三 免费国产网站 日韩午夜精品 日本一区二区在线免费观看 久久久久久不卡 国产精品久久久久久搜索 国产一区二区三区毛片 国产对白在线播放九色 热99精品 精品一区二区久久 欧美日韩国产成人综合在线影院 欧美日韩国产亚洲一区二区 久久国产精品免费网站 国产高清精品毛片基地 亚洲国产欧美自拍 一区二区午夜 国产精品美女久久福利网站 久久综合影院 亚洲国产精品久久精品怡红院 国产日韩欧美一区二区 四虎影院久久久 亚洲色图国产 日本一区二区三区欧美在线观看 日本中文字幕一区二区三区不卡 成人午夜久久精品 欧美日韩大片在线观看 青青国产精品 久久精品国产精品2020 色五月婷婷成人网 精品一区二区三区在线观看视频 一本久道久久综合婷婷五 国产性tv国产精品 日韩色视频在线观看 青草免费视频 久久久久综合 手机在线视频一区 91在线精品国产丝袜超清 91精品国产99久久 亚洲综合图片人成综合网 欧美日韩不卡在线 尤物精品在线观看 国产欧美日本在线观看 色婷婷亚洲精品综合影院 成人国产精品 久久婷五月综合 欧美视频国产 日本伊人精品一区二区三区 国产成+人+亚洲+欧美综合 在线欧美国产 五月婷婷在线播放 日韩一区二区在线播放 一区二区三区四区免费视频 99精品国产三级在线观看 91成人免费在线视频 一区在线免费 久久精品美乳 久久青草免费97线频观 精品在线第一页 久久午夜视频 久久精品免视看国产成人2021 亚洲成人第一页 色亚洲影院 国产丶欧美丶日韩丶不卡影视 一区二区三区精品国产欧美 久久成人国产 伊人久在线 青草免费视频 中文字幕亚洲无线码在一区 日韩欧美亚洲国产精品字幕久久久 亚洲欧美日韩中文综合在线不卡 国产永久在线观看 国产精品日韩欧美一区二区三区 中文字幕在线视频免费 国产精品视频一区二区亚瑟 国产视频精品久久 国产成+人+亚洲+欧美综合 久久亚洲精品中文字幕三区 999热视频 日本中文字幕一区二区三区不卡 国产午夜亚洲精品国产 日韩欧美不卡 中文字幕亚洲欧美 精品四虎 精品中文字幕乱码一区二区 国产探花一区 日韩在线高清 国产欧美一区二区三区视频在线观看 国产精品久久久久久影视 一区二区精品久久 久久午夜一区二区 国产高清在线精品一区二区三区 99久久精品国产免看国产一区 99精品久久久久久 成人欧美精品一区二区不卡 日本精品二区 91精品国产一区 高清亚洲 国产在线观看一区 国产精品线在线精品国语 中文综合网 亚洲欧美日产综合在线看 久久999 欧美日韩国产一区二区三区 六月婷婷导航福利在线 九月色婷婷 久久精品国产亚洲网站 国产探花一区 日韩中文字幕一区二区不卡 亚洲人免费视频 91热久久免费频精品黑人99 97成人精品 国产欧美久久久精品影院 亚洲视频三区 日韩在线一区二区 五月天婷婷影院 午夜欧美精品久久久久久久久 国产高清看片日韩欧美久久 日韩午夜在线观看 亚洲天堂免费看 日本在线日本中文字幕日本在线视频播放 国内精品久久久久久久亚洲 国产精品黄色片 精品中文字幕乱码一区二区 久热草在线 男人天堂成人 中文有码第一页 日韩色视频在线观看 久久精品国产精品2020 www91在线观看 国产免费三级电影 午夜香蕉成视频人网站高清版 思思久久这里只精品99re66 亚洲网址在线 日本国产在线观看 免费一区二区三区视频导航 欧美日韩中文在线视频 国模极品一区二区三区 国产精品探花千人斩久久 激情综合网五月 久久精品国产一区二区小说 中文字幕第二页在线 不卡中文字幕 亚洲色图国产 色综合久久中文字幕综合网 久久精品资源 91福利国产在线观看香蕉 亚洲成aⅴ人片在线观 久久成年人电影 亚洲精品综合一二三区在线 国产成人在线网址 久久99九九99九九精品 国产一区二区三区毛片 99久久精品久久久久久清纯 精品久久久久久久久免费影院 婷婷中文在线 日韩美一区二区 久久精品视频91 欧美日比视频 中文字幕日韩亚洲 欧区一欧区二欧区三免费 国产成人影院 欧美专区日韩专区 欧美一区二区在线视频 亚洲天堂免费看 成人国产精品一级毛片视频 国产成+人+综合+亚洲专 欧美αv天堂在线视频 一区二区三区亚洲 成人久草 亚洲欧美精品一区天堂久久 免费观看欧美一区二区三区 欧美日韩精品一区二区免费看 国产免费一区二区 福利视频91 夜夜精品视频 日韩高清一区 国产精品成人自拍 国产精品天干天干在线综合 伊人久久精品 国产精品第五页 国产在线观看自拍 国产欧美精品一区aⅴ影院 第一区免费在线观看 亚洲国产夜色在线观看 99精品视频观看 亚洲午夜精品一区二区 国产97色在线中文 国产午夜精品1区2区3福利 国产成人一区二区三区精品久久 国产精品日韩欧美一区二区三区 国产女人久久精品 亚洲伊人久久大香线蕉啊 精品欧美一区视频在线观看 亚洲成人综合网站 在线日韩欧美 国产成人久久精品一区二区三区 日韩在线一区二区 亚洲成人免费 中文字幕在线网址 久久精品国产精品2020 国产一区二区在线视频观看 国产vr一区二区在线观看 久久噜噜久久久精品66 国产午夜精品一区二区三区 国产高清免费午夜在线视频 日韩欧美国产中文 久久精品国产三级不卡 欧美国产在线视频 亚洲欧美中文日韩在线 中文字幕第一页在线 欧美亚洲天堂 激情综合网五月 97精品国产福利一区二区三区 999人在线精品播放视频 亚洲人成电影网站国产精品 99视频精品全部在线播放 国产剧情精品在线 亚洲成人免费 婷婷五月在线视频 狠狠干中文字幕 欧区一欧区二欧区三免费 亚洲人免费视频 欧美国产在线看 亚洲综合图片人成综合网 国产成人精品三级在线 日本不卡视频一区二区 成人a一级毛片免费看 日韩不卡在线播放 欧美国产激情二区三区 久久99久久99 成人精品视频一区二区三区尤物 亚洲成人三级 日韩精品第1页 欧美日韩亚洲一区二区 亚洲欧美日韩国产vr在线观 精品免费国产一区二区三区 国产伦精品一区二区三区免费观看 亚洲人成网国产最新在线 久久精品免视看国产成人2021 中文字幕在线乱码免费毛片 久久久福利视频 四虎国产精品永久在线播放 国产欧美亚洲精品第3页在线 亚洲精品www 亚洲综合婷婷 精品久久久久久综合网 久久精品屋 日本亚洲一区二区 国产网站精品 日本免费二区三区久久 久草视频在线资源 欧美亚洲国产日韩综合在线播放 国产精品久久久久久搜索 毛片免费视频网站 欧美在线精品永久免费播放 午夜毛片免费看 国产成人亚洲欧美三区综合 国产四虎免费精品视频 一本综合久久国产二区 亚洲一区欧美