• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    針對SECD抽象機的基于蹤跡的即時編譯技術(shù)

    2015-12-23 01:13:12于成龍廖湖聲武辰之
    計算機工程與設(shè)計 2015年2期
    關(guān)鍵詞:蹤跡調(diào)用字節(jié)

    于成龍,廖湖聲,武辰之,蘇 航

    (1.北京工業(yè)大學(xué) 計算機學(xué)院,北京100124;2.北京工業(yè)大學(xué) 軟件學(xué)院,北京100124)

    0 引 言

    即時編譯技術(shù)是在程序運行時將部分程序片段的解釋執(zhí)行轉(zhuǎn)化為編譯執(zhí)行的程序優(yōu)化技術(shù)。例如,在HotSpot虛擬機中,Java字節(jié)碼程序最初是由解釋器直接解釋執(zhí)行,當虛擬機發(fā)現(xiàn)某個方法或是代碼塊執(zhí)行次數(shù)非常頻繁時,就會把這些代碼識別為 “熱點”,由即時編譯器將其編譯成本地平臺相關(guān)的機器碼[1]。

    傳統(tǒng)的即時編譯器以整個方法為單位進行即時編譯(如HotSpot),這將導(dǎo)致方法內(nèi)執(zhí)行頻度不高的代碼也參與編譯,增加了編譯開銷。為解決這一問題,Gal A 等提出了基于 蹤 跡 的 即 時 編 譯(trace-based just-in-time compilation)[2]進行熱點探測。即時編譯時以 “蹤跡”(trace)為單位,比以方法為單位要精細得多,而且蹤跡可以跨越方法,能提供更多優(yōu)化機會。

    本文提出了一種基于蹤跡的通用即時編譯技術(shù),將在SECD 指令序列的執(zhí)行過程中,監(jiān)測程序執(zhí)行情況,將執(zhí)行頻繁的代碼編譯為Java字節(jié)碼。為保證編譯所得的Java字節(jié)碼能正常運行,本文還介紹了解釋執(zhí)行環(huán)境與Java字節(jié)碼程序執(zhí)行環(huán)境的動態(tài)轉(zhuǎn)換方法。任何用SECD 抽象機實現(xiàn)的編程語言都可采用該技術(shù)來提高程序執(zhí)行效率。此外,本文研制了一個采用該技術(shù)的通用執(zhí)行引擎框架,并使用該框架實現(xiàn)了XQuery語言。實驗結(jié)果表明,采用本文所給出的即時編譯技術(shù)可以加快XQuery程序的執(zhí)行速度。

    1 基礎(chǔ)概念

    1.1 SECD抽象機

    SECD抽象機[3]是一種經(jīng)典的操作語義,可以用于λ表達式的求值,經(jīng)常用在程序設(shè)計語言的驗證與實現(xiàn)中。SECD 抽象機本身由操作數(shù)棧 (stack,簡記為ss)、環(huán)境(environment,簡記 為se)、代 碼 序 列 (control,簡 記 為sc)、轉(zhuǎn)儲區(qū) (dump,簡記為sd)4 部分組成,ss、se、sd的初始狀態(tài)均為空,sc則保存著將被抽象機執(zhí)行的SECD指令。在執(zhí)行SECD 指令的過程中,中間結(jié)果保存在ss中等待后續(xù)使用,局部變量保存在se中,sd 則保存著函數(shù)調(diào)用的相關(guān)信息,用于函數(shù)調(diào)用現(xiàn)場的保護與恢復(fù)。表1給出了一個SECD 指令集實例。

    表1 SECD 抽象機常用指令集

    1.2 Java虛擬機與Java棧幀

    Java虛擬機 (Java virtual machine,JVM)是Java程序運行的基礎(chǔ),Java程序源代碼經(jīng)過編譯之后得到Java字節(jié)碼,JVM 解釋執(zhí)行字節(jié)碼指令。另外,現(xiàn)代JVM 常用即時編譯技術(shù)來加快程序的執(zhí)行速度。

    棧幀 (stack frame)[4]則是JVM 進行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),每當JVM 執(zhí)行一個方法時,會創(chuàng)建一個棧幀并將其壓入到JVM 的Java虛擬機棧中,方法執(zhí)行完畢后該棧幀將被彈出。棧幀中保存一個Java方法的局部變量區(qū)、操作數(shù)棧、方法返回地址等信息。一個方法在運行過程中,將根據(jù)字節(jié)碼指令從棧幀局部變量區(qū)或是其它JVM 組件中讀取數(shù)據(jù)并將其壓入到棧幀中的操作數(shù)棧,在棧上計算出結(jié)果后,再將結(jié)果彈棧、寫入局部變量區(qū)或是將其作為方法調(diào)用結(jié)果返回。

    1.3 基于蹤跡的即時編譯

    下面給出基于蹤跡的即時編譯中的一些基本概念:

    標簽:劃分基本塊的標志,是基本塊的入口,用于標記分支。

    錨點:是蹤跡的入口,是一種特殊的標簽。

    蹤跡:是一條可跨越函數(shù)邊界的指令序列,由錨點、標簽和子蹤跡組成,熱點蹤跡則是指執(zhí)行頻率超過預(yù)設(shè)閾值、需要進行即時編譯的蹤跡,下文將簡稱作 “熱蹤”。

    蹤跡樹:以一個蹤跡作為主干,多個蹤跡為分支所組成的樹,用于表示較復(fù)雜的程序結(jié)構(gòu)。

    一般來講,基于蹤跡的即時編譯主要分為識別錨點、記錄蹤跡、代碼生成和執(zhí)行4個階段。當識別出一個錨點后,執(zhí)行引擎在繼續(xù)執(zhí)行程序的同時,將從該錨點開始記錄正在執(zhí)行的指令,再次遇到該錨點則結(jié)束記錄操作,此時即得到一個完整的蹤跡。每個蹤跡的執(zhí)行次數(shù)將被記錄,執(zhí)行次數(shù)超過預(yù)設(shè)閾值的蹤跡被識別為熱蹤,并進一步編譯為目標代碼。當執(zhí)行引擎再次執(zhí)行熱蹤時則執(zhí)行目標代碼。

    以表2所給出的程序為例,該程序的控制流如圖1 (a)所示,假定識別熱蹤的閾值為200,根據(jù)基于蹤跡的熱點探測算法,該程序在運行過程中,基本塊2→3→4→6所組成的循環(huán)將被識別為熱蹤并被編譯成目標代碼,當獲得目標代碼后、再次執(zhí)行2→3→4→6時,該循環(huán)所對應(yīng)的目標代碼將被執(zhí)行,執(zhí)行結(jié)束后再切換到解釋執(zhí)行,執(zhí)行后續(xù)代碼。

    表2 示例程序

    圖1 示例程序控制流圖及其熱蹤

    2 針對SECD抽象機的基于蹤跡的即時編譯技術(shù)

    2.1 基本過程

    在讀取用戶編寫的程序代碼之后,首先將源代碼翻譯成等價的SECD 指令序列,并且指令序列中的循環(huán)頭部設(shè)置為錨點。在解釋執(zhí)行指令序列的過程中,進行如下操作:

    (1)記錄蹤跡:當執(zhí)行引擎遇到一個錨點,則創(chuàng)建一個蹤跡并將之后執(zhí)行的每條指令記錄到這個蹤跡中,直至再次遇到這個錨點。如果在記錄過程中遇到新的錨點,則將正在記錄的蹤跡暫存起來,開始新的蹤跡的記錄,而這條新的蹤跡可以作為子蹤跡與之前暫存的蹤跡進行合并。一個蹤跡記錄的是一個程序某次執(zhí)行的路徑,而之后該程序的執(zhí)行可能會與這條路徑不同。因此,在記錄蹤跡的過程中,如果程序中出現(xiàn)分支,則在蹤跡中加入一條GUARD 指令,用于代替沒有被執(zhí)行的程序分支。此外,記錄每個蹤跡的運行次數(shù),當運行次數(shù)超過閾值時則將其視為熱蹤,將其提交給即時編譯器。

    (2)代碼生成:即時編譯器將熱蹤編譯成Java字節(jié)碼,并以回填的方式在字節(jié)碼中生成用于切換執(zhí)行方式的代碼,包括調(diào)用代碼序列、返回代碼序列兩部分。調(diào)用代碼序列為JVM 棧幀中的操作數(shù)棧分配空間、向棧幀中填寫信息;返回代碼序列則用于恢復(fù)SECD 抽象機的機器狀態(tài),保證編譯執(zhí)行結(jié)束后SECD 執(zhí)行引擎能繼續(xù)往下執(zhí)行。更詳細說明參見2.3.3。

    (3)執(zhí)行:在熱蹤被編譯成Java 字節(jié)碼之后,當SECD 執(zhí)行引擎再次執(zhí)行到熱蹤時則切換到編譯執(zhí)行,調(diào)用Java字節(jié)碼,字節(jié)碼執(zhí)行結(jié)束后則切換回解釋執(zhí)行,繼續(xù)執(zhí)行后續(xù)代碼。

    2.2 SECD指令翻譯

    根據(jù)設(shè)計目的的不同,SECD 抽象機的指令集可以有不同的實現(xiàn),而本文采用表1中給出的指令集作為文章中提到的SECD 抽象機的指令集,則表2所給出的源程序?qū)?yīng)的SECD 指令序列見表3。

    表3 示例程序SECD 指令序列

    2.3 即時編譯

    2.3.1 記錄蹤跡

    根據(jù)起始位置的不同,蹤跡可分為方法蹤跡 (method trace)、循環(huán)蹤跡 (loop trace)兩種[5]。方法蹤跡的錨點位于某個方法的入口,而循環(huán)蹤跡的錨點則位于某個循環(huán)結(jié)構(gòu)的開始位置。本技術(shù)在探測熱蹤時,主要探測循環(huán)蹤跡,當執(zhí)行引擎解釋執(zhí)行SECD 指令序列時,如果碰到一個循環(huán),則對該循環(huán)計數(shù),當超過預(yù)設(shè)閾值時則將循環(huán)體中常用部分提取出來,作為一個循環(huán)蹤跡,提交給即時編譯器編譯成Java字節(jié)碼。例如,在執(zhí)行表3中SECD 指令序列時,從標簽f1_loop開始到JMP f1_loop指令這段SECD指令序列是對應(yīng)于表2中的for循環(huán),當這段指令序列執(zhí)行次數(shù)超過閾值時,將被視為熱蹤提取出來,見表4。

    假設(shè)正在被執(zhí)行引擎執(zhí)行的程序中包含有兩個分支pa和pb,只有pb分支被記錄到一個熱蹤中,但在該熱蹤的目標代碼的某次執(zhí)行時,卻需要執(zhí)行pa分支,這種現(xiàn)象被稱作旁路退出 (side exit)。當旁路退出發(fā)生時,需要從編譯執(zhí)行切換到解釋執(zhí)行。為此,在記錄一個蹤跡時需要向蹤跡中插入GUARD 指令,用于標記可能發(fā)生旁路退出的位置。在代碼生成階段將根據(jù)GUARD 指令生成用于切換執(zhí)行環(huán)境的Java字節(jié)碼。以圖1 (a)為例,基本塊3中包含有兩個分支,路徑3→5→6并沒有被記錄到圖1 (b)所給出的蹤跡中,因此在這個蹤跡中加入一個GUARD 指令。

    表4 示例程序熱蹤及其字節(jié)碼

    2.3.2 代碼生成

    SECD 抽象機和JVM 都是基于棧的虛擬機,組成SECD抽象機的每個部分都可以在JVM 中找到功能相似的部分:SECD 操作數(shù)棧對應(yīng)于JVM 棧幀的操作數(shù)棧 (簡記為fs),SECD 環(huán)境對應(yīng)于棧幀局部變量區(qū) (簡記為fe),SECD 指令序列對應(yīng)于Java字節(jié)碼,而SECD 轉(zhuǎn)儲區(qū)則對應(yīng)于Java虛擬機棧 (簡記為fd)。同時,大部分SECD 指令都可以找到功能相同的JVM 指令,因而在將熱蹤翻譯成Java字節(jié)碼時按照對應(yīng)關(guān)系逐條翻譯SECD 指令即可。對于沒有對應(yīng)的JVM 指令的SECD 指令,則可以根據(jù)這條SECD 指令的語義,生成一個等價的Java方法,在字節(jié)碼文件中對應(yīng)位置加入調(diào)用該方法的指令。表4給出了一個熱蹤翻譯成字節(jié)碼的實例,為方便闡述,將翻譯熱蹤所得的字節(jié)碼記作bcode。

    另一方面,解釋執(zhí)行的運行時環(huán)境主要包括SECD 抽象機的ss、se和sd,而編譯執(zhí)行的運行時環(huán)境則是JVM 中的fs、fe、fd 以及Java堆等組件。不同執(zhí)行方式下運行時數(shù)據(jù)保存在不同的位置。要保證熱蹤對應(yīng)的字節(jié)碼在JVM 中能正確地執(zhí)行,就必須在字節(jié)碼執(zhí)行前,將SECD抽象機中的部分數(shù)據(jù)寫入到JVM 中相應(yīng)位置;當發(fā)生旁路退出、需要切回到解釋執(zhí)行時,也需要將執(zhí)行字節(jié)碼所得的中間結(jié)果回寫到解釋運行時環(huán)境中。本文將這些操作統(tǒng)稱為環(huán)境切換,具體過程參見2.3.3。

    此外,為了生成將se中的變量寫入到fe 或是利用fe更新se 的代碼,還需要保存熱蹤中各個變量在se、fe中存儲位置的映射關(guān)系。為此,在代碼生成過程中,需要維護一張映射表 (以下記作varMap),每當在熱蹤中遇到對se中的變量進行讀、寫操作的指令時,則將該變量位置以及fe對應(yīng)變量的位置保存到該映射表中。

    2.3.3 環(huán)境切換

    在將熱蹤翻譯成字節(jié)碼之后,為了進行環(huán)境切換,需要在bcode 的開始位置生成調(diào)用代碼序列,在bcode 中GUARD 指令對應(yīng)的位置生成返回代碼序列。

    調(diào)用代碼序列為fs分配空間,將即時編譯所需的ss內(nèi)部分元素按照順序壓入fs內(nèi),并根據(jù)varMap 將se 內(nèi)相關(guān)變量寫入fe,為此需要先計算fs需要分配多大空間。這一計算在生成bcode之后進行,通過統(tǒng)計熱蹤中每條分支的所有指令對ss的壓棧、彈棧次數(shù),可得出整個熱蹤所需的fs的空間大小 (記作stackNum),具體算法參見表5。假設(shè)熱蹤中指令條數(shù)為n,算法至多對所有指令遍歷一遍,因此算法時間復(fù)雜度為O(n),空間復(fù)雜度為O(n)。計算出stack-Num 后,根據(jù)stackNum 和varMap,即可在已有的字節(jié)碼中回填調(diào)用代碼序列。

    環(huán)境切換大體流程如圖2 所示,切換為編譯執(zhí)行后,首先執(zhí)行調(diào)用代碼序列,fs、fe 將會準備好必要的數(shù)據(jù)(fs中壓入val0、val1,fe中存入val0、val1),熱蹤對應(yīng)的字節(jié)碼就可以正確地執(zhí)行;當字節(jié)碼執(zhí)行完畢后,fs、fe保存著熱蹤的執(zhí)行結(jié)果 (fs中的val2、val3,fe中新的變量值val0’、val1’),執(zhí)行返回代碼序列后這些執(zhí)行結(jié)果將被回寫到SECD 抽象機中,執(zhí)行引擎繼續(xù)解釋執(zhí)行后續(xù)代碼。

    圖2 環(huán)境切換中各部件的變化

    表5 計算棧幀操作數(shù)棧容量的算法

    返回代碼序列則用于將fs內(nèi)的數(shù)據(jù)按照順序全部壓入ss,根據(jù)varMap 將fe 數(shù)據(jù)寫入se 對應(yīng)位置。如果在熱蹤中有自定義函數(shù)調(diào)用且調(diào)用自定義函數(shù)時執(zhí)行了沒有包含在熱蹤中的代碼,還需要向sd 中寫入函數(shù)調(diào)用信息,用于恢復(fù)SECD 抽象機的狀態(tài)。

    完成上述工作后,最終用于即時編譯的Java字節(jié)碼見表6 (限于篇幅,僅給出了大體框架)。

    表6 示例程序的Java字節(jié)碼

    當熱蹤中包含自定義函數(shù)部分代碼時,環(huán)境切換會更復(fù)雜。例如,圖3 (a)表示在運行時刻,foo2函數(shù)中提取出traceFunc作為熱蹤、進行了即時編譯,該熱蹤又調(diào)用了自定義函數(shù)foo3,而foo3 中僅有一條分支被記錄到熱蹤中。如果在某次編譯執(zhí)行foo3函數(shù)時發(fā)生旁路退出,則需中止即時編譯、沿圖3 (a)中虛線所示路徑返回到SECD執(zhí)行引擎,從foo3中GUARD 指令對應(yīng)位置繼續(xù)解釋執(zhí)行后續(xù)代碼。由于foo3、traceFunc 還沒有執(zhí)行完,必須在foo3中GUARD 指令所在位置添加返回代碼序列,進行如下操作:

    將foo3函數(shù)所對應(yīng)的fs、fe中的數(shù)據(jù)、foo3的返回地址保存在一個變量中,并將該變量壓入sd 中;

    終止foo3的運行,并返回一個特定標記值G,以便和正常的函數(shù)調(diào)用過程相區(qū)分;

    圖3 對包含自定義函數(shù)的熱蹤的處理

    在traceFunc調(diào)用foo3的位置加入對foo3返回值的判斷,如果返回值為G 則同樣將traceFunc函數(shù)對應(yīng)的fs、fe、traceFunc的返回地址保存在一個變量中,并將該變量壓入sd,終止traceFunc的運行,返回標記值G (如果熱蹤中包含多個自定義函數(shù)的嵌套調(diào)用,則可能需要重復(fù)這一過程,直至返回到SECD 解釋執(zhí)行引擎)。

    當即時編譯結(jié)束后,SECD 解釋執(zhí)行引擎讀取編譯執(zhí)行的結(jié)果,如果是G 則說明調(diào)用自定義函數(shù)時發(fā)生了旁路退出,此時將sd 內(nèi)部分元素逆序 (保證與函數(shù)調(diào)用順序一致),然后讀取sd 棧頂元素用來更新當前SECD 抽象機中的ss、se和指令PC,恢復(fù)現(xiàn)場,然后繼續(xù)解釋執(zhí)行即可,如圖3 (b)所示。

    對于遞歸函數(shù)調(diào)用,目前本技術(shù)所采用的熱點探測策略將任何遞歸函數(shù)都視為熱點,因而遞歸函數(shù)的定義將被包含在熱蹤中并被翻譯成字節(jié)碼,編譯執(zhí)行時調(diào)用遞歸函數(shù)只需將參數(shù)傳遞給該函數(shù)即可,不需要進行環(huán)境切換。

    2.4 通用執(zhí)行引擎框架

    基于蹤跡的即時編譯通用執(zhí)行引擎框架的基本結(jié)構(gòu)如圖4所示,該框架主要由以下4部分組成:

    SECD 翻譯器:將源程序翻譯成語義等價的SECD 指令序列;

    內(nèi)建函數(shù)庫:保存庫函數(shù),需要根據(jù)要實現(xiàn)的語言而變化;

    SECD 執(zhí)行引擎:執(zhí)行SECD 指令序列,實現(xiàn)SECD 指令的即時編譯,并將計算結(jié)果返回;

    JVM:執(zhí)行Java字節(jié)碼。

    圖4 通用執(zhí)行引擎框架

    任何編程語言,只要能夠?qū)⒃撜Z言翻譯為SECD 指令序列,都可以利用該框架來實現(xiàn)這種語言的執(zhí)行引擎。

    3 實 驗

    本文實現(xiàn)了2.4中提到的通用執(zhí)行引擎框架,并利用該框架實現(xiàn)了一個XQuery[6]執(zhí)行引擎。實驗環(huán)境如下:Intel Xeon CPU E5-1607 3GHz,8G 內(nèi) 存,Ubuntu 12.04 LTS,JDK 1.6update 27。

    實驗中分別在解釋執(zhí)行、函數(shù)級即時編譯、基于蹤跡的即時編譯3種執(zhí)行方式下對13個測試用例進行了測試,其中10 個用例來自于W3C XML Query Use Cases,Q1、Q2、Q3參見表7。實驗結(jié)果如圖5所示,需要說明的,函數(shù)級即時編譯、基于蹤跡的即時編譯的運行時間包括了在運行時編譯目標代碼的時間。

    在所有測試用例中,基于蹤跡的即時編譯對解釋執(zhí)行的加速比平均可以達到1.11,最好情況下可以達到1.43。在這些用例中,1.2.4.6、Q1、Q2、Q3包含有多重循環(huán)或是多次被調(diào)用的自定義函數(shù),導(dǎo)致這些用例中的大部分代碼被識別為熱蹤并編譯執(zhí)行,因而可以獲得比較好的性能提升。其它用例則只包含單重循環(huán),識別出的熱蹤運行次數(shù)相對較少,不足以帶來明顯的性能提升。在增大輸入文件,使得XQuery查詢的執(zhí)行次數(shù)增加后,加速比變化如圖6所示。顯然,隨著XQuery查詢的執(zhí)行次數(shù)增加,基于蹤跡的即時編譯所帶來的加速效果也會變得更明顯。

    表7 測試用例

    另一方面,所有測試用例中,僅1.2.4.6、Q2、Q3中包含有自定義函數(shù)。而為了保證實驗條件相同,實驗中所采用的函數(shù)級即時編譯并沒有引入現(xiàn)代虛擬機中的棧上替換等優(yōu)化技術(shù),使得函數(shù)級即時編譯只會對程序中多次執(zhí)行的自定義函數(shù)進行編譯。因此,對于不包含自定義函數(shù)的測試用例,由于探測熱點所帶來的開銷,函數(shù)級即時編譯的運行速度略微慢于解釋執(zhí)行。而對于包含自定義函數(shù)的用例 (1.2.4.6、Q2、Q3),函數(shù)級編譯執(zhí)行要快于解釋執(zhí)行,但仍比基于蹤跡的即時編譯執(zhí)行要慢。這是由于在1.2.4.6、Q2、Q3中自定義函數(shù)調(diào)用出現(xiàn)在循環(huán)中,而熱蹤會將整個循環(huán)編譯,在函數(shù)級編譯中被編譯的代碼必然包含在熱蹤中。在這些例子中,熱蹤的編譯不但可以減少自定義函數(shù)本身的執(zhí)行時間,而且可以減少他們的調(diào)用開銷和外圍循環(huán)執(zhí)行時間。

    圖5 運行時間比較

    圖6 不同輸入規(guī)模下的加速比變化

    4 相關(guān)工作

    4.1 基于蹤跡的即時編譯

    Dynamo[7]是第一個實現(xiàn)了基于蹤跡的即時編譯的編譯器,它在運行時使用循環(huán)體的頭部來標識一個蹤跡,并沒有創(chuàng)建實際循環(huán)蹤跡。而本技術(shù)中同樣采用循環(huán)體頭部來標識蹤跡,省卻了基于蹤跡的即時編譯一般處理流程中的分析階段。

    DynamoRIO 發(fā)展了Dynamo,它是一個包含了蹤跡和部分求值的解釋框架,但是DynamoRIO 的蹤跡仍然在機器碼層面,沒有包含解釋器層面的高級信息。這使得蹤跡的探測需要增加大量的額外標注,一些編譯優(yōu)化也無法在這個層面上進行。

    Gal A等人開發(fā)了第一個高性能的基于蹤跡的即時編譯器HotpathVM,該虛擬機動態(tài)探測頻繁運行的字節(jié)碼,將其翻譯為SSA (static single assignment)作 為 中 間 表 示,之 后SSA將被編譯為機器碼。本技術(shù)中程序以SECD 指令作為中間代碼,找到熱蹤后將會把熱蹤翻譯成Java字節(jié)碼并執(zhí)行。

    Hubl C等人基于HotSpot,開發(fā)了不跨越函數(shù)的基于蹤跡的熱點探測器,該解決方案由于不跨越函數(shù),蹤跡都很短小,節(jié)約了探測和編譯的時間,但無法進行全局優(yōu)化。

    此外,基于蹤跡的即時編譯技術(shù)還被廣泛應(yīng)用于其它項目中,如Python語言的實現(xiàn)PyPy[8],Mozilla的Trace-Monkey[9],微 軟 公 司 的SPUR[10]項 目,Android 的Dalvik虛擬機[11,12]等。

    4.2 XQuery相關(guān)實現(xiàn)

    目前XQuery執(zhí)行引擎多數(shù)以解釋方式執(zhí)行XQuery查詢。Axyana Software開發(fā)的Qizx/Open是一個開源的使用Java實現(xiàn)的XML查詢解釋器。Galax是一個輕量級可移植的XQuery的開源實現(xiàn),已成為研究各種XQuery優(yōu)化方法的實驗平臺。

    另一方面,為了提高XQuery執(zhí)行效率,不少研究人員已展開編譯實現(xiàn)XQuery語言的研究。Qexo是GNU 實現(xiàn)的XQuery執(zhí)行引擎,它部分實現(xiàn)了XQuery 語言。Qexo采用編譯實現(xiàn)的方式,將XQuery源程序編譯為可執(zhí)行的Java字節(jié)碼,并加載到JVM 中執(zhí)行。但Qexo側(cè)重于從編程語言角度實現(xiàn)XQuery,與XML 相關(guān)的優(yōu)化策略應(yīng)用較少。XQC編譯系統(tǒng)[13]則將XQuery程序全部翻譯成Java字節(jié)碼,但如果XQuery程序中大部分代碼執(zhí)行頻度較低,編譯時間較長,可能執(zhí)行效率反而不及直接解釋執(zhí)行,并且XQC并不支持樹模式查詢。而XQuery Hotspot編譯系統(tǒng)[14]則采用HotSpot的熱點探測策略,同樣不支持樹模式,并且沒有充分利用JVM 中已有的棧、堆等結(jié)構(gòu)。

    5 結(jié)束語

    本文討論了一種針對SECD 抽象機的基于蹤跡的即時編譯技術(shù),該技術(shù)將編程語言翻譯成SECD 指令序列,以解釋方式執(zhí)行SECD 指令序列,將程序中執(zhí)行頻率高的蹤跡翻譯成Java字節(jié)碼,進行即時編譯。實驗結(jié)果表明,利用該技術(shù)可以提升程序的運行速度。

    目前本文中已給出的SECD 指令集并不支持高階函數(shù),因而還不能對包含有高階函數(shù)特性的編程語言進行即時編譯,并且翻譯目標代碼的過程中還可以利用函數(shù)內(nèi)聯(lián)、逃逸分析等技術(shù)對目標代碼進行優(yōu)化。

    [1]ZHOU Zhiming.Understanding Java virtual machine [M].Beijing:China Machine Press,2011:287 (in Chinese). [周志明.深入理解Java虛擬機 [M].北京:機械工業(yè)出版社,2011:287.]

    [2]Bebenita M,Chang M,Wagner G,et al.Trace-based compilation in execution environments without interpreters [C]//Proceedings of the 8th International Conference on the Principles and Practice of Programming in Java.ACM,2010:59-68.

    [3]Narita K,Nishizaki S Y,Mizuno T.A simple abstract machine for functional first-class continuations [C]//International Symposium on Communications and Information Technologies.IEEE,2010:111-114.

    [4]Lindholm T,Yellin F,Bracha G,et al.The Java virtual machine specification [M].Addison Wesley,2013:17.

    [5]Hubl C,Mssenbck H.Trace-based compilation for the Java HotSpot virtual machine[C]//Proceedings of the 9th International Conference on Principles and Practice of Programming in Java.ACM,2011:129-138.

    [6]W3CXML query working group,XQuery 1.0:An XML query language[EB/OL].[2010-12-14].http://www.w3.org/TR/2010/REC-xquery-20101214/.

    [7]Hayashizaki H,Wu P,Inoue H,et al.Improving the performance of trace-based systems by false loop filtering [J].ACM SIGPLAN Notices,2012,47 (4):405-418.

    [8]Bolz F C,Cuni A,F(xiàn)ijalkowski M,et al.Tracing the metalevel:PyPy’s tracing JIT compiler[C]//Proceedings of the 4th Workshop on the Implementation,Compilation,Optimization of Object-Oriented Languages and Programming Systems.ACM,2009:18-25.

    [9]Gal A,Eich B,Shaver M,et al.Trace-based just-in-time type specialization for dynamic languages[J].ACM SIGPLAN Notices,2009,44 (6):465-478.

    [10]Bebenita M,Brandner F,F(xiàn)ahndrich M,et al.SPUR:A trace-based JIT compiler for CIL [J].ACM SIGPLAN Notices,2010,45 (10):708-725.

    [11]Perez G A,Kao C M,Chung Y C,et al.A hybrid just-intime compiler for android:Comparing JIT types and the result of cooperation [C]//Proceedings of the International Conference on Compilers,Architectures and Synthesis for Embedded Systems.ACM,2012:41-50.

    [12]Cheng B,Buzbee B.A JIT compiler for Android’s Dalvik VM[C]//Google I/O Developer Conference,2010.

    [13]Yuan F,Chen Y,Liao H.XQC:A compiler for XQuery[C]//International Conference on Computer Science and Software Engineering.IEEE,2008:360-363.

    [14]ZHANG Kailian,LIAO Husheng,SU Hang.Supporting framework of hotspot compiler system for XQuery [J].Computer Engineering,2011,37 (24):28-31 (in Chinese).[張開練,廖湖聲,蘇航.XQuery語言HotSpot編譯系統(tǒng)的支撐框架 [J].計算機工程,2011,37 (24):28-31.]

    猜你喜歡
    蹤跡調(diào)用字節(jié)
    母獅子的蹤跡
    No.8 字節(jié)跳動將推出獨立出口電商APP
    為什么獨角仙總是愛打架
    森林里的“彩色蹤跡”
    核電項目物項調(diào)用管理的應(yīng)用研究
    No.10 “字節(jié)跳動手機”要來了?
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    簡談MC7字節(jié)碼
    老廣州:“水城”的蹤跡及風(fēng)情
    中國三峽(2017年2期)2017-06-09 08:15:25
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    成年动漫av网址| av有码第一页| 久久亚洲国产成人精品v| 美女高潮喷水抽搐中文字幕| 午夜福利乱码中文字幕| 久久久久久久大尺度免费视频| 97在线人人人人妻| 高清视频免费观看一区二区| 亚洲国产精品一区二区三区在线| 母亲3免费完整高清在线观看| 久久精品久久久久久噜噜老黄| 午夜激情久久久久久久| 91老司机精品| 精品国产国语对白av| 一级a爱视频在线免费观看| 亚洲国产成人一精品久久久| avwww免费| 深夜精品福利| 最近最新中文字幕大全免费视频| 精品国产乱码久久久久久小说| 亚洲第一欧美日韩一区二区三区 | 黄色片一级片一级黄色片| 黑人猛操日本美女一级片| 精品卡一卡二卡四卡免费| 夜夜骑夜夜射夜夜干| 精品福利观看| 亚洲欧美激情在线| 午夜精品国产一区二区电影| 日韩制服丝袜自拍偷拍| 黄片小视频在线播放| 国产成人精品无人区| 香蕉国产在线看| 99热网站在线观看| 高清在线国产一区| 久久久久精品国产欧美久久久 | 亚洲欧美清纯卡通| 亚洲欧美精品综合一区二区三区| 在线观看www视频免费| 国产欧美日韩一区二区三区在线| 亚洲精品中文字幕在线视频| 12—13女人毛片做爰片一| 精品亚洲乱码少妇综合久久| 91精品三级在线观看| 满18在线观看网站| 一个人免费在线观看的高清视频 | 首页视频小说图片口味搜索| 欧美一级毛片孕妇| 亚洲avbb在线观看| 久久久久久久精品精品| 9191精品国产免费久久| 五月天丁香电影| 少妇粗大呻吟视频| 99re6热这里在线精品视频| 桃红色精品国产亚洲av| 亚洲 欧美一区二区三区| 妹子高潮喷水视频| 黄片小视频在线播放| 亚洲五月婷婷丁香| 一级毛片精品| 国产日韩欧美亚洲二区| 精品福利永久在线观看| 中文字幕最新亚洲高清| 午夜视频精品福利| 中文字幕人妻丝袜制服| 亚洲欧洲日产国产| 亚洲专区国产一区二区| 男女床上黄色一级片免费看| 精品久久久久久电影网| 五月天丁香电影| 青春草视频在线免费观看| 亚洲黑人精品在线| 久久久久久久久免费视频了| 韩国精品一区二区三区| 亚洲精品中文字幕一二三四区 | 夜夜骑夜夜射夜夜干| 国产精品麻豆人妻色哟哟久久| 黄频高清免费视频| 男女高潮啪啪啪动态图| 悠悠久久av| 岛国毛片在线播放| 久久这里只有精品19| 久久精品国产综合久久久| 女人高潮潮喷娇喘18禁视频| 最近最新中文字幕大全免费视频| 亚洲av电影在线观看一区二区三区| 建设人人有责人人尽责人人享有的| 日韩欧美一区二区三区在线观看 | 亚洲国产av新网站| 亚洲国产欧美在线一区| 亚洲精品国产色婷婷电影| 精品卡一卡二卡四卡免费| 一边摸一边抽搐一进一出视频| 老熟妇仑乱视频hdxx| 国产av一区二区精品久久| 国产一区二区三区在线臀色熟女 | 看免费av毛片| 国产国语露脸激情在线看| 日本vs欧美在线观看视频| 黄色毛片三级朝国网站| 不卡一级毛片| 深夜精品福利| 国产色视频综合| 各种免费的搞黄视频| 午夜91福利影院| 999久久久国产精品视频| 美女中出高潮动态图| 欧美精品一区二区免费开放| 18禁裸乳无遮挡动漫免费视频| 亚洲欧洲精品一区二区精品久久久| 99国产精品99久久久久| 91字幕亚洲| 国产男女超爽视频在线观看| 法律面前人人平等表现在哪些方面 | 久久人人97超碰香蕉20202| 90打野战视频偷拍视频| 多毛熟女@视频| 亚洲成人免费电影在线观看| 90打野战视频偷拍视频| 国产亚洲午夜精品一区二区久久| 欧美 日韩 精品 国产| 久久久国产精品麻豆| 十分钟在线观看高清视频www| 在线十欧美十亚洲十日本专区| 亚洲精品久久成人aⅴ小说| 汤姆久久久久久久影院中文字幕| 亚洲国产欧美网| 天天躁狠狠躁夜夜躁狠狠躁| 桃红色精品国产亚洲av| 一区二区三区乱码不卡18| 精品一区二区三卡| 制服诱惑二区| 国产精品熟女久久久久浪| 精品人妻在线不人妻| 桃红色精品国产亚洲av| 午夜91福利影院| 日韩电影二区| 青草久久国产| 黑人操中国人逼视频| 搡老岳熟女国产| a级毛片在线看网站| 精品一区二区三区av网在线观看 | 啦啦啦免费观看视频1| 电影成人av| 久久久久久久久免费视频了| 免费黄频网站在线观看国产| 国产精品 国内视频| 欧美久久黑人一区二区| 国产精品麻豆人妻色哟哟久久| 一级,二级,三级黄色视频| 午夜免费鲁丝| 啦啦啦免费观看视频1| 久久久久国内视频| 美国免费a级毛片| 中文字幕另类日韩欧美亚洲嫩草| 青春草亚洲视频在线观看| 999久久久精品免费观看国产| 亚洲av日韩精品久久久久久密| 亚洲成国产人片在线观看| 国产精品免费视频内射| 大陆偷拍与自拍| 久久久国产一区二区| 午夜两性在线视频| 久久人妻熟女aⅴ| 久久久久精品国产欧美久久久 | 丝袜人妻中文字幕| 国产免费一区二区三区四区乱码| 国产又色又爽无遮挡免| 一进一出抽搐动态| 水蜜桃什么品种好| 人人妻人人澡人人爽人人夜夜| 午夜激情久久久久久久| 自线自在国产av| 亚洲欧美精品自产自拍| 啦啦啦视频在线资源免费观看| 欧美精品高潮呻吟av久久| 又大又爽又粗| 热re99久久国产66热| 国产xxxxx性猛交| 黄片大片在线免费观看| 国产精品久久久久成人av| av视频免费观看在线观看| 美女主播在线视频| 久久国产精品影院| 国内毛片毛片毛片毛片毛片| 午夜免费鲁丝| 久久狼人影院| 国产精品秋霞免费鲁丝片| 一本综合久久免费| 伊人久久大香线蕉亚洲五| 色播在线永久视频| 91国产中文字幕| 99热网站在线观看| 免费日韩欧美在线观看| 亚洲成人免费av在线播放| 亚洲国产日韩一区二区| 亚洲色图 男人天堂 中文字幕| 国产精品一区二区在线不卡| 国产精品一区二区精品视频观看| 免费女性裸体啪啪无遮挡网站| a在线观看视频网站| 亚洲国产精品一区三区| 久久人人爽人人片av| 宅男免费午夜| 亚洲av国产av综合av卡| 国产亚洲欧美精品永久| 午夜福利影视在线免费观看| 乱人伦中国视频| 国产亚洲欧美在线一区二区| 操出白浆在线播放| 久久99热这里只频精品6学生| 成人av一区二区三区在线看 | 最新在线观看一区二区三区| 免费久久久久久久精品成人欧美视频| 色精品久久人妻99蜜桃| 精品国产一区二区久久| 久久久久久久久免费视频了| 日韩中文字幕欧美一区二区| 他把我摸到了高潮在线观看 | 免费女性裸体啪啪无遮挡网站| 精品欧美一区二区三区在线| 黄色 视频免费看| 男女免费视频国产| 我的亚洲天堂| h视频一区二区三区| 国产欧美日韩综合在线一区二区| 国产视频一区二区在线看| 美女脱内裤让男人舔精品视频| 青春草亚洲视频在线观看| 在线观看人妻少妇| 如日韩欧美国产精品一区二区三区| 国产在视频线精品| 亚洲第一青青草原| 99久久精品国产亚洲精品| 桃红色精品国产亚洲av| 欧美日韩精品网址| 99精国产麻豆久久婷婷| 国产1区2区3区精品| 久久毛片免费看一区二区三区| 99久久精品国产亚洲精品| 韩国高清视频一区二区三区| 欧美xxⅹ黑人| 丝袜美足系列| 亚洲精品美女久久av网站| 免费久久久久久久精品成人欧美视频| 91字幕亚洲| 色精品久久人妻99蜜桃| www日本在线高清视频| 岛国毛片在线播放| 人人妻人人添人人爽欧美一区卜| 热99久久久久精品小说推荐| 一级片'在线观看视频| 亚洲国产成人一精品久久久| 欧美成狂野欧美在线观看| 久久久久网色| 精品免费久久久久久久清纯 | 丰满人妻熟妇乱又伦精品不卡| 97在线人人人人妻| 热99re8久久精品国产| 午夜两性在线视频| 色精品久久人妻99蜜桃| 成年人午夜在线观看视频| 国产在线免费精品| 久久影院123| 欧美97在线视频| 国产极品粉嫩免费观看在线| 老汉色∧v一级毛片| 大型av网站在线播放| 99久久综合免费| 人妻一区二区av| 777米奇影视久久| 亚洲 国产 在线| 亚洲精品久久久久久婷婷小说| 久久精品亚洲熟妇少妇任你| 亚洲九九香蕉| 99久久99久久久精品蜜桃| 亚洲国产精品999| 高清av免费在线| av在线app专区| 久久久国产成人免费| 日韩 亚洲 欧美在线| 少妇裸体淫交视频免费看高清 | 久久亚洲精品不卡| 女人精品久久久久毛片| 嫩草影视91久久| 国产精品成人在线| 一区二区三区激情视频| 亚洲精品日韩在线中文字幕| 亚洲一区中文字幕在线| 黄频高清免费视频| 无限看片的www在线观看| 国产精品.久久久| 搡老乐熟女国产| 啦啦啦免费观看视频1| 国产一区二区在线观看av| 999精品在线视频| 国产精品 国内视频| 我要看黄色一级片免费的| 国产免费现黄频在线看| 丁香六月欧美| 在线天堂中文资源库| 欧美少妇被猛烈插入视频| 精品亚洲成国产av| 久久久久久亚洲精品国产蜜桃av| 女人高潮潮喷娇喘18禁视频| 性少妇av在线| 午夜免费成人在线视频| 一进一出抽搐动态| 欧美+亚洲+日韩+国产| 国产精品成人在线| 动漫黄色视频在线观看| 中文欧美无线码| 又紧又爽又黄一区二区| 亚洲激情五月婷婷啪啪| 侵犯人妻中文字幕一二三四区| 久久99一区二区三区| 99九九在线精品视频| 国产一区二区激情短视频 | 叶爱在线成人免费视频播放| 91九色精品人成在线观看| 国产精品久久久人人做人人爽| 亚洲一卡2卡3卡4卡5卡精品中文| 精品熟女少妇八av免费久了| 久久久久久亚洲精品国产蜜桃av| 国产亚洲精品一区二区www | 人人妻人人澡人人看| 精品一区二区三区av网在线观看 | 国产免费一区二区三区四区乱码| avwww免费| 亚洲七黄色美女视频| 少妇裸体淫交视频免费看高清 | 性色av一级| 99精国产麻豆久久婷婷| 国产片内射在线| 亚洲国产成人一精品久久久| 亚洲国产精品一区二区三区在线| 久久ye,这里只有精品| 狠狠精品人妻久久久久久综合| 天堂中文最新版在线下载| 亚洲情色 制服丝袜| 新久久久久国产一级毛片| 午夜福利在线观看吧| 王馨瑶露胸无遮挡在线观看| 午夜福利一区二区在线看| 欧美日韩福利视频一区二区| 又黄又粗又硬又大视频| 涩涩av久久男人的天堂| 久久精品国产亚洲av高清一级| 久久午夜综合久久蜜桃| 亚洲精品一区蜜桃| 中亚洲国语对白在线视频| 免费一级毛片在线播放高清视频 | 亚洲av日韩精品久久久久久密| 一进一出抽搐动态| 精品久久久精品久久久| 日韩欧美一区视频在线观看| 亚洲人成电影免费在线| 亚洲一区中文字幕在线| 在线天堂中文资源库| 国产激情久久老熟女| 丝袜在线中文字幕| 99精品久久久久人妻精品| 热re99久久精品国产66热6| 又大又爽又粗| 久久久久久免费高清国产稀缺| 嫁个100分男人电影在线观看| 国产亚洲av高清不卡| 1024视频免费在线观看| 国产日韩欧美视频二区| 欧美精品一区二区免费开放| 12—13女人毛片做爰片一| 波多野结衣一区麻豆| 亚洲精品国产区一区二| 欧美日韩福利视频一区二区| 乱人伦中国视频| 亚洲伊人久久精品综合| 国产一区有黄有色的免费视频| 成人国产av品久久久| 午夜福利乱码中文字幕| 精品一区在线观看国产| 人妻一区二区av| 天堂8中文在线网| 日韩中文字幕视频在线看片| 老司机影院成人| 国产在线视频一区二区| 国产黄色免费在线视频| 免费av中文字幕在线| 国产精品影院久久| 久久久久国内视频| 国产1区2区3区精品| 国产精品久久久人人做人人爽| 国产一区二区在线观看av| 悠悠久久av| 亚洲人成电影观看| 下体分泌物呈黄色| 51午夜福利影视在线观看| av在线播放精品| 热99久久久久精品小说推荐| 自拍欧美九色日韩亚洲蝌蚪91| 人人妻,人人澡人人爽秒播| 又大又爽又粗| 一本综合久久免费| 国产免费现黄频在线看| 黄色a级毛片大全视频| kizo精华| 成年女人毛片免费观看观看9 | 免费在线观看黄色视频的| 老司机靠b影院| 视频在线观看一区二区三区| netflix在线观看网站| 欧美老熟妇乱子伦牲交| 日本猛色少妇xxxxx猛交久久| 国产野战对白在线观看| 女警被强在线播放| 欧美成人午夜精品| 亚洲av欧美aⅴ国产| 美国免费a级毛片| 成人亚洲精品一区在线观看| 精品国内亚洲2022精品成人 | 国产成人啪精品午夜网站| 自线自在国产av| 欧美精品一区二区免费开放| 欧美 亚洲 国产 日韩一| 久久久久精品人妻al黑| 免费av中文字幕在线| 亚洲第一av免费看| 日韩一卡2卡3卡4卡2021年| 亚洲精品中文字幕在线视频| 久久精品成人免费网站| 男人爽女人下面视频在线观看| 国产亚洲欧美在线一区二区| 青春草亚洲视频在线观看| 在线永久观看黄色视频| 国产男女内射视频| videos熟女内射| 日本一区二区免费在线视频| 亚洲五月色婷婷综合| 肉色欧美久久久久久久蜜桃| 美女福利国产在线| 欧美激情 高清一区二区三区| 欧美一级毛片孕妇| 丝袜喷水一区| 18禁裸乳无遮挡动漫免费视频| 免费在线观看影片大全网站| 母亲3免费完整高清在线观看| 一本大道久久a久久精品| 五月开心婷婷网| 人人澡人人妻人| 久热这里只有精品99| 女人精品久久久久毛片| 黑人巨大精品欧美一区二区蜜桃| 精品福利观看| 91精品三级在线观看| 欧美少妇被猛烈插入视频| 亚洲第一av免费看| 国产成人免费观看mmmm| 久久久久久人人人人人| a在线观看视频网站| 97人妻天天添夜夜摸| 黄频高清免费视频| 在线观看舔阴道视频| 99re6热这里在线精品视频| 欧美另类一区| 在线观看人妻少妇| 久久香蕉激情| 一边摸一边做爽爽视频免费| 黄频高清免费视频| 午夜福利视频精品| 日本精品一区二区三区蜜桃| 久久ye,这里只有精品| 久热这里只有精品99| 婷婷丁香在线五月| 午夜福利视频在线观看免费| 国产一区二区在线观看av| 欧美日韩亚洲高清精品| 大香蕉久久成人网| 99久久人妻综合| 日韩中文字幕视频在线看片| 一区二区日韩欧美中文字幕| 啦啦啦中文免费视频观看日本| 国产精品av久久久久免费| 热99国产精品久久久久久7| 亚洲一区二区三区欧美精品| 好男人电影高清在线观看| 国产区一区二久久| 男女午夜视频在线观看| 亚洲免费av在线视频| 乱人伦中国视频| 视频区图区小说| 天堂俺去俺来也www色官网| 1024视频免费在线观看| 老司机在亚洲福利影院| 久久精品国产亚洲av高清一级| 一级毛片精品| 女性生殖器流出的白浆| 黄色毛片三级朝国网站| 两个人免费观看高清视频| av又黄又爽大尺度在线免费看| 精品亚洲乱码少妇综合久久| 美女主播在线视频| 热re99久久精品国产66热6| 免费高清在线观看视频在线观看| 黑人巨大精品欧美一区二区mp4| 日韩人妻精品一区2区三区| 老司机在亚洲福利影院| 电影成人av| a 毛片基地| 日韩人妻精品一区2区三区| 悠悠久久av| 久久久久视频综合| 男女床上黄色一级片免费看| 日韩免费高清中文字幕av| 最新的欧美精品一区二区| 伊人久久大香线蕉亚洲五| 美女扒开内裤让男人捅视频| 成年动漫av网址| 法律面前人人平等表现在哪些方面 | 亚洲成人免费av在线播放| 三级毛片av免费| 伊人久久大香线蕉亚洲五| 操美女的视频在线观看| 久久久欧美国产精品| 丝袜美足系列| 亚洲激情五月婷婷啪啪| 日韩制服丝袜自拍偷拍| www.熟女人妻精品国产| 精品久久久久久久毛片微露脸 | 叶爱在线成人免费视频播放| 一边摸一边做爽爽视频免费| 日本vs欧美在线观看视频| 久久久欧美国产精品| 午夜日韩欧美国产| 亚洲精品自拍成人| 女人高潮潮喷娇喘18禁视频| 91大片在线观看| 黄色视频,在线免费观看| 秋霞在线观看毛片| 女人精品久久久久毛片| 18禁国产床啪视频网站| 女人爽到高潮嗷嗷叫在线视频| 又大又爽又粗| av在线app专区| 青春草亚洲视频在线观看| 精品国产一区二区三区久久久樱花| 精品少妇一区二区三区视频日本电影| 日韩一卡2卡3卡4卡2021年| 热99久久久久精品小说推荐| 欧美日韩国产mv在线观看视频| 男女边摸边吃奶| 国产在线一区二区三区精| 国产片内射在线| 成在线人永久免费视频| 韩国高清视频一区二区三区| 久久久久视频综合| 国产在线视频一区二区| 亚洲国产精品成人久久小说| av福利片在线| 80岁老熟妇乱子伦牲交| 亚洲欧美一区二区三区久久| 国产精品偷伦视频观看了| 天天躁狠狠躁夜夜躁狠狠躁| xxxhd国产人妻xxx| 欧美精品一区二区大全| 免费在线观看影片大全网站| 亚洲第一欧美日韩一区二区三区 | 久久国产精品大桥未久av| 狂野欧美激情性bbbbbb| 操美女的视频在线观看| 人人妻人人爽人人添夜夜欢视频| 欧美国产精品va在线观看不卡| 国产欧美日韩一区二区精品| 日韩 欧美 亚洲 中文字幕| 免费一级毛片在线播放高清视频 | 免费av中文字幕在线| 国产男女超爽视频在线观看| 天堂俺去俺来也www色官网| 亚洲成国产人片在线观看| 十八禁网站网址无遮挡| 一边摸一边抽搐一进一出视频| bbb黄色大片| 蜜桃在线观看..| 亚洲av成人一区二区三| 午夜福利在线观看吧| 国产野战对白在线观看| 人人妻人人添人人爽欧美一区卜| 男女下面插进去视频免费观看| 国产欧美日韩一区二区三区在线| 欧美另类一区| 久久人妻福利社区极品人妻图片| 婷婷色av中文字幕| 国产激情久久老熟女| 国产亚洲欧美在线一区二区| 秋霞在线观看毛片| 久久久久国产一级毛片高清牌| 亚洲中文av在线| 欧美成人午夜精品| 91麻豆av在线| 啦啦啦 在线观看视频| 久久国产精品影院| 爱豆传媒免费全集在线观看| 久久久久精品人妻al黑| 亚洲欧美精品综合一区二区三区| 国产区一区二久久| 亚洲成av片中文字幕在线观看| 下体分泌物呈黄色| 亚洲国产av影院在线观看| 午夜福利,免费看| 国产精品久久久久久精品电影小说| 亚洲国产av影院在线观看| 免费在线观看完整版高清| 一边摸一边抽搐一进一出视频| 日韩一卡2卡3卡4卡2021年| 亚洲精品美女久久久久99蜜臀| av免费在线观看网站| 桃花免费在线播放| 亚洲精品美女久久久久99蜜臀|