国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

如何動(dòng)態(tài)編譯Java源文件

轉(zhuǎn)帖|其它|編輯:郝浩|2011-02-01 09:46:11.000|閱讀 1857 次

概述:Java字節(jié)代碼不僅可以以文件形式存在于磁盤上,也可以通過網(wǎng)絡(luò)方式來下載,還可以只存在于內(nèi)存中。JVM中的類加載器會(huì)負(fù)責(zé)從包含字節(jié)代碼的字節(jié)數(shù)組(byte[])中定義出Java類。在某些情況下,可能會(huì)需要?jiǎng)討B(tài)的生成 Java字節(jié)代碼,或是對(duì)已有的Java字節(jié)代碼進(jìn)行修改。這個(gè)時(shí)候就需要用到本文中將要介紹的相關(guān)技術(shù)。首先介紹一下如何動(dòng)態(tài)編譯Java源文件。

# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

  Java作為業(yè)界應(yīng)用最為廣泛的語言之一,深得眾多軟件廠商和開發(fā)者的推崇,更是被包括Oracle在內(nèi)的眾多JCP成員積極地推動(dòng)發(fā)展。但是對(duì)于Java語言的深度理解和運(yùn)用,畢竟是很少會(huì)有人涉及的話題。InfoQ中文站特地邀請(qǐng)IBM高級(jí)工程師成富為大家撰寫這個(gè)《Java深度歷險(xiǎn)》專欄,旨在就Java的一些深度和高級(jí)特性分享他的經(jīng)驗(yàn)。

  在一般的Java應(yīng)用開發(fā)過程中,開發(fā)人員使用Java的方式比較簡單。打開慣用的IDE,編寫Java源代碼,再利用IDE提供的功能直接運(yùn)行 Java 程序就可以了。這種開發(fā)模式背后的過程是:開發(fā)人員編寫的是Java源代碼文件(.java),IDE會(huì)負(fù)責(zé)調(diào)用Java的編譯器把Java源代碼編譯成平臺(tái)無關(guān)的字節(jié)代碼(byte code),以類文件的形式保存在磁盤上(.class)。Java虛擬機(jī)(JVM)會(huì)負(fù)責(zé)把Java字節(jié)代碼加載并執(zhí)行。Java通過這種方式來實(shí)現(xiàn)其 “編寫一次,到處運(yùn)行(Write once, run anywhere)” 的目標(biāo)。Java類文件中包含的字節(jié)代碼可以被不同平臺(tái)上的JVM所使用。Java字節(jié)代碼不僅可以以文件形式存在于磁盤上,也可以通過網(wǎng)絡(luò)方式來下載,還可以只存在于內(nèi)存中。JVM中的類加載器會(huì)負(fù)責(zé)從包含字節(jié)代碼的字節(jié)數(shù)組(byte[])中定義出Java類。在某些情況下,可能會(huì)需要?jiǎng)討B(tài)的生成 Java字節(jié)代碼,或是對(duì)已有的Java字節(jié)代碼進(jìn)行修改。這個(gè)時(shí)候就需要用到本文中將要介紹的相關(guān)技術(shù)。首先介紹一下如何動(dòng)態(tài)編譯Java源文件。

  動(dòng)態(tài)編譯Java源文件

  在一般情況下,開發(fā)人員都是在程序運(yùn)行之前就編寫完成了全部的Java源代碼并且成功編譯。對(duì)有些應(yīng)用來說,Java源代碼的內(nèi)容在運(yùn)行時(shí)刻才能確定。這個(gè)時(shí)候就需要?jiǎng)討B(tài)編譯源代碼來生成Java字節(jié)代碼,再由JVM來加載執(zhí)行。典型的場景是很多算法競賽的在線評(píng)測系統(tǒng)(如PKU JudgeOnline),允許用戶上傳Java代碼,由系統(tǒng)在后臺(tái)編譯、運(yùn)行并進(jìn)行判定。在動(dòng)態(tài)編譯Java源文件時(shí),使用的做法是直接在程序中調(diào)用Java編譯器。

 JSR 199引入了Java編譯器API。如果使用JDK 6的話,可以通過此API來動(dòng)態(tài)編譯Java代碼。比如下面的代碼用來動(dòng)態(tài)編譯最簡單的Hello World類。該Java類的代碼是保存在一個(gè)字符串中的。

   public class CompilerTest { 
    public static void main(String[] args) throws Exception {    
    String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }"; 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); 
    StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source); 
    Iterable< extends JavaFileObject> fileObjects = Arrays.asList(sourceObject); 
    CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects); 
    boolean result = task.call(); 
    if (result) { 
      System.out.println("編譯成功。"); 
    } 
   } 
 
   static class StringSourceJavaObject extends SimpleJavaFileObject { 
 
    private String content = null; 
    public StringSourceJavaObject(String name, String content) ??throws URISyntaxException { 
      super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE); 
      this.content = content; 
    } 
 
    public CharSequence getCharContent(boolean ignoreEncodingErrors) ??throws IOException { 
      return content; 
    } 
   } 
} 

 如果不能使用JDK 6提供的Java編譯器API的話,可以使用JDK中的工具類com.sun.tools.javac.Main,不過該工具類只能編譯存放在磁盤上的文件,類似于直接使用javac命令。

  另外一個(gè)可用的工具是Eclipse JDT Core提供的編譯器。這是Eclipse Java開發(fā)環(huán)境使用的增量式Java編譯器,支持運(yùn)行和調(diào)試有錯(cuò)誤的代碼。該編譯器也可以單獨(dú)使用。Play框架在內(nèi)部使用了JDT的編譯器來動(dòng)態(tài)編譯Java源代碼。在開發(fā)模式下,Play框架會(huì)定期掃描項(xiàng)目中的Java源代碼文件,一旦發(fā)現(xiàn)有修改,會(huì)自動(dòng)編譯 Java源代碼。因此在修改代碼之后,刷新頁面就可以看到變化。使用這些動(dòng)態(tài)編譯的方式的時(shí)候,需要確保JDK中的tools.jar在應(yīng)用的 CLASSPATH中。

  下面介紹一個(gè)例子,是關(guān)于如何在Java里面做四則運(yùn)算,比如求出來(3+4)*7-10的值。一般的做法是分析輸入的運(yùn)算表達(dá)式,自己來模擬計(jì)算過程。考慮到括號(hào)的存在和運(yùn)算符的優(yōu)先級(jí)等問題,這樣的計(jì)算過程會(huì)比較復(fù)雜,而且容易出錯(cuò)。另外一種做法是可以用JSR 223引入的腳本語言支持,直接把輸入的表達(dá)式當(dāng)做JavaScript或是JavaFX腳本來執(zhí)行,得到結(jié)果。下面的代碼使用的做法是動(dòng)態(tài)生成Java源代碼并編譯,接著加載Java類來執(zhí)行并獲取結(jié)果。這種做法完全使用Java來實(shí)現(xiàn)。

  private static double calculate(String expr) throws CalculationException  { 
   String className = "CalculatorMain"; 
   String methodName = "calculate"; 
   String source = "public class " + className 
    + " { public static double " + methodName + "() { return " + expr + "; } }"; 
   //省略動(dòng)態(tài)編譯Java源代碼的相關(guān)代碼,參見上一節(jié) 
   boolean result = task.call(); 
   if (result) { 
    ClassLoader loader = Calculator.class.getClassLoader(); 
    try {       
      Class<?> clazz = loader.loadClass(className); 
      Method method = clazz.getMethod(methodName, new Class<?>[] {}); 
      Object value = method.invoke(null, new Object[] {}); 
      return (Double) value; 
    } catch (Exception e) { 
      throw new CalculationException("內(nèi)部錯(cuò)誤。");     
    }   
   } else { 
    throw new CalculationException("錯(cuò)誤的表達(dá)式。");   
   } 
} 

  上面的代碼給出了使用動(dòng)態(tài)生成的Java字節(jié)代碼的基本模式,即通過類加載器來加載字節(jié)代碼,創(chuàng)建Java類的對(duì)象的實(shí)例,再通過Java反射API來調(diào)用對(duì)象中的方法。

  Java字節(jié)代碼增強(qiáng)

  Java 字節(jié)代碼增強(qiáng)指的是在Java字節(jié)代碼生成之后,對(duì)其進(jìn)行修改,增強(qiáng)其功能。這種做法相當(dāng)于對(duì)應(yīng)用程序的二進(jìn)制文件進(jìn)行修改。在很多Java框架中都可以見到這種實(shí)現(xiàn)方式。Java字節(jié)代碼增強(qiáng)通常與Java源文件中的注解(annotation)一塊使用。注解在Java源代碼中聲明了需要增強(qiáng)的行為及相關(guān)的元數(shù)據(jù),由框架在運(yùn)行時(shí)刻完成對(duì)字節(jié)代碼的增強(qiáng)。Java字節(jié)代碼增強(qiáng)應(yīng)用的場景比較多,一般都集中在減少冗余代碼和對(duì)開發(fā)人員屏蔽底層的實(shí)現(xiàn)細(xì)節(jié)上。用過JavaBeans的人可能對(duì)其中那些必須添加的getter/setter方法感到很繁瑣,并且難以維護(hù)。而通過字節(jié)代碼增強(qiáng),開發(fā)人員只需要聲明Bean中的屬性即可,getter/setter方法可以通過修改字節(jié)代碼來自動(dòng)添加。用過JPA的人,在調(diào)試程序的時(shí)候,會(huì)發(fā)現(xiàn)實(shí)體類中被添加了一些額外的 域和方法。這些域和方法是在運(yùn)行時(shí)刻由JPA的實(shí)現(xiàn)動(dòng)態(tài)添加的。字節(jié)代碼增強(qiáng)在面向方面編程(AOP)的一些實(shí)現(xiàn)中也有使用。

  在討論如何進(jìn)行字節(jié)代碼增強(qiáng)之前,首先介紹一下表示一個(gè)Java類或接口的字節(jié)代碼的組織形式。

  類文件 { 
   0xCAFEBABE,小版本號(hào),大版本號(hào),常量池大小,常量池?cái)?shù)組, 
   訪問控制標(biāo)記,當(dāng)前類信息,父類信息,實(shí)現(xiàn)的接口個(gè)數(shù),實(shí)現(xiàn)的接口信息數(shù)組,域個(gè)數(shù), 
   域信息數(shù)組,方法個(gè)數(shù),方法信息數(shù)組,屬性個(gè)數(shù),屬性信息數(shù)組 
}

  如上所示,一個(gè)類或接口的字節(jié)代碼使用的是一種松散的組織結(jié)構(gòu),其中所包含的內(nèi)容依次排列。對(duì)于可能包含多個(gè)條目的內(nèi)容,如所實(shí)現(xiàn)的接口、域、方法和屬性等,是以數(shù)組來表示的。而在數(shù)組之前的是該數(shù)組中條目的個(gè)數(shù)。不同的內(nèi)容類型,有其不同的內(nèi)部結(jié)構(gòu)。對(duì)于開發(fā)人員來說,直接操縱包含字節(jié)代碼的字節(jié)數(shù)組的話,開發(fā)效率比較低,而且容易出錯(cuò)。已經(jīng)有不少的開源庫可以對(duì)字節(jié)代碼進(jìn)行修改或是從頭開始創(chuàng)建新的Java類的字節(jié)代碼內(nèi)容。這些類庫包括ASM、cglib、serp和BCEL等。使用這些類庫可以在一定程度上降低增強(qiáng)字節(jié)代碼的復(fù)雜度。比如考慮下面一個(gè)簡單的需求,在一個(gè)Java類的所有方法執(zhí)行之前輸出相應(yīng)的日志。熟悉AOP的人都知道,可以用一個(gè)前增強(qiáng)(before advice)來解決這個(gè)問題。如果使用ASM的話,相關(guān)的代碼如下:

