国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

fastjson2為什么這么快?

共 10357字,需瀏覽 21分鐘

 ·

2023-02-25 10:13

導(dǎo)讀


本文作者從以下三個方面講述了fastjson2 使用了哪些核心技術(shù)來提升速度。

1、用「Lambda 生成函數(shù)映射」代替「高頻的反射操作」

2、對 String 做零拷貝優(yōu)化

3、常見類型解析優(yōu)化

fastjson 是很多企業(yè)應(yīng)用中處理 json 數(shù)據(jù)的基礎(chǔ)工具,其憑借在易用性、處理速度上的優(yōu)越性,支撐了很多數(shù)據(jù)處理場景。fastjson 的作者「高鐵」已更新推出 2.0 版本的 fastjson,即 fastjosn2[1]。
據(jù) “相關(guān)數(shù)據(jù)” [2]顯示,fastjson2 各方面性能均有提升,常規(guī)數(shù)據(jù)序列化相比 1.0 系列提升達(dá)到 30%,那么,fastjson2 使用了哪些核心技術(shù)來提升速度的呢?筆者總結(jié)包含但不限于以下幾個方面:
  • 用「Lambda 生成函數(shù)映射」代替「高頻的反射操作」

  • 對 String 做零拷貝優(yōu)化

  • 常見類型解析優(yōu)化

一、用「 Lambda 生成函數(shù)映射」代替「高頻的反射操作」

我們來看一段最簡單的反射執(zhí)行代碼:
public class Bean {    int id;    public int getId() {        return id;    }}
Method methodGetId = Bean.class.getMethod("getId");Bean bean = createInstance();int value = (Integer) methodGetId.invoke(bean);

上面的反射執(zhí)行代碼可以被改寫成這樣:

// 將getId()映射為function函數(shù)java.util.function.ToIntFunction<Bean> function = Bean::getId; int i = function.applyAsInt(bean);

fastjson2 中的具體實現(xiàn)的要復(fù)雜一點,但本質(zhì)上跟上面一樣,其本質(zhì)也是生成了一個 function。

//functionjava.util.function.ToIntFunction<Bean> function = LambdaMetafactory.metafactory(        lookup,        "applyAsInt",        methodHanlder,        methodType(ToIntFunction.class),        lookup.findVirtual(int.class, "getId", methodType(int.class)),        methodType(int.class));int i = function.applyAsInt(bean);
我們使用反射獲取到的 Method 和 Lambda 函數(shù)分別執(zhí)行 10000 次來看下處理速度差異:
Method invoke elapsed: 25msBean::getId elapsed: 1ms

處理速度相差居然達(dá)到 25 倍,使用 Java8 Lambda 為什么能提升這多呢?

答案就是:Lambda 利用 LambdaMetafactory 生成了函數(shù)映射代替反射。
下面我們詳細(xì)分析下 Java反射 與 Lambda 函數(shù)映射 的底層區(qū)別。

1、反射執(zhí)行的底層原理

