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

    POI用戶模型的重構(gòu)與優(yōu)化

    2019-10-08 06:43:30吉豪杰宋欣潮
    軟件 2019年5期
    關(guān)鍵詞:設(shè)計(jì)模式

    吉豪杰 宋欣潮

    摘 ?要: Apache POI中的用戶模型是目前用于處理Excel數(shù)據(jù)的最為廣泛的應(yīng)用技術(shù),但用戶模型存在許多明顯的弊端。本文將以一個(gè)學(xué)生檔案管理系統(tǒng)為例,對(duì)用戶模型中存在的問(wèn)題以及產(chǎn)生問(wèn)題的原因進(jìn)行分析,并針對(duì)這些問(wèn)題,借用面向過(guò)程的設(shè)計(jì)思想對(duì)用戶模型進(jìn)行優(yōu)化和改進(jìn)。使用不同規(guī)模的數(shù)據(jù)量對(duì)改進(jìn)前后的用戶模型進(jìn)行測(cè)試,并對(duì)測(cè)試結(jié)果進(jìn)行比較和分析,最終在一定程度上解決了用戶模型的弊端,提升了用戶模型的性能。

    關(guān)鍵詞: 用戶模型;生產(chǎn)者消費(fèi)者模型;POI技術(shù);數(shù)據(jù)優(yōu)化;內(nèi)存溢出;設(shè)計(jì)模式;java多線程

    中圖分類號(hào): TP315 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.038

    本文著錄格式:吉豪杰,宋欣潮. POI用戶模型的重構(gòu)與優(yōu)化[J]. 軟件,2019,40(5):193199

    【Abstract】: The UserModel in Apache POI is the most widely used technology for processing Excel data at present, but the user model has many obvious disadvantages.This paper will take a student file management system as an example to analyze the problems existing in the UserModel and the causes of the problems. In view of these problems, the UserModel will be optimized and improved by using the process-oriented design idea.The data volumes of different scales were used to test the UserModel before and after the improvement, and the test results were compared and analyzed. Finally, the disadvantages of the UserModel were solved to some extent, and the performance of the UserModel was improved.

    【Key words】: UserModel; Producer consumer model; POI; Data optimization; Out of memoryerror; Design mode; Java multithreading

    0 ?引言

    在當(dāng)前的軟件開(kāi)發(fā)中,越來(lái)越多的需求涉及到對(duì)MicroSoft Office文檔的處理,其中對(duì)Excel數(shù)據(jù)文檔的處理尤為普遍。因此,關(guān)于對(duì)Excel文件處理的討論與研究也愈演愈烈。到目前為止,已經(jīng)出現(xiàn)了許多關(guān)于處理Excel文件的技術(shù)和開(kāi)源項(xiàng)目,例如Java Excel Api(jxl),Apache POI[1],Alibaba EasyExcel等。這些開(kāi)源項(xiàng)目各有特色,都能夠適用于不同的開(kāi)發(fā)場(chǎng)景,滿足了大多數(shù)不同的開(kāi)發(fā)需求,但也存在諸多問(wèn)題,其中對(duì)Apache POI相關(guān)技術(shù)所存在問(wèn)題的研究是本文討論的重點(diǎn)。本文的創(chuàng)新點(diǎn)在于將面向過(guò)程的生產(chǎn)者消費(fèi)者模型[2]的設(shè)計(jì)思想應(yīng)用到傳統(tǒng)的用戶模型當(dāng)中,以及采用多線程[3-9]的方式實(shí)現(xiàn)用戶模型,對(duì)傳統(tǒng)的用戶模型處理Excel數(shù)據(jù)的程序進(jìn)行重構(gòu),使用戶模型在程序結(jié)構(gòu)上邏輯更加清晰、功能更加明確,在數(shù)據(jù)處理能力上更加高效。

    1 ?POI用戶模型

    1.1 ?用戶模型簡(jiǎn)介

    POI是由Apache組織提供的用java編寫(xiě)的免費(fèi)開(kāi)源的跨平臺(tái)的 Java API,Apache POI提供API給Java程序?qū)icroSoft office格式檔案讀和寫(xiě)的功 能[1]。POI中關(guān)于Excel數(shù)據(jù)處理的部分主要包括User API、Event API和Streaming UserModel API。本文將重點(diǎn)討論User API中的UserModel。

    所謂的UserModel實(shí)際上就是基于Dom方式的解析,Dom解析就是將文件全部讀入內(nèi)存,對(duì)文件內(nèi)部的結(jié)構(gòu)進(jìn)行建模,形成一顆Dom樹(shù)的過(guò)程,如圖1用戶模型的Dom樹(shù)結(jié)構(gòu)。

    從圖1中可以看出,用戶模型提供封裝好的Workbook、Sheet、Row、Cell等實(shí)例來(lái)完成對(duì)excel數(shù)據(jù)的讀寫(xiě)。

    1.2 ?用戶模型的應(yīng)用

    經(jīng)過(guò)對(duì)用戶模型的簡(jiǎn)單介紹,現(xiàn)在以文獻(xiàn)[4]中提到的學(xué)生檔案管理系統(tǒng)為例,對(duì)用戶模型的Excel數(shù)據(jù)解析功能進(jìn)行實(shí)現(xiàn)。該功能的業(yè)務(wù)處理過(guò)程為:①以流的方式接受excel文件;②根據(jù)接受的文件生成WorkBook對(duì)象;③根據(jù)Dom結(jié)構(gòu),遍歷每個(gè)Sheet的每一個(gè)Row,將每一個(gè)Row中的Cell的值讀取出來(lái),存放到list集合中;④對(duì)list中的數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,并封裝到領(lǐng)域?qū)ο骃tudent中,生成存放Student對(duì)象的集合;⑤利用數(shù)據(jù)庫(kù)的批量添加操作,將Student集合持久化到數(shù)據(jù)庫(kù)中(涉及到多表操作)。

    用戶模型代碼:

    Student類:

    public class Student {

    private BigInteger stuId;//學(xué)號(hào)

    private Archive archive;//檔案

    private Profession pro;//專業(yè)

    private Department department;//院系

    private String stuName;//姓名

    private String stuSex;//性別

    private String stuSendnum;//派遣證號(hào)

    private String stuClass;//班級(jí)

    private String stuLocation;//生源地

    //省略部分屬性和set、get方法

    }

    用戶模型解析excel方法:

    public static List> getListByExcel(InputStream in,String fileName) throws Exception{

    List> list=null;

    Workbook wb=getWorkBook(in,fileName); //獲取WorkBook對(duì)象

    if (wb!=null){

    Sheet sheet=null;

    Row row=null;

    Cell cell=null;

    list=new ArrayList>();

    for (int i=0;i

    sheet=wb.getSheetAt(i);

    if (sheet==null){continue;}

    //遍歷每一行

    for (int j=sheet.getFirstRowNum(); j<=sheet.getLastRowNum();j++){

    row=sheet.getRow(j);

    Integer columns= (int)row. getLastCellNum();

    //遍歷每一列

    List rowData=new ArrayList<>();

    for (int m=0;m

    cell=row.getCell(m);

    if (cell!=null) {

    rowData.add (getCellValue(cell));//數(shù)據(jù)類型轉(zhuǎn)換

    }else{

    rowData.add("");

    }

    }

    //將每一行的數(shù)據(jù)放到list中

    list.add(rowData);

    }

    }

    }

    return list;

    }

    業(yè)務(wù)邏輯方法:

    public boolean uploadExcel(InputStream in, MultipartFile file) {

    //獲取數(shù)據(jù)源

    List> rowList=getListByExcel(in,file.getName());

    //數(shù)據(jù)源封裝成業(yè)務(wù)對(duì)象Student,存放到studentList中

    //調(diào)用dao層的數(shù)據(jù)庫(kù)操作方法,批量添加Student對(duì)象

    //添加成功返回true,否則返回false

    }

    1.3 ?用戶模型的缺陷及原因分析

    采用用戶模型的方式讀寫(xiě)Excel文件,由于這種方式容易理解,操作也較簡(jiǎn)單,所以成為了開(kāi)發(fā)人員最常用的方式。但是這種方式也存在很明顯的弊端:因?yàn)樵摲绞绞腔贒om內(nèi)存解析的,所以對(duì)系統(tǒng)內(nèi)存的依賴也就比較嚴(yán)重。也就是說(shuō),WorkBook對(duì)象是將整個(gè)文件流緩沖到系統(tǒng)內(nèi)存當(dāng)中,使用用戶模型處理數(shù)據(jù)就要求系統(tǒng)有足夠的內(nèi)存空間去容納以WorkBook對(duì)象為根的Dom結(jié)構(gòu)。

    在1.2的代碼中可以看出,系統(tǒng)不僅會(huì)為WorkBook對(duì)象分配內(nèi)存,而且還會(huì)為封轉(zhuǎn)的Student對(duì)象集合分配大量空間。當(dāng)數(shù)據(jù)量逐漸增大,對(duì)系統(tǒng)內(nèi)存和cpu的開(kāi)銷也隨之增大,直到系統(tǒng)沒(méi)有足夠的內(nèi)存去處理數(shù)據(jù)時(shí),就會(huì)造成內(nèi)存溢出,導(dǎo)致數(shù)據(jù)處理失敗。

    以學(xué)生檔案管理系統(tǒng)為例,對(duì)用戶模型的系統(tǒng)資源使用情況進(jìn)行分析。如圖2數(shù)據(jù)量為1w時(shí)系統(tǒng)內(nèi)存使用情況。

    從圖2中有上下兩條曲線,上方曲線表示堆空間的最大值,下方曲線表示當(dāng)前程序已經(jīng)占用的空間。當(dāng)有1萬(wàn)條excel數(shù)據(jù)時(shí),系統(tǒng)會(huì)在一定時(shí)間內(nèi)對(duì)這些數(shù)據(jù)分配內(nèi)存并處理,占用內(nèi)存大小大約60M,處理完數(shù)據(jù)后,立即釋放空間。對(duì)于1萬(wàn)數(shù)據(jù)所占用的內(nèi)存,系統(tǒng)完全有能力分配,所以不會(huì)造成內(nèi)存溢出的情況。

    如圖3數(shù)據(jù)量為10w時(shí)系統(tǒng)內(nèi)存使用情況。

    由圖3可知,當(dāng)數(shù)據(jù)量增加到10萬(wàn)時(shí),系統(tǒng)內(nèi)存占用空間從100M迅速增加到700M以上并且呈緩慢上升的趨勢(shì)。系統(tǒng)的堆空間也逐漸擴(kuò)容到最大值,無(wú)法繼續(xù)擴(kuò)大,系統(tǒng)的可用內(nèi)存資源迅速減少,直到系統(tǒng)沒(méi)有足夠的內(nèi)存空間時(shí),拋出內(nèi)存溢出異常,此時(shí)10w條數(shù)據(jù)添加到數(shù)據(jù)庫(kù)失敗。

    內(nèi)存占用空間迅速增加是因?yàn)樯闪嘶贒om結(jié)構(gòu)的WorkBook對(duì)象,呈緩慢上升趨勢(shì)是因?yàn)橄到y(tǒng)在不斷生成Student對(duì)象。 正是因?yàn)閃orkBook對(duì)象和不斷生成的Student對(duì)象,才造成了系統(tǒng)內(nèi)存溢出。

    雖然目前已經(jīng)有很多方法可以替代用戶模型去完成大數(shù)據(jù)量的Excel數(shù)據(jù)解析功能,比如POI中的基于事件驅(qū)動(dòng)的事件模型和基于流式解析的流用戶模型、基于xml的excel數(shù)據(jù)解析方式[7]等,但是對(duì)于用戶模型本身的缺陷還未能夠解決。解決用戶模型的內(nèi)存溢出問(wèn)題,主要從兩方面入手:一是減少WorkBook對(duì)象占用的內(nèi)存空間,另一個(gè)是優(yōu)化不斷生成的Student對(duì)象的存儲(chǔ)結(jié)構(gòu),本文將重點(diǎn)從后者入手來(lái)解決內(nèi)存溢出問(wèn)題。

    2 ?生產(chǎn)者消費(fèi)者模型

    2.1 ?介紹

    生產(chǎn)者消費(fèi)者模型[2]是面向過(guò)程編程中的一種高效設(shè)計(jì)模式[8],該模型包括三種角色:生產(chǎn)者、消費(fèi)者、數(shù)據(jù)倉(cāng)庫(kù)。其中生產(chǎn)者負(fù)責(zé)獲取數(shù)據(jù)、數(shù)據(jù)類型轉(zhuǎn)換等數(shù)據(jù)準(zhǔn)備過(guò)程,消費(fèi)者負(fù)責(zé)處理生產(chǎn)者準(zhǔn)備好的數(shù)據(jù),該模型通過(guò)一個(gè)數(shù)據(jù)倉(cāng)庫(kù)來(lái)實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者的解耦,降低生產(chǎn)者與消費(fèi)者之間的依賴關(guān)系,并且支持并發(fā)、忙閑不均等情況的處理。如圖4生產(chǎn)者消費(fèi)者模型的工作原理。

    2.2 ?應(yīng)用

    通常,處理Excel數(shù)據(jù)的過(guò)程為:①通過(guò)文件流來(lái)獲取數(shù)據(jù)源,②根據(jù)具體的業(yè)務(wù)邏輯對(duì)數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行封裝,③對(duì)封裝好的數(shù)據(jù)進(jìn)行相應(yīng)的業(yè)務(wù)處理。這樣的數(shù)據(jù)處理過(guò)程與生產(chǎn)者消費(fèi)者模型的工作原理非常相似,過(guò)程①和②可以通過(guò)生產(chǎn)者來(lái)完成,數(shù)據(jù)存儲(chǔ)可以通過(guò)數(shù)據(jù)倉(cāng)庫(kù)來(lái)完成,過(guò)程③可以用消費(fèi)者來(lái)實(shí)現(xiàn)。

    數(shù)據(jù)倉(cāng)庫(kù)通過(guò)維持一個(gè)恒定大小的緩沖區(qū)域來(lái)保證系統(tǒng)的內(nèi)存消耗,可以有效解決內(nèi)存溢出問(wèn)題。由于生產(chǎn)者消費(fèi)者模型支持并發(fā),所以可以利用多線程的方式來(lái)高效率實(shí)現(xiàn)數(shù)據(jù)解析過(guò)程,充分利用cpu資源,達(dá)到提升系統(tǒng)性能的目的。通過(guò)對(duì)生產(chǎn)者消費(fèi)者模型的利用,讓數(shù)據(jù)解析過(guò)程的邏輯更加清晰,各部分分工明確,便于后期的系統(tǒng)維護(hù)和更改。

    3 ?重構(gòu)用戶模型

    3.1 ?利用生產(chǎn)者消費(fèi)者模型改進(jìn)用戶模型

    通過(guò)1.2對(duì)用戶模型的實(shí)現(xiàn)和1.3用戶模型的缺陷中可知,用戶模型雖然易于理解,抽象層次高,但對(duì)系統(tǒng)性能的開(kāi)銷非常大,并且1.2中的業(yè)務(wù)邏輯方法既要獲取數(shù)據(jù)又要執(zhí)行數(shù)據(jù)庫(kù)操作,不符合高內(nèi)聚低耦合的程序設(shè)計(jì)原則。為解決用戶模型對(duì)系統(tǒng)資源的依賴,且使得代碼充分解耦,利用生產(chǎn)者消費(fèi)者對(duì)用戶模型進(jìn)行改進(jìn):

    首先將業(yè)務(wù)邏輯的處理分為數(shù)據(jù)準(zhǔn)備、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)持久化三個(gè)過(guò)程;

    生產(chǎn)者負(fù)責(zé)數(shù)據(jù)準(zhǔn)備過(guò)程,主要完成獲取數(shù)據(jù),數(shù)據(jù)封裝操作;數(shù)據(jù)倉(cāng)庫(kù)負(fù)責(zé)臨時(shí)存儲(chǔ)數(shù)據(jù);消費(fèi)者負(fù)責(zé)數(shù)據(jù)持久化過(guò)程;

    生產(chǎn)者和消費(fèi)者以多線程的方式對(duì)數(shù)據(jù)進(jìn)行并發(fā)處理。

    對(duì)用戶模型的改進(jìn),這里主要使用兩種方式來(lái)實(shí)現(xiàn):一種是單生產(chǎn)者-單消費(fèi)者方式,一種是多生產(chǎn)者-多消費(fèi)者方式。其中單生產(chǎn)者-單消費(fèi)者方式在數(shù)據(jù)準(zhǔn)備過(guò)程中,對(duì)于所有的數(shù)據(jù)都通過(guò)一個(gè)生產(chǎn)者來(lái)負(fù)責(zé),雖然通過(guò)數(shù)據(jù)倉(cāng)庫(kù)可以保證系統(tǒng)中產(chǎn)生的Student對(duì)象不會(huì)占用過(guò)多的內(nèi)存空間,但這樣的執(zhí)行效率顯然不高。所以使用多生產(chǎn)者方式來(lái)實(shí)現(xiàn),即多個(gè)生產(chǎn)者并行生產(chǎn)數(shù)據(jù),比如10w條數(shù)據(jù),若使用10個(gè)生產(chǎn)者,那么每個(gè)生產(chǎn)者平均負(fù)責(zé)生產(chǎn)1W條數(shù)據(jù),忽略線程等待的時(shí)間,10w條數(shù)據(jù)生產(chǎn)完的時(shí)間相當(dāng)于10個(gè)生產(chǎn)者都生產(chǎn)完1w條數(shù)據(jù)的時(shí)間。也就是說(shuō),將原來(lái)一個(gè)生產(chǎn)者生產(chǎn)10w條數(shù)據(jù)的任務(wù)交個(gè)10個(gè)生產(chǎn)者去完成,這樣的執(zhí)行效率會(huì)有顯著提升。如圖5改進(jìn)后的用戶模型業(yè)務(wù)處理流程。

    實(shí)現(xiàn)代碼如下:

    數(shù)據(jù)倉(cāng)庫(kù):

    public class DataWarehouse {

    private static int ?MAX_SIZE=5;//倉(cāng)庫(kù)大小

    public static boolean isFinish=false;//生產(chǎn)過(guò)程是否結(jié)束

    private BlockingQueue> dw=new LinkedBlockingQueue<>();//緩沖區(qū)

    //生產(chǎn)者生產(chǎn)數(shù)據(jù)

    public synchronized void addDatas(List datas){

    while(dw.size()>=MAX_SIZE){

    try {

    this.wait();

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    dw.add(datas);

    this.notifyAll();//喚醒所有等待的線程,主要喚醒消費(fèi)者,防止死鎖

    }

    //消費(fèi)者消費(fèi)數(shù)據(jù)

    public synchronized List consumeDatas(){

    while(dw.size()<=0){

    if(isFinish){//表示生產(chǎn)過(guò)程結(jié)束,且緩沖區(qū)為空,此時(shí)結(jié)束消費(fèi)過(guò)程

    this.notifyAll();

    return null;

    }

    try {

    this.wait();

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    List list=dw.poll();

    this.notifyAll();//喚醒所有在等待的線程,主要喚醒生產(chǎn)者

    return list;

    }

    public BlockingQueue> getData(){

    return dw;

    }

    }

    生產(chǎn)者(單生產(chǎn)者方式):

    public class Producter extends ?Thread{

    private DataWarehouse dataWarehouse;//數(shù)據(jù)倉(cāng)庫(kù)

    private InputStream inputStream;//輸入流

    private String fileName;//文件名

    private TransDataUtil transDataUtil;//數(shù)據(jù)封裝類,將excel數(shù)據(jù)封裝成業(yè)務(wù)對(duì)象

    public void run() {

    //遍歷數(shù)據(jù)源,獲取數(shù)據(jù)單元,數(shù)據(jù)單元的大小不宜過(guò)大也不宜過(guò)小,過(guò)大會(huì)占用內(nèi)存空間,過(guò)小會(huì)增加與數(shù)據(jù)庫(kù)交互的次數(shù)和頻率,根據(jù)實(shí)驗(yàn)和研究,這里將單元大小設(shè)置成1000

    if(list.size()>=1000){

    dataWarehouse.addDatas(new ArrayList<>(list));//通過(guò)數(shù)據(jù)倉(cāng)庫(kù)生產(chǎn)數(shù)據(jù)

    list.clear();

    }

    DataWarehouse.isFinish=true;//表示生產(chǎn)數(shù)據(jù)結(jié)束

    }

    }

    生產(chǎn)者(多生產(chǎn)者方式):

    public class Producter extends ?Thread{

    private DataWarehouse dataWarehouse;

    private Sheet sheet;

    private int start;//開(kāi)始行

    private int size;//數(shù)據(jù)源大小

    private TransDataUtil transDataUtil;

    public void run() {

    Row row=null;

    Cell cell=null;

    List list=new ArrayList<>();

    for (int i=this.start;i

    row=sheet.getRow(i);

    Integer columns= (int)row.getLastCellNum();

    List rowData=new ArrayList<>();

    for (int m=0;m

    cell=row.getCell(m);

    if (cell!=null) {

    rowData.add(ExcelUtil. getCellValue(cell));

    }else{

    rowData.add("");

    }

    }

    //將rowData轉(zhuǎn)化成對(duì)象Student放到list中

    Student t=transDataUtil.transData(rowData);

    list.add(t);

    if(list.size()>=1000){//設(shè)置一個(gè)數(shù)據(jù)單元大小為1000

    dataWarehouse.addDatas(new ArrayList<>(list));

    list.clear();

    }

    }

    if (list.size()>0) {

    dataWarehouse.addDatas(list);

    }

    list=null;

    DataWarehouse.isFinish=true;

    }

    }

    消費(fèi)者:

    public class Consumer extends ?Thread{

    private DataWarehouse dataWarehouse;

    private StudentService studentService;//業(yè)務(wù)邏輯類,負(fù)責(zé)業(yè)務(wù)邏輯的處理

    public void run() {

    while(true){

    List studentList=dataWare-house.consumeDatas();//通過(guò)數(shù)據(jù)倉(cāng)庫(kù)取出數(shù)據(jù)

    if (studentList==null) {

    break;

    }else if (studentList.size()>0) {

    studentService.addStudentBatch(studentList);

    studentList=null;

    System.gc();

    }

    }

    }

    }

    業(yè)務(wù)邏輯方法:(單生產(chǎn)者-單消費(fèi)者):

    public boolean uploadExcelByPC(InputStream in, MultipartFile file){

    DataWarehouse.isFinish=false;

    producter.setFileName(file.getOriginalFilename());

    producter.setInputStream(in);

    new Thread(producter,"producter").start();

    new Thread(consumer,"consumer").start();

    return true;

    }

    業(yè)務(wù)邏輯方法:(多生產(chǎn)者-多消費(fèi)者):

    public boolean uploadExcelByPC(InputStream in, MultipartFile file){

    DataWarehouse.isFinish=false;

    List threadList=new ArrayList<>();

    try {

    Workbook wb = ExcelUtil.getWorkBook(in, file.getOriginalFilename());

    if (wb!=null) {

    Sheet sheet = null;

    Row row = null;

    Cell cell = null;

    for (int i=0;i

    sheet=wb.getSheetAt(i);

    if (sheet==null){ continue;}

    producter.setSheet(sheet);

    int size=sheet.getLastRowNum();

    int pSize=5000;//表示一個(gè)生產(chǎn)者負(fù)責(zé)生產(chǎn)5000條數(shù)據(jù)

    int start=0;

    int index=0;

    while(size>=pSize && size>0){

    producter.setSize(pSize);

    producter.setStart(start);

    start+=pSize;

    size-=pSize;

    threadList.add(new Thread(producter,"producter-"+index));

    index++;

    }

    if (size>0){

    producter2.setSize(size);

    producter2.setStart(start);

    threadList.add(new Thread(producter,"producter-"+index));

    }

    }

    }

    for (Thread t:threadList) {t.start();}

    new Thread(consumer,"consumer1").start();

    new Thread(consumer,"consumer2").start();

    } catch (Exception e) {

    e.printStackTrace();

    }

    return true;

    }

    3.2 ?性能分析

    執(zhí)行3.1中的實(shí)現(xiàn)代碼,并監(jiān)控jvm的內(nèi)存使用情況,如下圖為改進(jìn)后的用戶模型處理不同數(shù)據(jù)量時(shí)系統(tǒng)內(nèi)存的使用情況。

    從圖7中可以看出,系統(tǒng)將文件流緩沖到WorkBook對(duì)象中后,系統(tǒng)占用內(nèi)存從150M左右增加到700M以上,之后便維持在700M左右呈峰式不斷變化,這是因?yàn)閿?shù)據(jù)倉(cāng)庫(kù)的作用,對(duì)系統(tǒng)中封裝的Student對(duì)象的內(nèi)存占用情況進(jìn)行了良好的控制,又因?yàn)槎嗌a(chǎn)者與多消費(fèi)者的并發(fā)操作,系統(tǒng)中不斷產(chǎn)生的Student對(duì)象使用后被及時(shí)回收,系統(tǒng)吞吐量也有了顯著提升。相比于圖3中呈緩慢上升式的曲線而言,改進(jìn)后的用戶模型更能適用于一定數(shù)據(jù)量的處理任務(wù)。

    如表1不同數(shù)據(jù)規(guī)模下用戶模式改進(jìn)前后的性能對(duì)比。

    從上表中可以看出,生產(chǎn)者消費(fèi)者模式對(duì)用戶模型性能的影響,改進(jìn)后的用戶模型不僅保持了原來(lái)的高度抽象、易于理解和實(shí)現(xiàn)的優(yōu)點(diǎn),還解決了內(nèi)存溢出的問(wèn)題,在一定程度上對(duì)用戶模型進(jìn)行了優(yōu)化,擴(kuò)展了用戶模型的應(yīng)用場(chǎng)景。

    但是使用用戶模型,系統(tǒng)的時(shí)間消耗受到極大影響,就比如表1中處理10萬(wàn)條數(shù)據(jù)要花費(fèi)327432ms,這樣的執(zhí)行效率是不可觀的。影響時(shí)間的因素涉及到多方面,比如:多線程對(duì)資源的競(jìng)爭(zhēng)、數(shù)據(jù)庫(kù)的多表處理、SQL優(yōu)化問(wèn)題、程序代碼的時(shí)間復(fù)雜度、I/O流的優(yōu)化[5]等,由于文章篇幅有限且時(shí)間消耗問(wèn)題不是本文討論的重點(diǎn),所以不再詳細(xì)分析。

    4 ?結(jié)論

    經(jīng)過(guò)對(duì)用戶模型在實(shí)際應(yīng)用中的弊端以及產(chǎn)生原因的充分分析,展示了在不同數(shù)據(jù)規(guī)模下的系統(tǒng)性能消耗,利用生產(chǎn)者消費(fèi)者模式的思想,對(duì)用戶模式進(jìn)行重構(gòu),使得用戶模型中各個(gè)角色的職能分離、交互協(xié)作,并通過(guò)多線程并發(fā)編程的實(shí)現(xiàn)方式,解決了在一定數(shù)據(jù)量條件下的excel數(shù)據(jù)讀取問(wèn)題,節(jié)省了系統(tǒng)的部分內(nèi)存消耗,提升了業(yè)務(wù)處理效率。讓用戶模型在原有的高度抽象、易于理解等特性的基礎(chǔ)上,減輕了對(duì)系統(tǒng)資源的依賴,擴(kuò)展了用戶模型的應(yīng)用場(chǎng)景。雖然還不能完全解決用戶模型對(duì) ?系統(tǒng)資源的依賴,但對(duì)用戶模型的內(nèi)存占用做出了一定程度的優(yōu)化,關(guān)于用戶模型的缺陷仍然在不斷研究。

    參考文獻(xiàn)

    [1] Apache POI docs[EB/OL]. [2019-4-16]. http://poi.apache. org/components/spreadsheet/index. html.

    [2] 李騰. 批量數(shù)據(jù)優(yōu)化處理框架的設(shè)計(jì)和實(shí)現(xiàn)[D]. 山東大學(xué), 2015.

    [3] 路勇. Java多線程同步問(wèn)題分析[J]. 軟件, 2012, 33(4): 31-33

    [4] 吉豪杰. 大數(shù)據(jù)時(shí)代下基于SSM框架的高校畢業(yè)生檔案管理系統(tǒng)的研發(fā)設(shè)計(jì)[J]. 軟件, 2018, 39(11): 151-158.

    [5] 馬凱航, 高永明, 吳止鍰等. 大數(shù)據(jù)時(shí)代數(shù)據(jù)管理技術(shù)研究綜述[J]. 軟件, 2015, 36(10): 46-49

    [6] 左大鵬, 徐薇. 基于Hadoop 處理小文件的優(yōu)化策略[J]. 軟件, 2015, 36(2): 107-111

    [7] 朝格. 淺談EXCEL與XML的數(shù)據(jù)交換[J]. 軟件, 2012, 33(5): 48-50

    [8] 張強(qiáng). 創(chuàng)建型模式在題型庫(kù)設(shè)計(jì)中的應(yīng)用[J]. 軟件, 2012, 33(3): 69-71

    [9] 胡泳霞. 基于內(nèi)存模型的Java并發(fā)編程[J]. 電子測(cè)試, 2016(13): 89-90.

    [10] 張志強(qiáng), 王偉鈞, 施達(dá). 一種大容量數(shù)據(jù)文件抽取算法的優(yōu)化研究[J]. 成都大學(xué)學(xué)報(bào)(自然科學(xué)版), 2019(01): 52-55.

    [11] 勞加慶, 葉飛躍, 張國(guó)平. 多線程技術(shù)對(duì)批量數(shù)據(jù)處理的優(yōu)化[J]. 微型機(jī)與應(yīng)用, 2001(04): 11-12.

    猜你喜歡
    設(shè)計(jì)模式
    仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
    玩具世界(2023年6期)2024-01-29 12:14:36
    設(shè)計(jì)模式識(shí)別的特征信息分類研究
    “1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
    基于能力目標(biāo)培養(yǎng)的藥學(xué)專業(yè)課程整體教學(xué)設(shè)計(jì)模式研究
    云南化工(2021年9期)2021-12-21 07:44:16
    引入線索約束的設(shè)計(jì)模式變體挖掘研究*
    設(shè)計(jì)模式挖掘的有效性評(píng)估策略
    智慧圖書(shū)館環(huán)境下的融貫式服務(wù)設(shè)計(jì)模式研究
    三維協(xié)同設(shè)計(jì)模式下的航天項(xiàng)目管理實(shí)踐與展望
    交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
    基于“雙師制”指導(dǎo)下的工業(yè)設(shè)計(jì)專業(yè)畢業(yè)設(shè)計(jì)模式
    a级一级毛片免费在线观看| 午夜激情福利司机影院| 亚洲图色成人| 波多野结衣巨乳人妻| 99re6热这里在线精品视频| 精品少妇黑人巨大在线播放| 久久精品国产鲁丝片午夜精品| 亚洲三级黄色毛片| 看十八女毛片水多多多| 汤姆久久久久久久影院中文字幕 | xxx大片免费视频| av在线天堂中文字幕| av国产久精品久网站免费入址| 国产精品熟女久久久久浪| 干丝袜人妻中文字幕| 精品欧美国产一区二区三| 水蜜桃什么品种好| 亚洲国产精品国产精品| 九草在线视频观看| 欧美精品一区二区大全| 少妇丰满av| 色哟哟·www| av在线播放精品| 久99久视频精品免费| 午夜福利成人在线免费观看| kizo精华| 天堂√8在线中文| 综合色丁香网| 少妇人妻精品综合一区二区| 天堂网av新在线| 国产一区二区三区综合在线观看 | 午夜激情福利司机影院| 一级爰片在线观看| 国产高清不卡午夜福利| 亚洲欧美成人综合另类久久久| 26uuu在线亚洲综合色| 色哟哟·www| videossex国产| 麻豆精品久久久久久蜜桃| 真实男女啪啪啪动态图| 黄色日韩在线| 亚洲精品色激情综合| 国产激情偷乱视频一区二区| 日本三级黄在线观看| 久久草成人影院| 97热精品久久久久久| 中文天堂在线官网| 日韩,欧美,国产一区二区三区| 男女那种视频在线观看| 狂野欧美白嫩少妇大欣赏| 亚洲一区高清亚洲精品| 亚洲人成网站在线观看播放| 久久热精品热| 丰满人妻一区二区三区视频av| 国产精品爽爽va在线观看网站| 国产亚洲av嫩草精品影院| 啦啦啦啦在线视频资源| 人人妻人人看人人澡| 熟女电影av网| 热99在线观看视频| 丝袜美腿在线中文| 亚洲精品中文字幕在线视频 | 免费观看无遮挡的男女| 亚洲成人一二三区av| 亚洲人成网站在线播| 联通29元200g的流量卡| 身体一侧抽搐| 日韩三级伦理在线观看| 午夜免费激情av| 成人二区视频| 亚洲性久久影院| 三级国产精品欧美在线观看| 一级毛片 在线播放| 夫妻午夜视频| 亚洲欧美一区二区三区国产| 日韩一区二区视频免费看| 插逼视频在线观看| 久久精品久久久久久噜噜老黄| 久久久久久久午夜电影| 成人av在线播放网站| 亚洲av在线观看美女高潮| 中文资源天堂在线| 2022亚洲国产成人精品| 中国国产av一级| 精品一区二区三区视频在线| 联通29元200g的流量卡| 成人毛片a级毛片在线播放| 婷婷六月久久综合丁香| 性插视频无遮挡在线免费观看| 国产视频内射| av在线亚洲专区| 22中文网久久字幕| 97在线视频观看| 免费观看的影片在线观看| 内地一区二区视频在线| 国产精品一区二区在线观看99 | 久久综合国产亚洲精品| 日韩一区二区三区影片| 精品久久久久久久人妻蜜臀av| 国产精品久久久久久久电影| freevideosex欧美| 自拍偷自拍亚洲精品老妇| 少妇被粗大猛烈的视频| 一边亲一边摸免费视频| 亚洲最大成人手机在线| 欧美 日韩 精品 国产| 青春草视频在线免费观看| 九草在线视频观看| 亚洲欧美成人综合另类久久久| 一夜夜www| 日韩一区二区三区影片| 一个人看视频在线观看www免费| 日韩av在线免费看完整版不卡| 亚洲熟妇中文字幕五十中出| 99久久精品国产国产毛片| 别揉我奶头 嗯啊视频| 内射极品少妇av片p| 国产黄色免费在线视频| 久久精品综合一区二区三区| 国产人妻一区二区三区在| av在线老鸭窝| 麻豆久久精品国产亚洲av| 国产 亚洲一区二区三区 | 床上黄色一级片| 插阴视频在线观看视频| 男女那种视频在线观看| 成人毛片a级毛片在线播放| 国产一区亚洲一区在线观看| 麻豆成人午夜福利视频| 联通29元200g的流量卡| 91午夜精品亚洲一区二区三区| 一级片'在线观看视频| 少妇裸体淫交视频免费看高清| 亚洲精品第二区| 免费观看精品视频网站| 大陆偷拍与自拍| 搡女人真爽免费视频火全软件| 欧美激情在线99| 亚洲四区av| 欧美+日韩+精品| 91aial.com中文字幕在线观看| 国产亚洲最大av| 国产精品一二三区在线看| 国产亚洲精品av在线| 国产av在哪里看| 爱豆传媒免费全集在线观看| 国产淫片久久久久久久久| 国产成人精品一,二区| 精品熟女少妇av免费看| 欧美精品国产亚洲| 亚洲欧美一区二区三区国产| 搞女人的毛片| 亚洲乱码一区二区免费版| or卡值多少钱| 麻豆av噜噜一区二区三区| 人人妻人人看人人澡| 亚洲精品视频女| 成人特级av手机在线观看| 国产麻豆成人av免费视频| 久久久精品免费免费高清| 1000部很黄的大片| 97在线视频观看| 97精品久久久久久久久久精品| 亚洲人成网站在线观看播放| 日韩中字成人| 能在线免费看毛片的网站| 国产精品麻豆人妻色哟哟久久 | 激情 狠狠 欧美| 免费黄色在线免费观看| 亚洲精华国产精华液的使用体验| 久久国产乱子免费精品| 欧美性感艳星| 亚洲aⅴ乱码一区二区在线播放| 国产高清不卡午夜福利| 国产有黄有色有爽视频| 国产黄频视频在线观看| 日韩欧美三级三区| 日韩亚洲欧美综合| 联通29元200g的流量卡| 在线观看av片永久免费下载| 欧美日韩视频高清一区二区三区二| 成人鲁丝片一二三区免费| 高清视频免费观看一区二区 | 男人爽女人下面视频在线观看| 青春草视频在线免费观看| 国产高清不卡午夜福利| 一级片'在线观看视频| 亚洲国产色片| 高清视频免费观看一区二区 | 日本免费a在线| 亚洲精品456在线播放app| 少妇熟女aⅴ在线视频| 搡女人真爽免费视频火全软件| 丰满少妇做爰视频| 国产探花在线观看一区二区| 国产黄频视频在线观看| 91精品伊人久久大香线蕉| 亚洲国产精品国产精品| 男的添女的下面高潮视频| 久久久精品94久久精品| 欧美成人精品欧美一级黄| 岛国毛片在线播放| 亚洲国产欧美在线一区| 国产美女午夜福利| 亚洲精品一二三| 深夜a级毛片| 国产成人a∨麻豆精品| 老女人水多毛片| 两个人的视频大全免费| 视频中文字幕在线观看| 国产欧美日韩精品一区二区| 九九久久精品国产亚洲av麻豆| 亚洲欧美一区二区三区国产| 亚洲国产高清在线一区二区三| 免费大片18禁| a级一级毛片免费在线观看| 国内揄拍国产精品人妻在线| 久久精品国产亚洲网站| 亚洲国产高清在线一区二区三| 在线观看美女被高潮喷水网站| 久久久久久久亚洲中文字幕| 久久精品国产自在天天线| 久久久久精品性色| 国产熟女欧美一区二区| 日日摸夜夜添夜夜爱| 国产淫语在线视频| 日日撸夜夜添| 久久99热6这里只有精品| 人妻制服诱惑在线中文字幕| 一级毛片 在线播放| 免费观看无遮挡的男女| 精品人妻一区二区三区麻豆| 久久久亚洲精品成人影院| 欧美性猛交╳xxx乱大交人| 午夜精品国产一区二区电影 | 亚洲精品一二三| 哪个播放器可以免费观看大片| 视频中文字幕在线观看| 国产日韩欧美在线精品| 97人妻精品一区二区三区麻豆| 精品久久久久久久末码| 欧美一级a爱片免费观看看| 国产永久视频网站| 一个人免费在线观看电影| 亚洲图色成人| 亚洲精品aⅴ在线观看| 国产成人91sexporn| 成人性生交大片免费视频hd| 亚洲无线观看免费| 九九久久精品国产亚洲av麻豆| 亚洲精品日本国产第一区| 波多野结衣巨乳人妻| 美女主播在线视频| 亚洲四区av| 中国美白少妇内射xxxbb| 久久这里只有精品中国| 一级黄片播放器| 免费无遮挡裸体视频| 亚洲18禁久久av| 日本黄色片子视频| 免费观看在线日韩| 免费看美女性在线毛片视频| 丝瓜视频免费看黄片| 精品熟女少妇av免费看| 一级毛片久久久久久久久女| av在线老鸭窝| 少妇人妻一区二区三区视频| 国产精品熟女久久久久浪| 尾随美女入室| 九九久久精品国产亚洲av麻豆| 国产人妻一区二区三区在| 特级一级黄色大片| 高清av免费在线| 干丝袜人妻中文字幕| 欧美最新免费一区二区三区| 日本猛色少妇xxxxx猛交久久| 一级av片app| 亚洲国产高清在线一区二区三| 久久精品综合一区二区三区| 亚洲欧美一区二区三区黑人 | 一级毛片我不卡| 联通29元200g的流量卡| 精华霜和精华液先用哪个| 最近手机中文字幕大全| 97超碰精品成人国产| 最新中文字幕久久久久| 亚洲成人久久爱视频| 国产探花极品一区二区| 一级毛片 在线播放| 国产中年淑女户外野战色| 大香蕉久久网| 国产一区二区亚洲精品在线观看| 中文字幕制服av| 成人毛片60女人毛片免费| 女人十人毛片免费观看3o分钟| 中文字幕久久专区| 中文欧美无线码| 国产在视频线精品| 亚洲无线观看免费| 亚洲av免费在线观看| 国产精品一二三区在线看| 国产男女超爽视频在线观看| or卡值多少钱| 成人鲁丝片一二三区免费| 一级毛片黄色毛片免费观看视频| 日本av手机在线免费观看| 乱码一卡2卡4卡精品| 亚洲精品日韩在线中文字幕| 午夜免费激情av| 中国美白少妇内射xxxbb| 一级毛片 在线播放| 2021少妇久久久久久久久久久| 久久精品国产亚洲av天美| 久久亚洲国产成人精品v| 精品人妻偷拍中文字幕| 免费电影在线观看免费观看| av又黄又爽大尺度在线免费看| 日韩欧美精品免费久久| 中文字幕制服av| 少妇熟女aⅴ在线视频| 日本午夜av视频| 免费观看性生交大片5| 国产精品久久久久久久久免| 国产一区二区三区综合在线观看 | 精品一区在线观看国产| 国产一级毛片在线| 国产又色又爽无遮挡免| 男人舔奶头视频| 好男人在线观看高清免费视频| 色网站视频免费| 搡老妇女老女人老熟妇| 日韩,欧美,国产一区二区三区| 超碰av人人做人人爽久久| 人人妻人人看人人澡| 久久久久久国产a免费观看| 免费少妇av软件| 久久久久久久久久黄片| 亚洲在线自拍视频| 亚洲熟妇中文字幕五十中出| 国产淫语在线视频| 97在线视频观看| 秋霞伦理黄片| 午夜激情久久久久久久| 啦啦啦韩国在线观看视频| 国产成年人精品一区二区| 丝袜喷水一区| 七月丁香在线播放| 国产成人精品一,二区| 亚洲精品乱久久久久久| 欧美97在线视频| 亚州av有码| 国产高清三级在线| 国产成人91sexporn| 国产在线一区二区三区精| 国产精品av视频在线免费观看| 国产91av在线免费观看| 精品一区二区免费观看| 成人鲁丝片一二三区免费| 2021天堂中文幕一二区在线观| 一级黄片播放器| 亚洲av国产av综合av卡| 国产69精品久久久久777片| 免费看a级黄色片| 秋霞在线观看毛片| 自拍偷自拍亚洲精品老妇| 色视频www国产| 亚洲精品,欧美精品| 成年免费大片在线观看| av国产免费在线观看| 晚上一个人看的免费电影| 91av网一区二区| 欧美 日韩 精品 国产| 看非洲黑人一级黄片| 女的被弄到高潮叫床怎么办| 九九久久精品国产亚洲av麻豆| 别揉我奶头 嗯啊视频| 精品久久久久久电影网| 老师上课跳d突然被开到最大视频| 七月丁香在线播放| 精品一区二区三卡| 久久久国产一区二区| 啦啦啦韩国在线观看视频| 国产黄a三级三级三级人| 成人一区二区视频在线观看| or卡值多少钱| 天天一区二区日本电影三级| 日日干狠狠操夜夜爽| 欧美激情久久久久久爽电影| 美女内射精品一级片tv| 亚洲国产高清在线一区二区三| 大香蕉97超碰在线| 中文字幕av成人在线电影| 欧美xxxx性猛交bbbb| 亚洲精品视频女| a级毛色黄片| 亚洲成人精品中文字幕电影| 午夜福利成人在线免费观看| 亚洲av成人精品一二三区| 伊人久久国产一区二区| 又粗又硬又长又爽又黄的视频| 精品国内亚洲2022精品成人| 舔av片在线| 搞女人的毛片| 国产精品久久视频播放| 国产精品一区二区性色av| 亚洲成人久久爱视频| 日产精品乱码卡一卡2卡三| 色视频www国产| 美女主播在线视频| 天堂影院成人在线观看| 国产成人精品婷婷| 久久亚洲国产成人精品v| 天美传媒精品一区二区| .国产精品久久| 美女cb高潮喷水在线观看| 精品一区二区三区人妻视频| 久久人人爽人人片av| 精品人妻视频免费看| 晚上一个人看的免费电影| 日本wwww免费看| 又黄又爽又刺激的免费视频.| 我的女老师完整版在线观看| 免费黄网站久久成人精品| 国产精品无大码| 99热6这里只有精品| 亚洲成人av在线免费| 一级毛片电影观看| 欧美成人午夜免费资源| 欧美日韩在线观看h| 久久精品夜色国产| 国产一级毛片七仙女欲春2| 亚洲精品影视一区二区三区av| av在线亚洲专区| 久久久久久久午夜电影| 日韩视频在线欧美| 在线免费观看的www视频| 色尼玛亚洲综合影院| 日韩欧美精品v在线| 午夜激情欧美在线| 两个人的视频大全免费| 国产在视频线精品| 亚洲成人av在线免费| 久久韩国三级中文字幕| 人妻一区二区av| 97在线视频观看| 欧美97在线视频| 在线免费观看的www视频| 尤物成人国产欧美一区二区三区| 亚洲自拍偷在线| 一级片'在线观看视频| 嘟嘟电影网在线观看| av在线观看视频网站免费| 狂野欧美白嫩少妇大欣赏| 久久久亚洲精品成人影院| 免费看av在线观看网站| 久久99热这里只有精品18| 亚洲在线自拍视频| 听说在线观看完整版免费高清| 黄色一级大片看看| 毛片女人毛片| 亚洲精品,欧美精品| 99热这里只有精品一区| 国产成人精品婷婷| 亚洲,欧美,日韩| 卡戴珊不雅视频在线播放| 精品国产露脸久久av麻豆 | 免费无遮挡裸体视频| 2021少妇久久久久久久久久久| 亚洲精品视频女| 18禁动态无遮挡网站| 免费av毛片视频| 国产激情偷乱视频一区二区| 成人午夜高清在线视频| 亚洲第一区二区三区不卡| 最近的中文字幕免费完整| 日本色播在线视频| 观看免费一级毛片| 中文字幕制服av| 青春草亚洲视频在线观看| 日本三级黄在线观看| 少妇被粗大猛烈的视频| 秋霞在线观看毛片| 亚洲精品乱码久久久久久按摩| 简卡轻食公司| 男女边摸边吃奶| 国产成人aa在线观看| 成人毛片a级毛片在线播放| 在线免费十八禁| 一区二区三区高清视频在线| 亚洲欧美中文字幕日韩二区| 日韩欧美 国产精品| 亚洲av免费高清在线观看| 1000部很黄的大片| 简卡轻食公司| 在线观看av片永久免费下载| 狂野欧美白嫩少妇大欣赏| 亚洲精品乱码久久久久久按摩| 亚洲成人久久爱视频| 久久久亚洲精品成人影院| 最近2019中文字幕mv第一页| 国产爱豆传媒在线观看| 熟女人妻精品中文字幕| 22中文网久久字幕| 亚洲欧美中文字幕日韩二区| 久久精品人妻少妇| 免费黄色在线免费观看| 神马国产精品三级电影在线观看| 99热全是精品| av网站免费在线观看视频 | 国产v大片淫在线免费观看| 美女大奶头视频| 中文在线观看免费www的网站| av一本久久久久| 女人久久www免费人成看片| 丝袜美腿在线中文| 老司机影院毛片| 在现免费观看毛片| 街头女战士在线观看网站| 韩国高清视频一区二区三区| 少妇人妻一区二区三区视频| 亚洲精品中文字幕在线视频 | 如何舔出高潮| 高清av免费在线| 久久精品国产亚洲av涩爱| 亚洲最大成人手机在线| 91av网一区二区| 黄色欧美视频在线观看| 久久97久久精品| av在线蜜桃| 久热久热在线精品观看| 一边亲一边摸免费视频| 女人久久www免费人成看片| 能在线免费观看的黄片| 在线观看一区二区三区| 80岁老熟妇乱子伦牲交| 大片免费播放器 马上看| 男人舔奶头视频| 亚洲国产精品国产精品| 国产精品精品国产色婷婷| 国产有黄有色有爽视频| 亚洲成人一二三区av| xxx大片免费视频| 久久鲁丝午夜福利片| 日韩亚洲欧美综合| 国产不卡一卡二| 免费观看精品视频网站| 91久久精品国产一区二区成人| 精品人妻偷拍中文字幕| 亚洲精品一区蜜桃| 欧美性感艳星| 永久网站在线| 午夜精品国产一区二区电影 | 男女视频在线观看网站免费| 22中文网久久字幕| 亚洲国产精品国产精品| 美女xxoo啪啪120秒动态图| 成年女人看的毛片在线观看| 一级av片app| 日韩av免费高清视频| 三级经典国产精品| 国产乱来视频区| 亚洲精品色激情综合| 成人高潮视频无遮挡免费网站| 国产人妻一区二区三区在| 亚洲国产av新网站| 国产伦理片在线播放av一区| 日本欧美国产在线视频| eeuss影院久久| 国产在线男女| 久久久久九九精品影院| 免费观看a级毛片全部| 秋霞伦理黄片| 一级毛片我不卡| 亚洲熟女精品中文字幕| 日韩电影二区| 一区二区三区免费毛片| av播播在线观看一区| 中文字幕久久专区| 天天躁日日操中文字幕| av网站免费在线观看视频 | 少妇被粗大猛烈的视频| 小蜜桃在线观看免费完整版高清| 插阴视频在线观看视频| 免费观看a级毛片全部| 久久久精品免费免费高清| 一区二区三区乱码不卡18| 91av网一区二区| 精品久久久久久久人妻蜜臀av| 性色avwww在线观看| 日本午夜av视频| 欧美变态另类bdsm刘玥| 亚洲欧美清纯卡通| 婷婷色综合大香蕉| 波多野结衣巨乳人妻| 美女cb高潮喷水在线观看| 欧美bdsm另类| 亚洲精品一二三| 好男人在线观看高清免费视频| 婷婷六月久久综合丁香| 久久久久久久久久成人| 国产精品美女特级片免费视频播放器| 色综合亚洲欧美另类图片| 99re6热这里在线精品视频| 亚洲成人久久爱视频| 亚洲一级一片aⅴ在线观看| 国产成人精品福利久久| 麻豆精品久久久久久蜜桃| 又粗又硬又长又爽又黄的视频| 波野结衣二区三区在线| 啦啦啦啦在线视频资源| 国产国拍精品亚洲av在线观看| 成人亚洲欧美一区二区av| 99久国产av精品| 淫秽高清视频在线观看| 午夜福利在线观看免费完整高清在|