ClassReader cr = new ClassReader(is); 
ClassNode cn = new ClassNode(); 
cr.accept(cn, 0); 
for (Object object : cn.methods) {   
   MethodNode mn = (MethodNode) object;  
   if ("<init>".equals(mn.name) || "<clinit>".equals(mn.name)) {     
    continue;   
   }   
   InsnList insns = mn.instructions;   
   InsnList il = new InsnList();  
   il.add(new FieldInsnNode(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"));   
   il.add(new LdcInsnNode("Enter method -> " + mn.name));  
   il.add(new MethodInsnNode(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"));   
   insns.insert(il);  mn.maxStack += 3; 
} 
ClassWriter cw = new ClassWriter(0); 
cn.accept(cw); 
byte[] b = cw.toByteArray();

  從ClassWriter就可以獲取到包含增強(qiáng)之后的字節(jié)代碼的字節(jié)數(shù)組,可以把字節(jié)代碼寫回磁盤或是由類加載器直接使用。上述示例中,增強(qiáng)部分的邏輯比較簡單,只是遍歷Java類中的所有方法并添加對(duì)System.out.println方法的調(diào)用。在字節(jié)代碼中,Java方法體是由一系列的指令組成的。而要做的是生成調(diào)用 System.out.println方法的指令,并把這些指令插入到指令集合的最前面。ASM對(duì)這些指令做了抽象,不過熟悉全部的指令比較困難。ASM 提供了一個(gè)工具類ASMifierClassVisitor,可以打印出Java類的字節(jié)代碼的結(jié)構(gòu)信息。當(dāng)需要增強(qiáng)某個(gè)類的時(shí)候,可以先在源代碼上做出修改,再通過此工具類來比較修改前后的字節(jié)代碼的差異,從而確定該如何編寫增強(qiáng)的代碼。

  對(duì)類文件進(jìn)行增強(qiáng)的時(shí)機(jī)是需要在Java源代碼編譯之后,在JVM執(zhí)行之前。比較常見的做法有:

  由IDE在完成編譯操作之后執(zhí)行。如Google App Engine的Eclipse插件會(huì)在編譯之后運(yùn)行DataNucleus來對(duì)實(shí)體類進(jìn)行增強(qiáng)。

  在構(gòu)建過程中完成,比如通過Ant或Maven來執(zhí)行相關(guān)的操作。

  實(shí)現(xiàn)自己的Java類加載器。當(dāng)獲取到Java類的字節(jié)代碼之后,先進(jìn)行增強(qiáng)處理,再從修改過的字節(jié)代碼中定義出Java類。

  通過JDK 5引入的java.lang.instrument包來完成。

  java.lang.instrument

  由于存在著大量對(duì)Java字節(jié)代碼進(jìn)行修改的需求,JDK 5引入了java.lang.instrument包并在JDK 6中得到了進(jìn)一步的增強(qiáng)。基本的思路是在JVM啟動(dòng)的時(shí)候添加一些代理(agent)。每個(gè)代理是一個(gè)jar包,其清單(manifest)文件中會(huì)指定一個(gè)代理類。這個(gè)類會(huì)包含一個(gè)premain方法。JVM在啟動(dòng)的時(shí)候會(huì)首先執(zhí)行代理類的premain方法,再執(zhí)行Java程序本身的main方法。在 premain方法中就可以對(duì)程序本身的字節(jié)代碼進(jìn)行修改。JDK 6中還允許在JVM啟動(dòng)之后動(dòng)態(tài)添加代理。java.lang.instrument包支持兩種修改的場景,一種是重定義一個(gè)Java類,即完全替換一個(gè) Java類的字節(jié)代碼;另外一種是轉(zhuǎn)換已有的Java類,相當(dāng)于前面提到的類字節(jié)代碼增強(qiáng)。還是以前面提到的輸出方法執(zhí)行日志的場景為例,首先需要實(shí)現(xiàn)java.lang.instrument.ClassFileTransformer接口來完成對(duì)已有Java類的轉(zhuǎn)換。

  static class MethodEntryTransformer implements ClassFileTransformer { 
   public byte[] transform(ClassLoader loader, String className, 
    Class<?> classBeingRedefined, ?ProtectionDomain protectionDomain, byte[] classfileBuffer) 
    throws  IllegalClassFormatException { 
     try { 
       ClassReader cr = new ClassReader(classfileBuffer); 
       ClassNode cn = new ClassNode();       
       //省略使用ASM進(jìn)行字節(jié)代碼轉(zhuǎn)換的代碼       
       ClassWriter cw = new ClassWriter(0); 
       cn.accept(cw); 
       return cw.toByteArray();    
     } catch (Exception e){       
       return null; 
     } 
   } 
} 

有了這個(gè)轉(zhuǎn)換類之后,就可以在代理的premain方法中使用它。

  public static void premain(String args, Instrumentation inst) {   
   inst.addTransformer(new MethodEntryTransformer()); 
}
 

  把該代理類打成一個(gè)jar包,并在jar包的清單文件中通過Premain-Class聲明代理類的名稱。運(yùn)行Java程序的時(shí)候,添加JVM啟動(dòng)參數(shù)-javaagent:myagent.jar。這樣的話,JVM會(huì)在加載Java類的字節(jié)代碼之前,完成相關(guān)的轉(zhuǎn)換操作。

  總結(jié)

  操縱Java字節(jié)代碼是一件很有趣的事情。通過它,可以很容易的對(duì)二進(jìn)制分發(fā)的Java程序進(jìn)行修改,非常適合于性能分析、調(diào)試跟蹤和日志記錄等任務(wù)。另外一個(gè)非常重要的作用是把開發(fā)人員從繁瑣的Java語法中解放出來。開發(fā)人員應(yīng)該只需要負(fù)責(zé)編寫與業(yè)務(wù)邏輯相關(guān)的重要代碼。對(duì)于那些只是因?yàn)檎Z法要求而添加的,或是模式固定的代碼,完全可以將其字節(jié)代碼動(dòng)態(tài)生成出來。字節(jié)代碼增強(qiáng)和源代碼生成是不同的概念。源代碼生成之后,就已經(jīng)成為了程序的一部分,開發(fā)人員需要去維護(hù)它:要么手工修改生成出來的源代碼,要么重新生成。而字節(jié)代碼的增強(qiáng)過程,對(duì)于開發(fā)人員是完全透明的。妥善使用Java字節(jié)代碼的操縱技術(shù),可以更好的解決某一類開發(fā)問題。



 



 


 


 


標(biāo)簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn

文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載

為你推薦

  • 推薦視頻
  • 推薦活動(dòng)
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
无码国产精品一区二区免费式芒果 | 激情五月色综合国产精品 | 麻豆国产91在线播放 | 久久99九九 | 国产一级a在线观看免费蜜桃视频 | 精品视频无码一区二区三区 | 波多野结衣| 亚洲精品无播放 | 国产不卡无码高清毛片一区二区三 | 午夜欧美性视频 | 熟妇女人妻丰满少妇中文字幕 | 特级黄绝一级在线观看不卡 | 亚洲无码成人最 | 高潮国产精品一区二区喷水 | 国产精品视频网 | 国产亚洲欧美一区 | 亚洲精品中文字幕无码久久久久久 | 国产精品一区二区久久不卡 | 91综合精品网站久久 | 麻豆av在线播放免费网站 | 亚洲丰满熟女一区二区v | 一区二区不卡不卡 | 国产精品无码专区 | 国产伦子沙发午休系列资源曝 | 91精品全国免费观看含羞草 | 国产不卡在 | 国产美女在线观看 | 国产真人无遮挡作爱免费视频 | 91精品欧美综合在线野草社区 | 91黑料精品国产 | 在线观看日韩欧美 | 国产普通话刺激视频 | 亚洲av无码一区二区三区人 | 国产一级二级在线观看 | 无码任你躁久久久久久老妇 | 国产精品无码一区二区三区 | 丰满气质白嫩少妇呻吟高潮 | 亚洲国产小视频 | 欧美高清视频www夜色资源网 | 国产亚洲人成在线v网站 | 99在线精品视频免费 | 国产在线观看91精品2025 | 人人干人人操导航 | 国产一二中文字幕91影院日韩 | 99免费精品| 日韩极品成年人在线观看高清 | 97亚洲熟妇自 | 欧美日韩在线在线观看 | 国产精品国产免费无码专区不卡 | 亚洲精品ty久久久久久久久久 | 狠狠躁夜夜躁人人爽天天开心 | 国产在线观看91精品腿张开 | 天天躁日日躁狠狠躁欧美老妇小 | 深夜国产一区二区三区在线看 | 国产免费一区二区三区最新 | 色噜噜狠狠狠狠色综合久一 | 国产日韩欧美视频在线 | 国产一区二区在线 | 亚洲中文字幕久久精品无码app | 欧美精品网站一区二区三区 | 无码一区国产欧美视频 | 极品少妇小泬50pthepon | 女自慰喷水免费观看www久久 | 日本a级精品一区二区三区 日本a片把舌头伸进 | 羞羞影院午夜男女爽爽 | 亚洲一区在线免费 | 人妻一区二区三区巨免费 | 精品综合久久久久久久 | 午夜看片在线观看 | 97久久精品人人做人人爽 | 中文字幕av日韩精品一区二区 | 欧美成人一区二区三区 | 午夜精品久久久久久久无码软件 | 亚洲精品无码高潮喷水在线 | 精品国产三级a在线观看 | 国产精品蜜桃在线观看 | 欧美日韩国产一级久久忘忧草 | 日韩精品无码一区二区三区视频 | 亚洲欧美国产另类va在线观看 | 3d动漫| 成仁影视| 欧美日韩人妻精品系列一区二区三区 | 亚洲大片精品永久免费看网站 | 99精品国产兔费观看久久 | 欧美一区二区三区四区国产另类 | 亚洲国产日韩精品在线观看色欲视 | 91无人区乱码一二三四的原因是什么 | 日韩精品一区二区三区费暖暖 | 亚洲成a∧人片在 | 国产高清在线视频伊甸园 | av老司机亚洲精品天堂 | 丰满少妇a极毛片视频 | 精品国产在天天在线 | 亚洲日韩av无码 | 97超级碰碰碰碰久久久久 | 国产麻豆91欧美一区二区 | 91色老久久精品偷偷蜜臀 | 精品国产成人三级在线观看 | 99视频精品全部免费免费观 | 国产农村| 国产午夜小视频 | 自拍少妇精品无码 | 亚洲乱色伦图片区小说 | 99久热这里有精品免费 | 天美果冻星空大象视频 | 日本一本免费一区二区三区免 | 日韩精品无码视频免费专区 | 色综合久久一区二 | 色情a片| 日韩欧美一本书道一区二区 | 国产成人一区二区三区精品综合 | 国产无遮挡 | 亚洲丰满熟女一区二区v | 午夜福利一区二区三区在线观看 | 国产一区日韩二区欧美三区 | 人妻无码久久一区二区三区免费 | 午夜福利一区二区三区在线观看 | 日韩精品无码视频免费专区 | 精品久久香蕉国产线看观看亚洲 | 日本精品高清一区二区97伦理电影 | 午夜一区二区免费福利麻豆 | 欧美性爱交换黄片 | 99久久精品国产91久久久 | 天天天天影视 | 无码精品人妻一区二区三 | 亚洲av无码一区二区三区在线播放 | 国自产拍偷拍精品啪啪模特 | 国产在线精品国自产拍影院同性 | 欧美午夜精品 | 国产精品无打码在线播放 | 99热亚洲色 | 国产午夜无码精品免费看浪潮 | 97超碰中文字幕久久精品 | 国产一级高清在线观看 | 国产精品青青青高清在线密亚 | 日韩欧美亚洲一区精品 | 精品香蕉一区二区三区 | 成全高清电 | 国产精品成人久久综合 | 人妻无码aⅴ中文字幕日韩 人妻无码aⅴ中文字幕视频 | 91婷婷| 9lporm自拍视 | 国产超碰人人模人人爽人人添 | 国产精品丝袜一区二区三区 | 精品成人大胸美女视频在线播放 | 欧美一区二区三区精品国产 | 国产成人无码a区在线播放 国产成人无码a区在线观看导航 | 99不卡无码中文字幕在线 | 午夜看片网址97久久精品视频 | 91人妻中文字幕在线精品 | 国产高清色诱视频在线播放 | 国产午夜无码片在线观看网站 | 99无码 | 97人妻在线 | 日本av一区二区三区视频 | 国产一区91在线精品 | 亚洲午夜精品 | 国产三级a毛视频在线观看 国产三级a三级三级 | 自拍偷区亚洲综合激情 | 欧美va视频| 久久国产avjust麻豆 | 成年黄色视频爱雨 | 日日夜人人澡人人澡人人看免 | 精品国产一区二区三区不卡在线 | 国产福利91精品在线观看 | 亚洲日韩国产一区二区蜜桃 | 精品偷自拍另类在线观看 | 中文字幕乱码亚洲 | 成人免费在线观看午夜福利 | 深夜a级毛片免费视频 | 99久久久无码国产精品古装 | 亚洲精品美女久久久久9999 | 多人乱p杂交公车高清免费观看 | 国产av一区二区三区蜜芽 | 国产做a | 成人一区二区三区影院 | 欧美一区二区三区久久成人 | 中文字幕无码日韩欧毛 | 最新国内久久免费视频 | 精品一区二区三区在线观看 | 亚洲av无码乱码国产精品 | 欧美日韩一区二区高清不卡 | 麻豆国产午夜福利片在线观看 | 二区三区99 | 欧美日韩一区二区 | 国产一级特黄不卡在线 | 国产成人亚洲精品乱码在线 | 性做久久久久久久久不卡 | 欧美精品成人久久网站 | 欧洲女人牲交视频免费 | 福利电影 | 韩国高清一区二区午夜无码 | 国产精品美女久久久网av | 四虎最新地址在线观看1080p | 国产免费aⅴ片在线观看麻豆 | 亚洲精品在线观看中文字幕 | 亚洲不卡无码www一区二区三区 | 精品制服丝袜白丝www | 精品国产影片在线观看 | 国产一级婬片a免费播放口 国产一级婬片a片aaa毛片小说 | 91福利国产在线观看 | 丰满少妇被猛烈进入无码 | 97久久天天综合色天天综合88 | 91精品夜夜夜一区二区 | 四虎影视成人永久免费观 | 91国内产香蕉v4.4.9最新版 | 国产成人亚洲精品狼色在线 | 欧美日韩国产码高清综合 | 91人人澡人人妻人人精品 | 偷窥盗摄手机在 | 精品国产综合成人亚 | 国产精品一区不卡在线观看 | 狠狠躁天| 国产午夜亚洲精品午夜鲁丝片 | 国产精品爽爽va在 | 国产精品无码不卡午夜 | 国产精品福利写真 | 亚洲av无码久久无遮挡 | 91探花国产综合在线精品 | 少妇人妻久久久久久97人妻 | 国产av无码精品色午夜 | 在线观看国产精品乱码app | 92国产精品午夜福利 | 国产麻豆剧传媒精品网站 | 极品无码av国 | 精品无码国产自产拍在线观看蜜 | 国产在线拍偷自揄观看视频网站 | 日韩欧美亚蕉久久二一精品视频 | 国产欧美一区二区三区 | 国产强奷在线墦放免费不卡 | 国产国模私拍在线观看 | 国产亚洲精品影视在线产 | 精品无码一区二区三区在线播放 | 91精品国产高清久久福利 | 波多野42部无码喷潮 | 无码国产伦一 | 国产伦精品一区二区三区视频 | 精品无码久久久久久久久 | 国产成人v一区二区毛片 | 久久99久久久无码国产精品 | 色综合av中文字幕 | 欧美性做爰大片免费看软件男组长 | 国产成人无码免费视频9 | 果冻传媒国产卡一卡二 | 精品一二区 | 超碰国产精品最新 | 国产毛片在线视频 | 亚洲av无码av专区在线观看 | 欧美日韩激情亚洲国产 | 亚洲av无码电影网 | 99国产精品免费观看 | 国产精品综合一 | 国产免费丝袜调教视频 | 97视频在线精品国自产拍 | 91麻豆极品在线观看 | 亚洲日韩精品一区二区三区 | 麻豆av无码在线观看 | 波多野结衣av高清中文字幕 | 国内精品久久久 | 午夜视频国产99在线看 | 国产一区二区美女专区 | 91丝袜高潮流白浆喷潮在线播放 | av无码av无码专区 | 色欲久久久久国产综合精品 | 91亚洲高清在线观看 | 国产午夜精品一区二区三区 | 国产精品一区在线 | 97人妻免费在线视频中文 | 国产成a人亚洲精ⅴ品无码樱花 | 欧美综合在线一区 | 国产精品亚洲a∨天堂不卡 国产精品亚洲av高清二区 | 精品国产午夜福利在线观看蜜月 | 国产99这里 | 97香蕉hd无字 | 欧美午夜精品久久久久免费视 | 国产在线观看超清无码视频 | 精品麻豆色欲色欲色欲w | 无码人妻一区二区三区免费看 | 国产熟女真实 | 97久久久久国产精品嫩草影院 | 国产午夜精品久久精品电影 | 人妻熟妇视频 | 天天av天天翘天天综合网 | 91日本免费高清 | 日本中文字幕久久网站 | 亚洲国产精品va在线观看欧美 | 精品国产av无码一 | 欧美日韩国产激情一区 | 天天看天天操 | 亚洲欧美精品中字久久99 | 国产精品一区二区免费 | 国产精品白嫩极品久久久久 | 天天躁日日躁狠狠躁人妻 | 国产普通话刺激视频 | 天天日天天爽 | 欧美日韩精品一区二区三区 | 国产精品岛国久久久久久 | 日本免费黄色片网站 | 国产精品美女乱子伦高潮 | 精品少妇爆乳无码av无码专区 | 波多野结衣乳巨码无在线观看 | 成人va视频| 中文字幕色婷婷在线视频 | 久久丰满熟妇人妻中文字幕 | 四虎久久影院 | 国产熟女3p贵在真实视频 | 熟妇人妻系列v无码一区二区 | 激情内射亚洲一区二区三区爱妻 | 成人精品一区二区三区在线观看 | 精品青草久久久久福利99 | 国产又爽又黄无码无遮 | 99久久毛片无码一区二区三区 | 国产国拍亚 | 色一情一乱一伦一区二区三区 | 亚洲日本中文字幕乱码在线 | 蜜臀色欲av在线播放国产日韩 | 伊伊人成亚洲综合人网7777 | 欧美日韩国产精品. | 日韩亚洲人成 | 少妇被粗大猛进进出出 | 国产精品婷婷久久久久久 | 99爱精品视频公开免费观看 | 精品日本一区二区三区在线观看 | 亚洲av永久无码精品网站在线观看 | 韩国无码一区二区三区在线观看 | 亚洲aⅴ无码专区在线观看 亚洲aⅴ一区二区三区四区 | 国产女白丝脚交视频播放 | 激战丰满肥臀大 | 国产精彩视频一区二区在线观看 | 三级久久三级久久三级 | 午夜影视啪啪免费体验区 | 少妇被躁爽到高潮无 | 中文无码免费在线观看 | 在线不卡高 | 一区二区在线观看高清 | 99久久99久久久精品齐齐 | 精品久久aⅴ人妻中文字幕 精品久久av电影 | 亚洲av永久无码野狼在线观看 | 91蜜桃传媒精品久久久一 | 久久97精品久久久久久久不卡 | 色一情一乱一交一二三区 | 国产麻豆剧果冻传媒星空视频 | 国产午夜成人无码免费看 | 国产欧美丝袜小视频 | 欧美a级情欲片在线观看免费 | 亚洲日本一区二区一本一道 | 亚洲国产精品va在线观看香蕉 | 国产精品无码一区二区三 | 91成人午夜性| 成人精品动漫一区二区三区 | 国产亚洲日韩av在线播放 | 无码人妻av一二区二区三区 | 亚洲午夜成人精品 | 精品国产v一区二区三区 | 无码一区二区三区亚洲人妻 | 国产人成午夜免 | 欧美精品成人a在线 | 国产自拍电影天堂 | 一级片在线 | 中文av岛国无码免费播放 | 欧美精品人 | 成人夜晚看片如何选择合适的影片 | 国产一区av麻豆免费观看 | 精品久久久爽爽久久久av | 无码人妻一区二区三区免费看 | 国产v亚洲v天堂无码久久 | 亚洲精品无码av人在线观看 | 精品人妻少妇嫩草av无码专区 | 国产一线二线在线观看成人av | 午夜福利视频合集4000手机 | 国产91长腿美女在线观看 | 国产麻豆天美果冻无码视频 | 99久久99久久免费精品小说 | 国产v一区 | 日韩综合调教网站 | 国产曰韩ai一区二区三区 | 亚洲精品无码mv在线观看 | 国产a国产国产片 | 国产精品无码久久久久不卡 | 国产精品丝袜久久久久久不卡 | 爱搞逼综合网 | 亚洲欧美视频一区二 | 91久久国产口精品久久久 | 在线a毛片免费视频观看 | 国产一级无码午夜大片 | 色香欲综合天天 | 91精品全国免费观看含羞草 | 欧美成人精精品一区二区 | 成人午夜福利 | 国产麻豆剧传媒精品网站 | 亚洲国产日韩欧美一区二区三区 | 97人人超人人超国产免费 | 婷婷综合久久一区二区三区 | 中日韩无码水多多影视 | 午夜av在线播放不卡 | 亚洲国产精品浪潮久久久av | 久久99精品久久久久久妇女 | 欧美成人精品一区二三区在线观看 | 成人高清图片素材免费下载 | 国产丝袜不卡一区二区 | 91精品国产福利尤物 | 亚洲免费图区在线视频 | 国产精品白嫩极品久久久久 | 性做久久久久久久久男女 | 99热在线播放| 在线偷着国产精选视频 | 国产在线aa视频免费观看 | 国产精品三级av及在线观看 | 亚洲精品无amm毛片 亚洲精品无播放 | 亚洲国产精品无码久久久 | 亚洲视频东京热无码二区 | 黄片特黄av | 在线观看中出内射人和动物 | 精品国产日韩亚洲一区91 | 国产日产精品 | 亚洲精品视频在线播放 | 亚洲成av人网站在线播放 | 欧美老熟妇乱大交xxxxx | 国产精品毛片无码一区二区蜜桃 | 成人黄色视频网站 | 亚洲欧美精品乱 | 国产精品成人无码久久久久久 | 人妻少妇伦在线电影不卡 | 国产精品亚洲一区二区在线观看 | 精品久久久久久久中文字幕 | 99久久精品无码一区二区毛片免费 | 国产成人拍精品视频午夜网站 | 韩国理论电影午夜三级在线观看 | 99伊人网| 亚洲日韩av无码一区二区三区人 | 深夜a级毛片免费无码 | 国产高清日韩一区二区四季 | 99久久精品无码一区二区毛片免费 | 国产在线卡一卡二卡三卡四卡免费 | 人妻少妇精品中文字幕av | 国产精品网站 | 日本女优久久久啊的黄色视频 | 中文国产成人久久精品流白浆 | 国产乱子伦在线观看视频 | av岛国小电影在线观看 | 黑料不打烊吃瓜 | 亚洲第一站精品久久久性色 | 无码人妻精一区二区三区 | 日韩伦理亚洲一区 | 97精品久久天干天天图片 | 国产成人亚洲综合无码ⅴ | 国外免费人妖网视频在线观看 | 久草视频免费在线观看 | 亚洲风情中文 | 无码国产伦一区二区三区视频 | 国产午夜福利一区在线观看 | 91福利国产极品美女在线观看 | 日本一区二区免费不卡视频 | 精品国产va久久久久久久冰 | 亚洲av无码精品无码麻豆 | 亚洲欧美一区二区中文日本的 | 国产女人aaa级久久久级 | 精品久久久久久久无码 | 伊人天堂av无码 | 欧美午夜一区二区福利视频 | 亚洲av午夜成人片精品网站 | 动漫精品3d在线观看 | h动漫精品网站网 | 国产97超级碰碰视频 | 久草超碰在线 | 91麻豆精品国产片在线观看 | 欧美色蜜桃97中文字幕在线播放 | 日本极度另类网站 | 国产精品一区二区国产馆蜜桃 | 一区二区欧美蜜桃大片在线观看 | 国产一区日韩精品欧美在线 | 国产乱人伦偷精品视频色欲 | 午夜视频福利 | 欧美精品午夜 | 国产v亚洲v天堂无码久久久91 | 亚洲男人的天堂一区二区 | 精品不卡秀视频一区二区在线观看 | www.一区二区 | 国产精品无码大片在线观看 | 亚洲国产精品va在线观看麻豆 | 99久久99| 中文字幕一区波多野结衣 | 亚洲最大无码av网站 | 亚洲中文字幕无码爆乳app | 国产成人一区免费观看 | 91制片| 亚洲一区二区精品 | 91高清国产经典在线观看 | 日韩精品无码一区二区三区 | 亚洲国产日韩a在线播放 | 亚洲一卡2卡3卡4 | 91精品国产一区自在线拍 | 成人天堂资源www在线 | 蜜臀色欲av在线播放国产日韩 | 一区二区三区精品视频 | 亚洲精品免播放器在线 | 中文精品久久久久国产网址 | 久久99精品久久久久久国 | 国产乱老熟视频乱老熟女51 | 国产精品成人免费福利 | 日韩人妻系列无码专区三级 | 亚洲国产a∨无码中文777 | 无码精品人妻一区二区三区爱剪 | 97亚洲熟妇自偷自拍另 | 日本不卡视频 | 国产高清免费在线观看 | 一区二区在线看 | 久久99网| 国产一级一级一级国产片 | 91视频观看 | www夜片内射视频日 www夜片内射视频日韩精品成 | 午夜人成视频在线男人每天 | 超国产人碰人摸人爱视频 | 国产在线不卡免费播放 | 国产午夜精品理论片久久影视 | 中文字幕无码av在线 | 午夜男女xx00视频福利免费 | 欧美乱子伦一 | 国产女主播高潮在线播放 | 色系一区二区三区四区五区 | 99久久国产综合精品1尤物 | 91大神在线| 香蕉天天综合网日韩欧影视 | 丰满熟女一区二区 | 日本一区二区三区字幕 | 色窝窝无码一区二区三区成人网站 | 99re热这里只精品免 | 97无码精品人妻免费观看 | 亚洲国产综合人 | 精品少妇人妻av免费久久洗澡 | 91久久婷婷国产综合青草 | 国产在线高清理伦片a | 国产精品美女久久久久久2025 | 国产xxxxx在线观看无遮挡 | 一级片免费在线观看中文字幕 | 亚洲精品亚洲人成在线观看麻豆 | 97se狠狠狠狠狼亚洲综合网 | 精品久久久久久久 | 人人曰人人做人人 | 国产成人久久精品一区二区三区 | 另类欧美综合 | 国产成人无码18禁午夜福利p | 国产91九色 | 在线精品免费视频无码的 | 国产精品热久久av | 国产成人无码18禁午夜福利p | 成人黄色网站视频麻豆8 | 亚洲性爱免费观看视频 | 日韩一卡二卡三 | 国产精品一区在线观看播放 | 99热这里只有成人精品国产 | 精品综合| 国产91热爆精品 | 九九热在线视频观看 | 爆乳女教师高清bd | 在线精品国精品91 | 国产在线观看 | 99久久99久久精品国产片 | 国产精选污视频在线观看 | 97精品久久久大香线焦 | 麻豆美女丝袜人妻中文 | 99久久久久久精品免费 | 国产美女精品久久久久中文 | 成人黄色网 | 亚洲午夜国产激情福利网站 | 天堂一区二区在线观看视频 | 日韩无码电影一区二区 | 国产成人拍拍拍高潮视频 | 中文字幕人成 | 午夜国产一级片 | 国产99一区免费视 | 免费一区二区三区 | av免费午夜福利不卡片在 | 婷婷欧美成人在线 | 亚洲国产在线精 | 国产成人午夜精品免费 | 麻豆成人久久精品二区三区免费 | 99久久国语露脸精品国产 | 国产精品vi| 激情无码一 | 久久成午夜精品一区二区三区 | 人妻日韩精品中文字幕 | 国内最真实的xxxx人伦 | 亚洲不卡无码www一区二区三区 | 国产成人精品免费视频网页 | 无码专区 | 国产一区二区三区四区三区 | 波多野结| 午夜理论片yy6080私人影院 | 国产成人高清视频免费播放 | a级毛片免费视频无码 | 91小妖国产在线播放 | 97精品伊人久久久大香线焦 | 国产三级日本三级日产三级66 | 国产又黄又大又粗视频 | 91在线无码精品入口九色 | 欧美日韩在线免费观看视频 | 性生交片免费无码看人 | 老司机午夜精品99久久免费 | 97在线观看视频网站 | 国产成人精品综合久久久久 | 国产aⅴ精品一区二区三区久久 | 91精品福利资源在线观看 | 九九热精品视频在线 | 久久99精品久久久久久hb无码 | 国产日韩在线播放 | 国产女明星专区视频在线播放 | 久久99精品国产99久久 | 欧美在线一区视频 | 亚洲一区公司在线 | 亚洲成人片在线播放无码 | 国产精品v亚洲精品v日韩精品 | 91丝袜精品久久久久久无码人妻 | 在线好吊色视频 | 国产a久久精品一区二区三区 | 亚洲av综合色区在线观看 | 99热在线免 | 日韩人妻一区二区三区蜜桃视频 | 日韩美女在线视频一区 | 久久高清超碰av热热久久 | 欧洲国产成人久久精品综合 | 免费无遮拦无码视频在线观看 | 无码系列 | 深夜在线视频免费网址 | 91久久久久久国产精品 | 中文无码伦av中文字幕 | 精品国产乱码久久久久久毛片 | 91亚洲精品乱码久久久久久蜜桃 | 国产精品视频色拍拍 | 丰满多水的寡妇毛片免费看 | 亚洲欧美日韩人兽免费 | 国产有码无码精品在线 | 99无码一区二区 | 91精品国产全国免费观看蜜桃 | 操人网站 | 国产ts无码 | 亚洲av成人无 | 国产日韩精品一区二区三区在线观 | 91麻豆国产在线观看 | 国产精品成人精品久久久一区 | 欧洲熟妇性 | 国产一级特黄aaa大片在线观 | 国产午夜三级 | 国产精品无码久久久久久曰本 | 丰满少妇午夜寂寞影院 | 亚洲精品国产成人片 | 无码国内精品久久人妻 | 国产成人av大片在线观看 | 国产欧美日韩高清在线不卡 | 国产aⅴ精品一区二区三区久久 | 国产青榴在线观 | 亚洲精品中文字幕无乱码 | 国产a国片精品白丝jk制服 | 亚洲av永久无码精品一区二区国产 | 99久久免费视频观看 | 午夜福利一区二区三区不卡 | 巨乳人妻的誘惑高清完整版在线观看 | 91伊人久久| 午夜精品久久久久久毛片 | 欧洲熟妇色xxxx欧美老妇免费 | 91欧美激 | 麻豆一区二区三区精品视频 | 免费一级成人毛片 | 国内一区二区 | 国产丰满大乳奶水在线视频 | 午夜精品久久久99热蜜桃 | 日韩美国国产一级毛片 | 99re在线播放视频国产 | 欧美日韩一区二区三区视频在线观看 | 亚洲欧美日韩漫画 | 国精品国产不卡 | 色视频www在线播放国产人成 | 成人午夜 | 欧美日韩成人综合网站 | 国产精品亚洲色婷婷99久久精品 | 少妇高潮惨叫久久久久久 | 性色av一区二区三区无码 | 亚洲重口无码av影院 | 国产精品午夜福利不卡 | 99久久99这里只有免费精品 | av无码午夜福利一区二区三区 | 亚洲中文字幕av无码专区 | 国产在线精品二区 | 亚洲av日韩av男人的天堂在线 | 亚洲欧美国 | 四虎最新地址在线观看1080p | 国产高清视频在线 | 国产精自产拍久久久久久蜜 | 中文字幕精品一区二区三区视频 | 亚洲日韩精品免费视频91蜜桃 | 果冻传媒2025网站入口官方最新 | 国产成人无码a区 | 成年在线网站免费观看无广告 | 国产成人精品综合久久久 | a级情欲片在线观看免费 | 99久无码中文字幕一本久道 | 精品人妻无码一区二区三 | av免费观看在线亚洲 | 久久大香国产成人av | 精品少妇人妻av无码专区不卡 | 精品少妇爆乳无码av无码专区 | 国产高清一区 | 精品国产群3p在线观看91 | 国产一级av国片免费 | 午夜福利看片 | 国产三级毛视频在线观看 | 按着她的腰疯狂的撞击闷哼 | 国内免费视频一区二区三区 | 国产尤物第一区 | 午夜精品成人毛片 | 亚洲欧美一区二区三区蜜芽 | 99久久精品免费看国产一区二 | 午夜不卡在线观看 | 精品一区二区三区的国产在线观 | αv天堂亚洲一区二区三区 αv天堂在线观看免费αⅴ | 天天做日日做天天添天天欢公交 | 日日插人人插天天插 | 国产自拍精品视频网站丝袜 | 亚洲午夜天堂视频 | 欧美va天堂v国产综合 | 国产一区二区精品尤物 | 欧美系列日韩 | 欧美性生交大片免费看a片 欧美性受xxxx黑人xyx性爽 | 午夜福利无遮挡十八禁视频 | 一区二区三区日本视频 | 亚洲av无码一区二区乱码 | 91香蕉国产线观看免费茄子 | 亚洲av无码不卡在线观看 | 91青青青国产在观免费影视 | 日韩无码亚洲中文字幕 | 91精品无人区麻豆乱码4区开放时间 | 亚洲一本大道无码av天堂 | 国产一级婬片视频免费观看 | 亚洲精品成人无码中文毛片不 | 欧美日韩在线观看 | 久久成人国产精品麻豆 | 九一国产在线观看 | 福利在线观看 | 日本aⅴ深夜私人噜噜噜视频 | 国内高清无码一二三区 | 高清无码视频直接看 | 日韩精品无码一区二区三区不卡 | 91精品国产91久久久久 | 国产高清极品美女黄色网站 | 无码aⅴ精| 国产精品观看 | 亚洲mv大片免费网站 | 人妻少妇看a偷人无码精品视频 | 1区2区3区视频软件排行榜 | 操女优国产成人综合色在线观看网站 | 日本一区二区三区在线 | 亚洲av无码久久精品蜜桃播放 | 精品一区二区三区五 | 日韩无码高潮喷水 | 精品少妇人妻av一区二区 | 国产a级精精彩大片免费看 国产a级毛片 | 国产一区二区在线播放 | 国产三级深夜精品视频 | 国产亚洲综合久久系列 | 人妻系列无码专区久久五月天 | 特级丰满少妇一级aaaa爱毛 | 国产精品美女久久久久久久久 | 一级片中| 国产www久久久久久久 | 国产日韩av在线播放 | 亚洲av女人的天堂在线观看 | 国精产品一区二区三区四区糖 | 欧洲亜洲中文日韩色图 | 人妻少妇久久中文字幕一区二区+ | 综合国产精品私拍国产在线 | 国内精品久久久久影院蜜芽 | 亚洲av无码不卡在线观看 | 欧美系列日韩 | 精品人无码一区二区三区 | 亚洲无码在线观看a | 亚洲精品中文字幕久久久久 | 精品国产av无码久久久黄 | 亚洲精品久久无码 | 人人操人人摸一区二区三区不卡 | 国产色欲色欲色欲.www | 亚洲午夜成人精品电影在线观看 | 无码专区| 97精品国产高清久久久久蜜芽 | 日本三级片在线观看 | 亚洲精品天堂无码中文字幕 | 国产爆乳美女娇喘呻吟 | 在线精品亚洲一区二区动态图 | 国产成人女人视频在线观看 | 无码不卡一区二区三区在线观看 | 国产乱子伦在线观看 | 亚洲日韩欧洲无码v夜夜摸 亚洲日韩手机在线专区 | 日韩在线视频观看在线看 | av无码专区亚洲 | 精品一区二区三区 | 91香蕉高清国产线观看免费 | 午夜dv内射一 | 欧美又粗又大又爽又色a片 欧美又粗又大又爽又色片 欧美又大 | 国精产品一品二品国精品69xx | 国产91成人免费网站 |