注:以下只是想表達(dá)出反射調(diào)用本身的繁雜性,大可不必深究這些代碼細(xì)節(jié)
從代碼角度,我們從 Java 方法反射 Method.invoke 的源碼入口來深入:
public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException,InvocationTargetException{    if (!override) {        if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {            Class<?> caller = Reflection.getCallerClass();            checkAccess(caller, clazz, obj, modifiers);        }    }    MethodAccessor ma = methodAccessor;// read volatile    if (ma == null) ma = acquireMethodAccessor();    return ma.invoke(obj, args);}

可見,經(jīng)過簡單的檢查后,調(diào)用的是MethodAccessor.invoke(),這部分的實際實現(xiàn):

public Object invoke(Object var1, Object[] var2) throws IllegalArgumentException, InvocationTargetException {    if (++this.numInvocations > ReflectionFactory.inflationThreshold() && !ReflectUtil.isVMAnonymousClass(this.method.getDeclaringClass())) {        MethodAccessorImpl var3 = (MethodAccessorImpl)(new MethodAccessorGenerator()).generateMethod(this.method.getDeclaringClass(), this.method.getName(), this.method.getParameterTypes(), this.method.getReturnType(), this.method.getExceptionTypes(), this.method.getModifiers());        this.parent.setDelegate(var3);    }    return invoke0(this.method, var1, var2);}
private static native Object invoke0(Method var0, Object var1, Object[] var2);

可見,最終調(diào)用的是 native 本地方法(本地方法棧)的 invoke0(),這部分的實現(xiàn):

JNIEXPORT jobject JNICALL Java_sun_reflect_NativeMethodAccessorImpl_invoke0(JNIEnv *env, jclass unused, jobject m, jobject obj, jobjectArray args){    return JVM_InvokeMethod(env, m, obj, args);}

可見,調(diào)用的是 jvm.h 模塊的 JVM_InvokeMethod 方法,這部分的實現(xiàn):

JNIEXPORT jobject JNICALL Java_sun_reflect_NativeMethodAccessorImpl_invoke0(JNIEnv *env, jclass unused, jobject m, jobject obj, jobjectArray args){    return JVM_InvokeMethod(env, m, obj, args);}
更詳細(xì)的細(xì)節(jié):https://www.zhihu.com/question/464985077/answer/1940021614

2、Lambda生成函數(shù)映射的底層原理

具體來講,Bean::getId 這種 Lambda 寫法進(jìn)過編譯后,會通過 java.lang.invoke.LambdaMetafactory 

調(diào)用到

java.lang.invoke.InnerClassLambdaMetafactory#spinInnerClass

最終實現(xiàn)是調(diào)用 JDK 自帶的字節(jié)碼庫 jdk.internal.org.objectweb.asm 動態(tài)生成一個內(nèi)部類,上層 call 內(nèi)部類的方法執(zhí)行調(diào)用。
所以 Lambda 生成函數(shù)映射的方式,核心消耗就在于生成函數(shù)映射,那生成函數(shù)映射的效率究竟如何呢?
我們和反射獲取 Method 做個對比,Benchmark 結(jié)論:
Benchmark 
Mode
Cnt
Score
Error
Units
genMethod(反射獲取方法)
avgt(平均耗時)
5
0.125
0.015
us/op
genLambda(生成方法的函數(shù)映射)
avgt
5
51.880
40.040
us/op
從數(shù)據(jù)來看,生成函數(shù)映射的耗時遠(yuǎn)高于反射獲取 Method。那為我們不禁要問,既然生成函數(shù)映射的性能遠(yuǎn)低于反射獲取方法,那為什么最終用生成函數(shù)的方式的執(zhí)行速度比反射要快?
答案就在于——函數(shù)復(fù)用,將一個固定簽名的函數(shù)緩存起來,下次調(diào)用就可以省去函數(shù)創(chuàng)建的過程。
比如 fastjson2 直接將常用函數(shù)的初始化緩存放在 static 代碼塊,這就將函數(shù)創(chuàng)建的消耗就被前置到類加載階段,在數(shù)據(jù)處理階段的耗時進(jìn)一步降低。

3、對比分析 & 結(jié)論

從原理上來說,反射方式,在獲取 Method 階段消耗較少,但 invoke 階段則是每次都用都調(diào)用本地方法執(zhí)行,先是在 jvm 層面多出一些檢查,而后轉(zhuǎn)到 JNI 本地庫,除了有額外的 jvm 堆棧與本地方法棧的 context 交換 ,還多出一系列 C 體系額外操作,在性能上自然是不如 Lambda 函數(shù)映射;
Lambda 生成函數(shù)映射的方式,在生成代理類的過程中有部分開銷,這部分開銷可以通過緩存機(jī)制大量減少,而后的調(diào)用則全部屬于 Java 范疇內(nèi)的堆棧調(diào)用(即拿到代理類后,調(diào)用效率和原生方法調(diào)用幾乎一致)。

二、對 String 做零拷貝優(yōu)化

1、何為零拷貝

零拷貝[3]是老生常談的問題,Kafka 和 Netty 等都用到了零拷貝的知識,這里簡單介紹一下其概念以便生疏的讀者理解上流暢。
零拷貝:是指計算機(jī)執(zhí)行IO操作時,CPU不需要將數(shù)據(jù)從一個存儲區(qū)域復(fù)制到另一個存儲區(qū)域,進(jìn)而減少上下文切換以及CPU的拷貝時間。它是一種IO操作優(yōu)化技術(shù)。
JDK8 中的 String 是如何拷貝的?
為了實現(xiàn)字符串是不可變的特性,JDK 在構(gòu)造 String 構(gòu)造字符串的時候,會有拷貝的過程,比如上圖是 JDK8 的 String 的一個構(gòu)造函數(shù)的實現(xiàn),其在堆內(nèi)存中重新開辟了一塊內(nèi)存區(qū)域。
如果要提升構(gòu)造字符串的開銷,就要避免這樣的拷貝,即零拷貝。

2、fastjson2 中如何實現(xiàn) 0 拷貝

在 JDK8 中,String 有一個構(gòu)造函數(shù)是不做拷貝的:
但這個方法不是 public,不能直接訪問到,可以反射執(zhí)行,也可以使用 LambdaMetafactory 創(chuàng)建函數(shù)映射來調(diào)用,前面有介紹這個技巧。
生成的函數(shù)映射可以緩存起來復(fù)用,而這個構(gòu)造方法的簽名是固定不變的,這意味著,只需要生成一次,后續(xù)所有需要初始化 String 的時候都可以復(fù)用。

3、fastjson2 中的應(yīng)用

將 LocalDate 格式化為 “yyyy-MM-dd” 的 String 源碼(注:針對 JDK8 的實現(xiàn),此處對源碼精簡整理以方便閱讀):
static BiFunction<char[], Boolean, String>  STRING_CREATOR_JDK8;static {    //為上述String的0拷貝構(gòu)造方法創(chuàng)建一個映射函數(shù)    CallSite callSite = LambdaMetafactory.metafactory(caller, "apply", methodType(BiFunction.class), methodType(Object.class, Object.class, Object.class), handle, methodType(String.class, char[].class, boolean.class));    STRING_CREATOR_JDK8 = (BiFunction<char[], Boolean, String>) callSite.getTarget().invokeExact();}
static String formatYYYYMMDD(LocalDate date) { int year = date.getYear(); int month = date.getMonthValue(); int dayOfMonth = date.getDayOfMonth(); int y0 = year / 1000 + '0'; int y1 = (year / 100) % 10 + '0'; int y2 = (year / 10) % 10 + '0'; int y3 = year % 10 + '0'; int m0 = month / 10 + '0'; int m1 = month % 10 + '0'; int d0 = dayOfMonth / 10 + '0'; int d1 = dayOfMonth % 10 + '0';
//char array char[] chars = new char[10]; chars[0] = (char) y1; chars[1] = (char) y2; chars[2] = (char) y3; chars[3] = (char) y4; chars[4] = '-'; chars[5] = (char) m0; chars[6] = (char) m1; chars[7] = '-'; chars[8] = (char) d0; chars[9] = (char) d1;
//執(zhí)行「lambda函數(shù)映射」構(gòu)造String String str = STRING_CREATOR_JDK8.apply(chars, Boolean.TRUE); return str;}

在 JDK8 的實現(xiàn)中,先拼接好格式中每一個 char 字符,然后通過零拷貝的方式構(gòu)造字符串對象,這樣就實現(xiàn)了快速格式化 LocalDate 到 String,這樣的實現(xiàn)遠(yuǎn)比使用 SimpleDateFormat 之類要快。這種實例化 String 的方式在fatsjson2 中的 JSONReader、JSONWritter 隨處可見。

三、常見類型解析優(yōu)化

fastjson2 里針對各種類型的優(yōu)化處理很多,不能一一列舉,這里僅以 Date 類型舉例,我們前面舉例了將 Date 格式化為 String,這次我們反過來,將 String 轉(zhuǎn)換為 Date —— 如何快速將字符串解析成日期?以下給出幾種實現(xiàn)方式,隨后我們來做個對比。

1、使用SimpleDateFormat

SimpleDateFormat 是我們使用最廣泛、最容易想到的方式,需要注意的是 SimpleDateFormat 不是線程安全的,并發(fā)場景下要 sync 同步處理。
static final ThreadLocal<SimpleDateFormat> formatThreadLocal = ThreadLocal.withInitial(        () -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// get format from ThreadLocalSimpleDateFormat format = formatThreadLocal.get();format.parse(str);

2、使用java.time.DateTimeFormatter

JDK8 提供了 java.time API,吸收了 joda-time[4]的部分精華,功能更強(qiáng)大,性能也更好。同時,DateTimeFormatter 是線程安全的。
static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// use formatter parse DateLocalDateTime ldt = LocalDateTime.parse(str, formatter);ZoneOffset offset = DEFAULT_ZONE_ID.getRules().getOffset(ldt);long millis = ldt.toInstant(offset).toEpochMilli();Date date = new Date(millis);

這種方法比使用 SimpleDateFormat 組合 ThreadLocal 代碼更簡潔,速度也大約要快 50%。

圖片源自github

3、針對固定格式和固定時區(qū)優(yōu)化

我們在日常處理 Date 數(shù)據(jù)時,在國內(nèi)最常見的格式就是 "yyyy-MM-dd HH:mm:ss",默認(rèn)的時區(qū)為東 8 區(qū),在 java.time 中的 ZonedId 是 "Asia/Shanghai"(而不是 Asia/Beijing),而東 8 區(qū)在1992年之后,不在使用夏令時,固定的 zoneOffset 是 +8,根據(jù)這個情況,我們可以針對性做優(yōu)化,如下(為方便理解,以下為源碼的簡化版,去掉了影響閱讀的邊界處理等邏輯):
public static Date parseYYYYMMDDHHMMSS19(String str) {    char y0 = str.charAt(0);    char y1 = str.charAt(1);    char y2 = str.charAt(2);    char y3 = str.charAt(3);    char m0 = str.charAt(4);    char m1 = str.charAt(5);    ...    char s1 = str.charAt(18);
int year = (y0 - '0') * 1000 + (y1 - '0') * 100 + (y2 - '0') * 10 + (y3 - '0'); int month = (m0 - '0') * 10 + (m1 - '0'); int dom = (d0 - '0') * 10 + (d1 - '0'); int hour = (h0 - '0') * 10 + (h1 - '0'); int minute = (i0 - '0') * 10 + (i1 - '0'); int second = (s0 - '0') * 10 + (s1 - '0');
//換算成毫秒 long millis; if (year >= 1992 && (DEFAULT_ZONE_ID == SHANGHAI_ZONE_ID || DEFAULT_ZONE_ID.getRules() == IOUtils.SHANGHAI_ZONE_RULES)) {
final int DAYS_PER_CYCLE = 146097; final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);
long y = year; long m = month;
long epochDay; { long total = 0; total += 365 * y; total += (y + 3) / 4 - (y + 99) / 100 + (y + 399) / 400; total += ((367 * m - 362) / 12); total += dom - 1; if (m > 2) { total--; boolean leapYear = (year & 3) == 0 && ((year % 100) != 0 || (year % 400) == 0); if (!leapYear) { total--; } } epochDay = total - DAYS_0000_TO_1970; } long seconds = epochDay * 86400 + hour * 3600 + minute * 60 + second - SHANGHAI_ZONE_OFFSET_TOTAL_SECONDS;
millis = seconds * 1000L; } else { LocalDate localDate = LocalDate.of(year, month, dom); LocalTime localTime = LocalTime.of(hour, minute, second, 0); LocalDateTime ldt = LocalDateTime.of(localDate, localTime); ZoneOffset offset = DEFAULT_ZONE_ID.getRules().getOffset(ldt); millis = ldt.toEpochSecond(offset) * 1000; }
return new Date(millis);}


核心邏輯就是根據(jù)位數(shù),直接開始計算給定的時間字符串,相對于參照的原點時間(1970-1-1 0點)過去了多少毫秒,這個優(yōu)化,避免了parse Number的開銷,精簡了大量 Partten 的處理,處理流程非常高效。

4、性能測試 & 結(jié)論

benchmark[5]
Benchmark 
Mode
Cnt
Score
Error
Units
DateParse.simpleDateFormatParse
avgt(平均耗時)
5
11.540
4.170
us/ms
DateParse.dateTimeFormatterParse
avgt
5
7.594
0.200
us/ms
DateParse.parseYYYYMMDDHHMMSS19
avgt
5
0.425
0.098
us/ms

JMH測試顯示:方法 3 的耗時遠(yuǎn)低于其他方式,方法 3 這種針對性的類型解析優(yōu)化可以使用在重度使用日期解析的優(yōu)化場景,比如數(shù)據(jù)批量導(dǎo)入解析日期,大數(shù)據(jù)場景的 UDF 日期解析等。

One more thing

fastjson 系列相比同類 json 處理工具,雖然在安全性、魯棒性等方面還可以提升,但其最大優(yōu)勢——處理速度,卻使其他同類競品望塵莫及。我們也可以在日常業(yè)務(wù)處理中,學(xué)習(xí)其精華部分,運用其中的技術(shù)亮點,優(yōu)化業(yè)務(wù)處理速度,提升用戶體驗。
參考鏈接:

[1]https://github.com/alibaba/fastjson2

[2]https://github.com/alibaba/fastjson2/wiki/fastjson_benchmark

[3]https://so.csdn.net/so/search?q=零拷貝&spm=1001.2101.3001.7020

[4]https://www.joda.org/joda-time/

[5]https://github.com/alibaba/fastjson2/blob/main/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/DateParse.java

瀏覽 131
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩图片区小说视频区日| 怡红院成人在线| 丝袜内射| 视频一区中文字幕| 中国老熟女重囗味HDXX| 三级无码电影| 日韩三级片在线视频| 免费av播放| 黄色成人视频网站| 视频一区乳奴| 国产在线观看免费视频| 91成人免费电影| 神马午夜| 久久偷拍网| 麻豆午夜福利视频| 五月亭亭在线视频| 国产一级a毛一级a毛片视频黑人| 91人妻成人精品一区二区| 日本爱爱免费视频| 亚洲精品成人av无码| 不卡的一区二区| 2025无码视频| 骚逼日本| 加勒比综合无码| 天天天做夜夜夜夜爽无码| 亚洲AV无码乱码| 蜜臀久久99精品久久久电影| 亚洲欧美日韩一区二区| 天天拍天天操| 亚洲日韩欧美一区二区天天天 | 国产女人18毛片水18精品| 俺来也听听婷婷| 双腿张开被9个男人调教| 国产久久视频在线观看| 成人AV免费观看| 三级视频在线观看| 综合网亚洲| 成人视频在线播放| 成人视频免费网站| 国产精品一卡二卡| 日本综合久久| 久久久黄色视频| 超碰在线精品| 日中文字幕| 中文字幕12页| 女女久久| 男女性爱视频网站| 午夜精品一区二区三区在线成人 | 亚洲精品无码中文字幕| 国产精品成人无码专区| 天天干天天干天| 久久视频免费在线观看| 国产中文字字幕乱码无限| 超碰日日夜夜| 国产一区在线播放| 国产乱国产乱老熟300视频| 中文字幕在线观看福利视频| 人人爱,人人操| 中文字幕人妻在线中文乱码怎么解决 | 亚洲天堂在线视频观看| 色五月综合| 免费性爱网站| 欧美亚洲视频在线观看| 亚洲在线观看免费| 久久亚洲一区| 欧美久久性爱视频| 亚洲成人h| 精品国产久久久久| 无码精品一区二区免费| 精品久久三级片| 精品国产精品国产精品国产网站 | 国产精品V| 亚洲综合视频在线| 极品人妻疯狂3p超刺激| 一本色道久久综合无码人妻| 欧美囗交荫蒂AAAA| 亚洲超碰在线| 日韩国产成人| 一级理论片| 军人妓女院BD高清片在线播放| 自拍偷拍一区| 成人AV中文解说水果派| 亚洲无码网址| 韩国无码免费| 久久午夜夜伦鲁鲁一区二区| 成人精品免费视频| 中日韩欧美一级A片免费| 高hnp| 3D动漫精品啪啪一区二区免费| 99色视频| 五月激情视频| 大香蕉尹人网| 四虎永久www成人影院| 无码在线免费| 国产亚洲AV| 日本一级一片免费视频| 韩国日本美国免费毛片| 日韩东京热中文字幕| 日日夜夜老司机| 熟女探花精选| 18禁网站网址| 操操插插| 久久久老熟女一区二区三区91| 日本黄色大片网站| 中文资源在线观看| 免费自拍视频| 大香蕉大香蕉网| 2019人人操| 午夜无码高清| 俺也去啦WWW色官网| 日韩高清av| 少妇嫩搡BBBB搡BBBB| 午夜操逼视频| 久久一本| 亚洲中文在线观看| 在线观看免费完整版中文字幕视频 | 日本黄色电影在线| 综合色婷婷| 99热超碰在线| 国产在线视频你懂的| 欧美丰满人妻免费视频人| 成人超碰在线| 无码东京热国产| 性爱一级视频| 亚洲网站在线免费观看| 成人大香蕉视频| 亚洲第一中文字幕| 精品乱伦视频| 国产主播在线播放| 一本道中文字幕| 天堂资源网| 色情一级A片成人片| 久久久久国产一区二区三区四区| 成人尤物网站| 欧美AAA黄片| 久操超碰| 亚洲操B视频| 成人激情在线视频| 成人小视频在线观看| 免费看一区二区三区A片| 亚洲无码在线观看视频| 操一操干一干| 久久久精品淫秽色情| 国产精品理论片| 亚洲日韩欧美成人| 日本无码免费视频| 波多野结衣无码AV在线| 日本无码在线| yy午夜福利| 无码在线视频播放| 激情无码精品| 99精品热视频| 成人午夜激情| 亚洲黄色成人网站| 三级电影久久麻豆| 黄色网址在线观看视频| 亚洲日韩一级| 国产高潮在线| 婷婷丁香综合| 成人在线免费观看视频| 91精品国产闺蜜国产在线闺蜜| 日本特黄视频| 国产五月天婷婷| 神马午夜秋霞不卡| 国产在线导航| 性欧美老妇bbwbbwbbw| 午夜精品18码视频国产17c| 天天干少妇| h视频在线观看网站| 91狠狠色丁香婷婷综合久久精品| 日本a片在线观看| 成人无码中文字幕| 男人av网站| 成人视频毛片| 粉嫩av在线| 亚洲黄色视频在线| 先锋资源AV| 老熟女17页一91| 先锋久久资源| 99精品视频网站| 91丨牛牛丨国产| 午夜精品18视频国产17c| 亚洲综合区| 欧美福利电影| 免费在线观看AV网站| 男人操女人视频网站| 成人69AV| 日本国产在线观看| 91成人视频18| 久操视频一区二区三区| 91白丝喷水自慰网站| 欧美操逼在线| 国产成人亚洲综合A∨婷婷| 操日本老女人| 午夜免费播放观看在线视频| 国产精品久久在线| 在线日韩AV| 一本道中文字幕| 天天射综合| 水果派解说AV无码一区| 亚洲无码AV网站| 国产成人无码区免费AV片在线 | 乱子伦国产精品www| 久热官网| 强伦轩人妻一区二区三区最新版本更新内容 | 欧美激情DVD| 免费观看A级毛片| 亚洲AV无码精品久久一区二区| 日本乱伦中文字幕| 搡BBB搡BBBB搡BBBB-百度| 国产女人18毛片水18精品软件| 亚洲综合激情网| 俺来也俺也啪WWW色| 亚洲一级av| 亚洲中文字幕日韩在线| 四季AV之日韩人妻无码| 国产无遮挡A片又黄又爽小直播| 操逼综合| 大黑逼AV| 老太色HD色老太HD-百度| 无码一卡| 人人妻人人操人人爽| 久久久偷拍视频| 翔田千里在线播放| 人人射人人操| AV电影免费看| 亚洲天堂在线免费| 成人网站毛片| 中文字幕在线观看第一页| 男人资源在线| 夜夜操夜夜骑| 久热无码| 久久久无码人妻精品无码| 成人不卡视频| 亚洲日韩在线观看视频| 男女精品一区| 精品一二三四| 亚洲AV成人精品一区二区三区| 1插菊花综合网| 97人人爽人人爽人人爽| 韩日AV| 蜜臀久久99精品久久久老牛影视 | 国产国产国产在线无码视频| 午夜特片| 99热自拍| 九九九热精品| 婷婷五月天影视| 青娱乐无码| 日韩无码人妻一区二区三区 | 日逼高清无码| 91在线无码精品秘入口国战| 亚洲无码视频免费观看| 日韩蜜桃视频| 日韩在线一级| 麻豆一级片| 亚洲三级视频在线播出| 日韩A片免费看| 99国产精品| 啊啊啊亚洲| 911精品国产一区二区在线| 亚洲成人黄色| 国产精品嫩草久久久久yw193| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 91人人妻人人澡| 日本操B久久| 国产一级片内射| 性久久久久久久| 91白浆肆意四溢456| 中文字幕VA| 国产一卡二卡三卡| 91麻豆精品国产91久久久久久久久 | 日本无码免费视频| 国产男女性爱视频播放| 国产免费内射| 四虎成人网站| 美女毛片网站| 久久久精品午夜人成欧洲亚洲韩国| 亚洲热视频| 大香蕉综合伊人| 在线看片A| 成人免费视频在线观看| 色播国产成人AV| AV资源在线播放| 亚洲a视频在线| 午夜资源网| 亚洲精品黄色| 久久久久久久久久久久国产精品| 你懂的在线网站| 天天都色| 欧美成人福利在线观看| 国产精品操逼视频| 51成人精品午夜福利| 成人亚洲A片V一区二区三区蜜月 | 黄色视频一区二区| 欧洲一区在线观看| 想要xx在线观看| 四川少扫搡BBw搡BBBB| 国产A级黄色片| 欧美日韩不卡视频| 五月天堂网| 揄拍成人国产精品视频| 青青青国产| 影音先锋一区| 女人av天堂| 国产老骚逼| 中文字幕AV在线观看| 黄色一级片在线看| 欧美XXX黑人XYX性爽| 操一炮在线视频| 蜜臀久久久99久久久久久久| 俺也去视频| 淫一区二区| 色欲五月天| 日韩高清无码免费| 国产精品99视频| 天天操操| 亚洲H| 黄色毛片网站| 毛片资源| 天天干夜夜操| 精品久久一区二区三区四区| 成人一级片| 日韩免费小视频| 欧美999| 九九韩剧网最新电视剧免费观看 | 亚洲黄色小电影| 欧美日本国产| 99久久久国产精品免费蜜臀| 亚洲40p| 超碰91在线| 影音先锋成人AV资源| 欧美日韩国产一区二区三区| 麻豆天美蜜桃91| 欧美一级A片免费看| 国产免费乱伦| 午夜av电影| 欧美一级免费观看| 密臀av在线| 国产成人一区二区三区A片免费| 99做爱| 日韩无码免费视频| 老太色HD色老太HD-百度| 丰满人妻一区二区三区| 18精品爽国产冫绿帽社| 久9热| 成人精品免费无码毛片| 福利二区| 亚洲男人的天堂AV| 91在线免费视频| 亚洲精品久久久久久久久蜜桃| 一插菊花综合网| 玖玖激情| 自慰喷水流白浆中文字幕| 河南熟妇搡BBBB搡BBBB| 成人av黄色三级片在线观看| 亚洲精品伊人| 中文字幕淫乱视频欧美| 久久超碰精品| 中字无码AV| www.一区二区| 免费看黄色大全| 欧美群交videotv群交| 欧洲一区二区| 国产天堂在线观看| 国产精品一区二区在线| 人妻japanesewoman| 熟女人妻在线观看| 韩国日本美国免费毛片| 性爱视频免费| 免费看特别黄色视频| 国产精品777777| 自拍AV在线| 91AV视频在线观看| 中文字幕第11页| 国产色五月视频| 一本道视频在线| 日韩性爱视频在线播放| 蜜桃AV在线播放| 丁香花免费高清视频小说完整| 永久免费视频| P站免费版-永久免费的福利视频平台 | AV在线免费观看网站| 精品无码不卡| 香蕉视频色| 91免费网站在线观看| 国产黄色电影在线观看| 在线看一区| www日本高清| 黄色视频一级| 91丨精品丨国产丨丝袜| 在线观看91| 亚洲无码一区在线| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 日韩AV资源网| a视频在线免费观看| 欧美美女日逼视频| 激情五月天视频| 日产精品久久| AV一区二区三区四区| 蜜臀成人片| 亚洲无码高清在线视频| www.大吊视频| 欧美日韩爱爱| 深爱开心激情| 国产高潮白浆喷| 中日美朝美女一级片免费看| 午夜福利老司机| 久久五月婷| 99热这里只有精品7| 久久99高清视频| 豆花视频logo进入官网| 爱爱视频天天操| 一区二区在线视频| 三级片一区| 青春草在线免费观看| 91在线视频精品| 日本黄色视频在线免费观看| 亚洲精品一区无码A片丁香花| www.激情| 久久精品婷婷| 少妇一区二区三区| 欧美a片在线观看| 超碰最新在线观看| 99色| 国产三级黄| 国产女人免费| 最好看的MV中文字幕国语| 91蝌蚪视频在线播放| 免费观看色情视频| 四虎黄色片| 亚洲AV无码成人片在线| 国产777| 91丨九色丨熟女丰满| www九九| 99久久久99久久91熟女| 91国产精品在线视频| 99视频热| 波多野结衣在线观看一区二区| 天美果冻麻豆国产一区| 亚洲AV无码乱码国产精品| 91人妻人人澡人人爽| 欧美成人高清视频| 97色色视频| 91精品人妻一区二区三区蜜桃| 九九热日本| 91在线视频精品| 亚洲成人免费在线视频| 黄色一级片免费看| 特级毛片AAAAAA蜜桃| 国产无码免费在线观看| 91豆花在线| 午夜婷婷| а√最新版在线中文8| 一级色色| 日本黄色免费视频| 日韩成人视频在线| 日韩无码A级片| av女人天堂| 人人操人人摸人人看| 久久久无码电影| 男女av在线| 大荫蒂视频另类XX| 91国产免费视频| 久久久久国产一区二区三区| 黄片51| 9久精品| 在线观看黄色视频网站| 91丨露脸丨熟女抽搐| 狠狠肏视频| 激情五月综合| 欧美夜夜骑| 先锋成人电影| 另类老妇奶性生BBwBB| a4yy午夜福利| 亚洲av网站在线观看| 国产乱伦不卡| 蜜桃av在线播放| 91性爱视频在线观看| 黄色A网站| 亚洲激情AV| 国产免费av片| 韩国无码成人电影啊荒| 成人无码区免费A片久久鸭| 日韩无码免费看| 国产三级性爱视频| 久操伊人大香蕉| 精品99视频| 北条麻妃JUX-869无码播放| 中文亚洲精品字幕电影| 国产毛片视频| 青青视频网| 亚洲精品黄色电影| 日韩美女免费性爱视频| 一级a一级a免费观看视频Al明星| 大香蕉国产在线视频| 中文字幕9| 少妇大战28厘米黑人| 黄片在线免费播放| 黄色视频在线观看地址| 在线免费人成视频| 熟妇槡BBBB槡BBBB| av无码免费| 91大神在线免费观看| 欧美三级片网站| 成人无码视频在线观看| 久久这里只有精品9| av影音先锋| 亚洲激情在线| 美女自慰网站在线观看| 影音先锋乱伦| 无码在线视频播放| 欧美色性乐汇操日本娘们| 操逼五月天| 日韩久久人妻| 国产精品人妻无码一区牛牛影视| 成人大战香蕉最新视频| 亚洲午夜福利电影| 欧美性爱怡红院| 国产女人十八水真多| 91日综合欧美| 影音先锋成人资源站| 黄色大片免费在线观看| 欧美污视频在线观看| 国产精品久久久一区二区三区 | 美女视频黄a视频全免费不卡| 国产91在线播放| 久久婷婷综合网| 天天干91| 男人天堂无码成人| 久久久大香蕉| 色婷婷AV国产精品| 人人干人人干人人干| 人人天天久久| 久久久国产一区二区三区| a在线| 91精品国产偷窥一区二区| 狠狠干婷婷| 亚洲av黄片| 中文字幕在线观看一区二区三区| 91色欲| 亚洲AV无码成人精品区| 69福利网| 亚洲成人大片| 成人黄片在线免费观看| 91青青草| 激情五月丁香婷婷| 国产91网| 青青草成人在线观看| 五十路熟妇| 夜夜狠狠躁日日| www.蜜桃| 欧美精品久久久久| 插逼视频网站| 日韩成人大片| 五月丁香婷婷激情综合| 久久久久久97电影院电影院无码 | 婷婷五月天大香蕉| 国产伦精品一区二区三区妓女下载| 亚洲AV在线看| 亚洲AV成人片无码网站| 亚洲人在线| 亚洲成人影片在线观看| 婷婷福利导航| 91官网在线观看| 久久99草| 波多野结衣一区二区| 国产TS丝袜人妖系列视频| 国产—a毛—a毛A免费看图| 精品国产久久久久久| 日韩无码A| 99热6| 伊人狼人香蕉| 成人网站免费在线| 美女被操91| 久久午夜电影| 日韩美女免费视频| www日本在线| 五月天四房播播| 做爱视频网站18| 国产亚洲av| 丁香五月中文字幕| 成人操B| 久久婷婷网| 人妻斩り43歳| 黑人亚洲娇小videos∞| 国产成人三级在线播放| 俺也去俺去啦| 成人免费毛片视频| 一级无码毛片| 国产黄色精品| 日本A片免费看| 91污| 男人的天堂免费视频| 色哟哟无码精品一区二区三区| 午夜亚洲视频| 日韩性无码| 国产精品9999久久久久仙踪林| 中国熟妇| 免费黄色在线视频| 日逼综合网| 91精品国产麻豆国产自产在线| 亚洲日韩免费视频| 天天射天天操天天干| 蜜桃视频com.www| 日韩不卡视频在线观看| 成人国产片| 国产女人免费| 人人操碰成人网| 一区二区精品| 九九热精品在线| 色婷婷一区| 亚洲aa| 国产一区二区成人久久919色| 你懂的网站在线观看| 成人无码免费视频| 欧美人成人无码| 久久大香蕉91| 无码人妻中文| 国内精品人妻无码久久久影院蜜桃| 人人操夜夜| 日韩中文毛片| 久久91久久久久麻豆精品| 在线免费看黄色| 日韩人妻一区二区| 午夜无码福利| 免费精品99| 在线免费观看毛片| 大香蕉av在线观看| 亚洲最大视频| 久久狼友| 国产精品无码ThePorn| 午夜福利爱爱视频| 成人午夜在线视频| A片大香蕉| 亚洲无码激情视频| 四川少妇搡bbw搡bbbb| 中文观看| 国产精品一区二区免费| 欧美视频在线观看一区| 天天干精品| 亚洲天堂2016| 国产熟妇搡BBBB搡BBBB搡| 黄色视频在线| 噜噜噜噜射| 精品国产一二三| 中文无码熟妇一区二区| 成人AV在线一区二区| 中文无码久久| 88海外华人免费一区| 福利视频网亚洲| 欧美城综合在线观看网| 撸一撸成人在线做爱视频。| 无码精品一区二区三区在线| 亚洲精品综合| 上海熟搡BBB搡BBBB| 亚洲精品综合| 成人免费A片| 青春草视频| 日韩大香蕉| 精品视频在线观看| 亚洲激情| 国产亚洲午夜久久久成人电影| 亚洲无码门| 日韩一级一片| 国产91人| 黑人干亚洲人| 日本高清视频www| av国产精品| 天天日天天操天天日| 免费无码一区二区三区四区五区| 5252a我爱haose01我愿| 国产青草视频在线观看| 久久久无码电影| 男人的天堂色琪琪| 五月丁香婷婷在线观看| 91av在线观看视频| 蜜桃影院| 午夜成人网站在线观看| 无码一区视频| 天堂久久久久| 国产AV播放| 想要xx在线观看| 亚洲AV性爱| 国产精品福利小视频| 国产美女全裸网站| 色呦呦一区二区三区| 黑人无码AV黑人天堂无码AV| 操屄免费视频| 三级小说| 婷婷六月天| 91sese| 2025AV中文字幕| 91色色网| 成人无码欧美大片免费看| 婷婷丁香五月在线| 亚洲三级视频在线播出| 91吴梦梦无码一区二区| 国产aⅴ| 中文字幕人妻在线中文乱码怎么解决 | 午夜福利123| 色欲av网站| 特级西西人体444www高清大胆 | 亚洲一页| av在线精品| 日本黄色免费视频| 三洞齐开Av在线免费观看| 日韩欧美视频一区国产欧美在线| 国产欧美二区综合中文字幕精品一| 玖玖热在线视频| 港澳日韩黄片| 强伦人妻一区二区三区视频| 国产激情在线观看视频| 日韩精品视频一区二区三区| 婷婷激情av| 日韩小黄片| 一级爱爱片| 五十路在线视频| 久久国产精品波多野结衣AV | 日本欧美中文字幕| 无码人妻久久一区二区三区蜜桃 | 加勒比黑人和翔田千里在线播放| 欧美精品18videosex性欧美| 小小拗女BBw搡BBBB搡| 搡BBB搡BBBB搡BBBB'| 性爱视频网页| 日韩精品免费无码视频| 亚洲色小说| 波多野结衣视频在线| 天天拍夜夜操| 精品九九九| 天堂黄片| 成人黄网站在线观看| 国产黄色片在线播放| 各种BBwBBwBBwBBw| 人妻精品在线| 老熟女-ThePorn| 日韩综合一区| 高清无码免费视频| 夜夜狠狠躁日日| 无码在线播放观看| 欧美久久一区| 免费二区| 午夜色婷婷| 第一色影院| 久久香蕉网| 成人做爰100部片视频| 日韩AV在线天堂| 亚洲精品国产精品国自产| 日韩无码视频网| 国产一级a毛一级a毛观看视频网站| 色五月综合| 国产婷婷| 五月天激情网址| 久久久久久久久久久久国产精品| 国产激情视频网站| 一级操逼毛片| 黄色影片在线观看| 日本欧美在线| 神马午夜av| 中日韩精品A片中文字幕| 国产精品免费网站| 自拍偷拍15p| 7777影视电视剧在线观看官网| 少妇搡BBBB搡BBBB毛多多| 色青娱乐| 成人777777| 国产口爆视频| 激情无码一区二区| 17c.白丝喷水自慰| 亚洲色图在线观看| 中文无码熟妇一区二区| 欧美成人免费观看| 亚洲欧美影院| 性满足BBWBBWBBW| 激情婷婷五月| 一本一道vs波多野结衣| 国产一二三四| 日中文字幕| 黄色视频久久| 日本不卡一区二区| 丁香五月激情中文字幕| 天天久久毛片| 俺去俺来也| 免费无码AV| 精品福利在线| 逼特逼视频网站| 亚洲一区2区| 免费无码婬片AAAA片老婦| 99热都是精品| 亚洲系列| 91成人综合| 欧洲三级网观看| 国产久久精品| 爱草视频| 成人视频123| 高清无码网站在线观看| 肏屄视频在线播放| 欧美视频在线一区| 综合一区二区| 国产精品3| 日韩精品A片| 青青青草视频在线观看| 免费小视频| 日韩大码无码| 三级无码在线播放| 丁香婷婷六月天| 欧美9999| 欧美性猛交一区二区三区精品| 日本在线免费视频| 久久色播| 欧美成人自拍| 久久亚洲中文字幕乱码| 国产精品在线免费| 欧美性爱手机在线| 在线免费观看黄色电影| 大香蕉现在视频中心一| 三级理论网站| 亚洲AV无码精品久久一区二区 | 中文字幕无码高清| 成人A毛片| 人妻少妇精品视频一区二区三区 | 牛牛影视av| 国产一级一片免费播放放a| 日皮视频在线观看免费| 青草青草视频| 无码AV一区二区| 婷婷开心色四房播播在线| av在线无码观看| 欧美激情片| 亚洲无码视频免费看| 欧美操逼免费视频| 亚洲精品影视| 亚洲国产成人电影| 久操影视| 日韩无码乱码| 日韩亚洲中文字幕| 国产91在线播放| 在线观看免费视频无码| 国产高清无码一区| 啪啪视频免费观看| 殴殴美日韩在线| 亚洲二页| 青青青国产| 人人干人人草| 91嫩草久久久久久久| 三级片视频网址| 国产熟女乱伦视频| 亚洲精品字幕久久久久| 日韩AV中文字幕在线播放| 欧美日韩精品一区二区| 国产免费视频69| 人人爱人人操人人干| 黄色视频小说| 婷婷涩嫩草鲁丝久久午夜精品| 免费的AV网站| 国产色情视频在线观看| 青娱乐自拍视频| 精品AV国产| 精品人伦一区二区三区| 成人无码一区二区| 久在草| AV黄色在线| 亚洲精品大片| 三上悠亚一区二区| 人妻少妇精品无码| 欧美强开小嫩苞| 亚洲无码激情在线| 五月天婷婷影院影院| 四川乱子伦95视频国产| 日韩无码人妻一区二区三区| 久久99精品国产.久久久久久| www欧美日韩| 亚洲第一狼人综合网| jt33免费观看高清| 91人妻无码精品一区二区| 亚洲成人大香蕉视频| 国产一级二级三级片| 波多野结衣视频在线| 波多野结衣vs黑人巨大| 91亚洲精品国偷拍自产在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 日本特级黄A片免费观看| 东京热综合影院| 国产一区二区视频在线| 日韩在线高清| 在线观看免费欧美操逼视频| 中文字幕一区二区三区在线观看 | 日韩国产成人| 中文字幕视频在线免费观看| 3d动漫精品一区二区三区在线观看 | 91久久香蕉囯产熟女线看蜜桃| 韩国毛片基地久久| www亚洲视频| 日韩在线视频网站| 老司机精品视频在线观看| 国产精品免费观看久久久久久久久 | 成年人黄色视频网站| 久热精品视频在线观看| 五月丁香在线播放| 久久精品成人导航|