<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常用鏈接

    統計

    最新評論

    #

    perl print @

    #!/usr/bin/perl
    @rocks=qw(ab cd ef gh);
    print @rocks; #打印出abcdefgh
    print @rocks."\n"; #打印4

    posted @ 2009-02-18 15:00 九寶 閱讀(343) | 評論 (0)編輯 收藏

    關于java的JIT知識(轉)

    什么是JIT

    JIT是just in time,即時編譯技術。使用該技術,能夠加速java程序的執行速度。下面,就對該技術做個簡單的講解。

    首先,我們大家都知道,通常javac將程序源代碼編譯,轉換成java字節碼,JVM通過解釋字節碼將其翻譯成對應的機器指令,逐條讀入,逐條解釋翻譯。很顯然,經過解釋執行,其執行速度必然會比可執行的二進制字節碼程序慢。為了提高執行速度,引入了JIT技術。

    在運行時JIT會把翻譯過的機器碼保存起來,已備下次使用,因此從理論上來說,采用該JIT技術可以,可以接近以前純編譯技術。下面我看看,JIT的工作過程。

    JIT 編譯過程

    JIT編譯啟用時(默認是啟用的),JVM讀入.class文件解釋后,將其發給JIT編譯器。JIT編譯器將字節碼編譯成本機機器代碼,下圖展示了該過程。

    什么是JIT

    JIT是just in time,即時編譯技術。使用該技術,能夠加速java程序的執行速度。下面,就對該技術做個簡單的講解。

    首先,我們大家都知道,通常javac將程序源代碼編譯,轉換成java字節碼,JVM通過解釋字節碼將其翻譯成對應的機器指令,逐條讀入,逐條解釋翻譯。很顯然,經過解釋執行,其執行速度必然會比可執行的二進制字節碼程序慢。為了提高執行速度,引入了JIT技術。

    在運行時JIT會把翻譯過的機器碼保存起來,已備下次使用,因此從理論上來說,采用該JIT技術可以,可以接近以前純編譯技術。下面我看看,JIT的工作過程。

    JIT 編譯過程

    JIT編譯啟用時(默認是啟用的),JVM讀入.class文件解釋后,將其發給JIT編譯器。JIT編譯器將字節碼編譯成本機機器代碼,下圖展示了該過程。


    Graphic

     

    通過上面的解釋,我們了解了JIT的工作原理及過程,同樣也發現了個問題,由于JIT對每條字節碼都進行編譯,造成了編譯過程負擔過重。為了避免這種情況,當前的JIT只對經常執行的字節碼進行編譯,如循環等。

    需要說明的是,JIT并不總是奏效,不能期望JIT一定能夠加速你代碼執行的速度,更糟糕的是她有可能降低代碼的執行速度。這取決于你的代碼結構,當然很多情況下我們還是能夠如愿以償的。

    posted @ 2009-01-13 14:18 九寶 閱讀(2136) | 評論 (0)編輯 收藏

    [Embedded]嵌入式 Linux 的根文件系統 - rootfs (轉)

    * 嵌入式系統中主要的存儲介質 Flash 是稀有資源,為數不多的 RAM 也是。在嵌入式
    系統開發中,開發人員十分珍惜這兩種資源,也想出了許多辦法解決資源短缺的問題。
    * Linux 中,rootfs 是必不可少的。PC 上主要實現有 ramdisk 和直接掛載 HD(
    Harddisk,硬盤) 上的根文件系統;嵌入式中一般不從 HD 啟動,而是從 Flash 啟
    動,最簡單的方法是將 rootfs load 到 RAM 的 RAMDisk,稍復雜的就是 直接從
    Flash 讀取的 Cramfs,更復雜的是在 Flash 上分區,并構建 JFFS2 等文件系統。
    * RAMDisk 將制作好的 rootfs 壓縮后寫入 Flash,啟動的時候由 Bootloader load 到
    RAM,解壓縮,然后掛載到 /。這種方法操作簡單,但是在 RAM 中的文件系統不是壓
    縮的,因此需要占用許多嵌入式系統中稀有資源 RAM。
    * initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入
    了 cpio-initrd,大大簡化了 Linux 的啟動過程,附合 Linux 的基本哲學:Keep it
    simple, stupid(KISS). 不過,cpio-initrd 作為新的格式,還沒有經過廣泛測試,
    嵌入式 Linux 中主要采用的還是 image-initrd。
    * Cramfs 是 Linus 寫的很簡單的文件系統,有很好的壓縮綠,也可以直接從 Flash 上
    運行,不須 load 到 RAM 中,因此節約了 RAM。但是 Cramfs 是只讀的,對于需要運
    行時修改的目錄(如: /etc, /var, /tmp)多有不便,因此,一般將這些目錄做成
    ramfs 等可寫的 fs。
    * SquashFS 是對 Cramfs 的增強。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使
    用量方面也具有優勢。不過,據開發者介紹,在性能上可能不如 Cramfs。這也是一種
    新方法,在嵌入式系統采用之前,需要經過更多的測試。
    * XIP(exece-in-place,就地運行) 是一種不須將應用程序 load 到 RAM 就可以運行
    的技術,無疑可以減少 RAM 的使用。不過在嵌入式系統我還沒有遇到這種技術的使用

    posted @ 2008-12-29 16:58 九寶 閱讀(905) | 評論 (0)編輯 收藏

    ClearCase簡單使用 (轉)

    1. When you come to work, the first thing you need to do is: Create a View
       Command:
     

    ct mkview -tag <view_tag> <view_storage_path>

       example:

    ct mkview -tag alex_test /net/nj2/

       Other Command:

    ct lsview                  list all the views reside in the hosts

    ct lsview | grep name      list specified view by name

    ct rmview -tag <view_tag>  remove an exist view

    2. After you create a vew, you need to Set the View to enter it. Then you are able to see the vob content only when you set the view.

    ct setview <view_tag>

    Example:

    ct setview alex_test

    Other Commands

    ct pwv                     see which view you are currently in

    exit                       quit from current view

    3. When you are in a view, you need to set the config spec correctly to pick up the right version of element.

    ct catcs                   view your config spec

    ct edcs                    edit your config spec by vi editor

    Other Commands

    ct catcs > filename        Copy your config spec to a file

    ct setcs filename          Set your config spec from a file

    What doew config spec say ? For example:

    element* CHECKEDOUT

    element* .../ISGcq00123456/LASTEST

    element* BLUETOOTH_00.07.00

    element* AP_SIPC.01.32.00

    element* AP_IB2.00.38_ARM

    element* /main/LATEST

    Command

    element <file path> <version path>

    file path: hello.c, *, /vob/su_java/...

    version path: Label or Branch

    4. Now you may have a task to do. You have a CR assigned, and you know the baseline version.

    • Set config spec to the baseline version.
    • Create branch type associated with the CR.

    ct mkbrtype ISGcq00123456

    • Make branch on the baseline version

    ct mkbranch ISGcq00123456 hello.c@@/main/2

       Result: hello.c@@/main/ISGcq00123456/0 is created and checked out(a copy of hello.c in the dir was created and you can edited it. If there is not hello.c in the dir, the clearcase would submit a error).

    • Add a rule to pick up this branch in the config spec, just below the CHECKEDOUT rule.

    element* .../ISGcq00123456/LATEST

    Accessional:

    • Branch type shall have naming convention designed by every project.
    • Don't want check out:

    ct mkbranch -nco ISGcq00123456 hello.c@@/main/2

    • Remove a branch from an element:

    ct rmbranch hello.c@@/main/ISGcq00123456.

       Make sure no checked out version on this branch

    • Rename a branch name

    ct rename brtype:old_name brtype:new_name

       It will apply to all the created branch.

    • Remove a branch type as well as all the related element branch

    ct rmtype -rmall brtype:ISGcq00123456

    5. After making your CR branch on the file to be changed, check out the version if it hasn't been checked out(checkout后會產生一個自己的私有文件,你可以自己修改,別人看不到,只有這個文件被checkin后才會放到vobs里).

    ct co -nc hello.c@@/main/ISGcq00123456/0

        Then, you are able to edit this file. After you finish the change, check in the file to vob.

    ct ci -nc hello.c

        The result is, the element will increase one version on the branch:

    hello.c@@/main/ISGcq00123456/1

    Accessional
    • A checked out version is only in your view. Other engineer can not see it. If you remove that view, you will lost the checked out version.
    • You can undo checkout by:

    ct unco hello.c

    • If a checked version has no change, it can't be checked in. You will get an error message like "The file is identical"
    • An unreserved checked out will not block other people check out the same version. Normally, we just use reserved checkout.
    • You can only check out a file on the branch which has mastership role.
    6. If your task is to create a new file, you need to do below steps:
    • Make branch on the directory that you will add the file to

    ct mkbranch ISGcq00123456 /vob/su_jave/code/src

    • The directory will be automatically checked out. Then make element in this dir.

    ct mkelem -nco hello.c

         Create a folder

    ct mkelem -eltype directory test

          Dont check it out, because you need to make the CR branch on this file.

    ct mkbranch ISGcq00123456 hello.c

    • Check in this directory. Otherwise, other people can not see your new file.

    ct ci -nc /vob/su_java/code/src

    Accessional

    • We usually only check in the file, but forget to check in the directory. This will cause the file you created can't be stored in the VOB and can't be seen by other people.
    • Go to the top project folder, use below command to list all checked out files and directories int the current dir and sub dir in your view. It will help you check in all elements.

    ct lsco -cview -r

    7. Now, your task is ongoing. In coding and testing, you may need to merge your file to other version. below example gives the merge steps:

    Example: Merge file from hello.c@@/main/branchfrom/5 to hello.c@@/main/branchto/2

    ct co -nc hello.c@@/main/branchto/2

    ct merge -to hello.c hello.c@@/main/branchfrom/5

         Usually you may also need to compare two versions

    ct diff hello.c hello.c hello.c@@/main/branchfrom/5 hello.c@@/main/branchto/2

         Compare this version from the previous version

    ct diff -pre hello.c@@/main/branchto/2

    Accessional

    • Use this command to list all versions of an element

    ct lsvt hello.c

         include the merge info

    ct lsvt -merge hello.c

         Remove a merge arrow:

    ct rmmerge hello.c@@/main/branchfrom/5 hello.c@@/main/branchto/2

         Dont do actual merge, just draw a merge line

    ct merge -ndata hello.c@@/main/branchfrom/5 hello.c@@/main/branchto/2

    In what cases we need merge:

    • Integrate with the code developed by someone else.
    • If baseline version has been incresed, need upermage.
    • Merge for release.

    8. If you want to remove an un-use version, use the command

    ct rmver hello.c@@/main/branchto/2

         Then the version 2 will be removed, but next time the version will increase from 1 to 3.

         If you want to remove a file, you can use remove name command:

    ct rmname hello.c

         Be sure to make branch and check out the current directory before rmove it, just like the steps of make element.

         If you want to rename a file, you can use

    ct mv old_name new_name

        

         If you want to create an element link, you can use

    ct ln source_file file_link

         (checkout current folder like above)

    9. Now you may have completed the task of coding, testing, inspection, and prepare to release it. You need to check your developed version is complied with below rules:

    • Must make branch from the baseline version.
    • Must have up merged your branch if the baseline version is not the LATEST version.
    • All the files and directories have no checkou.

    10. How to label the version

         Make the label type:

    ct mklbtype BLUETOOTH_00.07.00

         Make label on a version:

    ct mklabel BLUETOOTH_00.07.00 hello.c@@/main/branchto/2

         Move a label from the old version to a new version:

    ct mklabel -replace BLUETOOTH_00.07.00 hello.c@@/main/branchto/3

         Remove label on a version:

    ct rmlabel BLUETOOTH_00.07.00 hello.c@@/main/branchto/3

         Remove the label type

    ct rmtype lbtype:BLUETOOTH_00.07.00

    11. How to search the reuqired version

         Find all files with the version(.../ISGcq00373766/LATEST) and with no label SAMBA_AP_DSL_BLUETOOTH_00.00.07:

    ct find /vob/directory -version 'version(.../ISGcq00373766/LATEST)  && !version(SAMBA_AP_DSL_BLUETOOTH_00.00.07)' -print

         Find all files with the version SAMBA_AP_DSL_BLUETOOTH_00.00.07, and then search STRING in all found files:

    ct find .-version 'version(SAMBA_AP_DSL_BLUETOOTH_00.00.07)' -exec 'grep STRING $CLEARCASE_PN'

    posted @ 2008-11-12 14:14 九寶 閱讀(1231) | 評論 (0)編輯 收藏

    cramfs文件系統(轉)

    1、cramfs的特點

    在嵌入式的環境之下,內存和外存資源都需要節約使用。如果使用RAMDISK方式來使用文件系統,那么在系統運行之后,首先要把外存(Flash)上的映像文件解壓縮到內存中,構造起RAMDISK環境,才可以開始運行程序。但是它也有很致命的弱點。在正常情況下,同樣的代碼不僅在外存中占據了空間(以壓縮后的形式存在),而且還在內存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環境下盡量節省資源的要求。

    使用cramfs就是一種解決這個問題的方式。cramfs是一個壓縮式的文件系統,它并不需要一次性地將文件系統中的所有內容都解壓縮到內存之中,而只是在系統需要訪問某個位置的數據的時侯,馬上計算出該數據在cramfs中的位置,將其實時地解壓縮到內存之中,然后通過對內存的訪問來獲取文件系統中需要讀取的數據。cramfs中的解壓縮以及解壓縮之后的內存中數據存放位置都是由cramfs文件系統本身進行維護的,用戶并不需要了解具體的實現過程,因此這種方式增強了透明度,對開發人員來說,既方便,又節省了存儲空間。

    cramfs擁有以下一些特性:

    采用實時解壓縮方式,但解壓縮的時侯有延遲。

    cramfs的數據都是經過處理、打包的,對其進先寫操作有一定困難。所以cramfs不支持寫操作,這個特性剛好適合嵌入式應用中使用Flash存儲文件系統的場合。

    在cramfs中,文件最大不能超過16MB。

    支持組標識(gid),但是mkcramfs只將gid的低8位保存下來,因此只有這8位是有效的。

    支持硬鏈接。但是cramfs并沒有完全處理好,硬鏈接的文件屬性中,鏈接數仍然為1.

    cramfs的目錄中,沒有“.”和“..”這兩項。因此,cramfs中的目錄的鏈接數通常也僅有一個。

    cramfs中,不會保存文件的時間戳(timestamps)信息。當然,正在使用的文件由于inode保存在內存中,因此其時間可以暫時地變更為最新時間,但是不會保存到cramfs文件系統中去。

    當前版本的cramfs只支持PAGE_CACHE_SIZE為4096的內核。因此,如果發現cramfs不能正常讀寫的時侯,可以檢查一下內核的參數設置。


    2、使用cramfs

    可以從
    http://sourceforge.net/projects/cramfs/下載cramfs-1.1.tar.gz。然后執行

    tar zxvf cramfs-1.1.tar.gz

    進入解包之后生成cramfs-1.1目錄,執行編譯命令:

    make

    編譯完成之后,會生成mkcramfs和cramfsck兩個工具,其中cramfsck工具是用來創建cramfs文件系統的,而mkcramfs工具則用來進行cramfs文件系統的釋放以及檢查。

    下面是mkcramfs的命令格式:

    mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile

    mkcramfs的各個參數解釋如下:

    -h:顯示幫助信息

    -e edition:設置生成的文件系統中的版本號

    -i file:將一個文件映像插入這個文件系統之中(只能在Linux2.4.0以后的內核版本中使用)

    -n name:設定cramfs文件系統的名字

    dirname:指明需要被壓縮的整個目錄樹

    outfile:最終輸出的文件


    cramfsck的命令格式:

    cramfsck [-hv] [-x dir] file

    cramfsck的各個參數解釋如下:

    -h:顯示幫助信息

    -x dir:釋放文件到dir所指出的目錄中

    -v:輸出信息更加詳細

    file:希望測試的目標文件

    posted @ 2008-08-14 15:43 九寶 閱讀(504) | 評論 (0)編輯 收藏

    linux創建2種新文件方式

    linux下沒有文件后綴來比較文件格式的用法
    只有兩種文件基于文本格式的sh和可以執行的2進制文件

    vi filename
    在編輯好你的文件后可以用wq!保存
    這樣就可以生成一個你以編輯好的文件
    還有vim gedit等文件編輯器
    也可以用上樓說的生成一個文件

    touch filename

    posted @ 2008-07-10 15:50 九寶 閱讀(264) | 評論 (0)編輯 收藏

    Bash Shell-使用內置的set和shopt命令設置bash選項

    set -o 打印所以的選項
    set -o vi 打開選項
    set +o vi 關閉選項

    shopt -p 打印所以的選項
    shopt -s cdspell打開選項
    shopt -u cdspell關閉選項

    posted @ 2008-07-10 15:49 九寶 閱讀(272) | 評論 (0)編輯 收藏

    Shell 運算和進制轉換(轉)

    Shell 運算和進制轉換

    Shell 提供大量的基本運算操作,在腳本中非常有用。Shell 對您提供的算術表達式求值,執行運算展開式,此時使用得出的結果替換表達式。以下面的格式提供運算表達式:

    $(( expression ))
                            

    您可以使用 echo 在命令行顯示運算展開式的結果,了解其工作情況。現在嘗試清單 5 所顯示的結果。


    清單 5. Bourne Shell 中的運算展開式
                         
                            $ echo $((10+40))
                            50
                            $ echo $((5*(3+3)))
                            30
                            

    您還可以將展開式分配給變量。嘗試清單 6 所顯示的結果。


    清單 6. 將運算展開式分配給 Shell 變量
                         
                            $ myvar = 10
                            $ echo $myvar
                            10
                            $ echo $(($myvar-2))
                            8
                            $ myvar = $(($myvar+5))
                            $ echo $myvar
                            15
                            $ result = $(($myvar-10))
                            $ echo $result
                            5
                            $
                            

    表 2 列出了在大多數 Bourne 以及與 Bourne 兼容的 Shell中可以使用的運算符。正如上面第二個示例,使用圓括號括起來的語句有更高的優先級。實際上,Shell 算術優先級通常根據 C 語言的規則來確定。


    表 2. Shell 條件表達式
    運算符 描述
    +
    -
    *
    /
    % 求余
    < 小于(1 代表真,0 代表假)
    <= 小于等于(1 代表真,0 代表假)
    > 大于(1 代表真,0 代表假)
    >= 大于等于(1 代表真,0 代表假)
    << 按位向左移位:將給定的整數或第一個表達式向左移動第二個表達式表示的位數
    >> 按位向右移位:將給定的整數或第一個表達式向右移動第二個表達式表示的位數




    回頁首


    使用 Shell 運算進行進制轉換

    假定在您的腳本中有一些數字,您需要以另外的進制處理這些數字。使用 Shell 運算可以很容易地自動實現這類轉換。一種情況是使用 Shell 運算把一個數字從給定的進制轉換位十進制。如果數字以運算展開式的形式提供,那么假定它帶有十進制符號,除非 它前面帶有 0(這種情況假定是八進制)或 0x(這種情況假定是十六進制)。鍵入以下內容以得到一些八進制和十六進制值的十進制輸出:

    $ echo $((013))
                            $ echo $((0xA4))
                                            

    您還可以使用以下格式指定 2 到 64 之間的任意進制:

    $((BASE#NUMBER))
                            

    通過在 Shell 提示符后鍵入清單 7 中所示的行,嘗試將二進制、八進制、十六進制以及其他進制的數轉換為十進制。


    清單 7. 在 Shell 中將任意進制的數以十進制輸出
                         
                            echo $((2#1101010))
                            echo $((8#377))
                            echo $((16#D8))
                            echo $((12#10))
                            echo $((36#ZZYY))
                            

    使用 bc 進行進制轉換

    在 Shell 中進行進制轉換的另一個訣竅是使用 bc,它是一種任意精度運算語言,大多數 UNIX 安裝程序都提供。因為它允許您指定輸出進制,所以當您需要以十進制以外的進制輸出時,這是一種很好的技術。

    bc 的特殊變量 ibaseobase 分別包含用于輸入和輸出的進制的值。缺省情況下,都被設置為 10。要執行進制轉換,需要改變其中的一個或兩個值,然后提供一個數字。立即嘗試,如清單 8 中所示。


    清單 8. 使用 bc 執行進制轉換
                         
                            $ bc -ql
                                                10
                            10
                            obase=16
                                                10
                            A
                            ibase=2
                                                10
                            2
                            
                                                     Control-D
                                                
                            $
                            

    要快速執行進制轉換,可以聯合使用 bcecho形成快捷的單命令行程序,將給定的值通過管道傳輸給 bc。鍵入清單 9 中顯示的內容。


    清單 9. Shell 單命令行 bc 程序
                         
                            $ echo 'obase=16; 47' | bc
                            2F
                            $ echo 'obase=10; ibase=16; A03' | bc
                            2563
                            $
                            

    警告:當您設置 bc 的輸入進制以后,輸入 bc 的所有數字都使用該進制,包括您提供用于設置輸出進制的數字。因此最好先設置輸出進制,否則可能會產生意想不到的結果,如清單 10 中所示。


    清單 10. 設置輸入和輸出進制的先后順序的重要性
                         
                            $ echo 'ibase=16; obase=10; A' | bc
                            A
                            $ echo 'ibase=16; obase=A; A' | bc
                            10
                            $
                            

    posted @ 2008-07-09 14:46 九寶 閱讀(1652) | 評論 (0)編輯 收藏

    執行shell程序文件有4種方法(轉)

    執行shell程序文件有4種方法
      (1)#chmod +x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令行下直接運行,像執行普通命令一樣)
      (2)#sh file
      (3)# . file
      (4)#source file

    posted @ 2008-07-08 10:21 九寶 閱讀(203) | 評論 (0)編輯 收藏

    Bitwise operators and Shift operators

    位運算符與邏輯運算符基本相似,不過后者的對象只是表示真和假的二值運算,位運算符的對象則是二進制數。Java語言中字節、字符和整數等都可以轉換為二進制,所以位運算符的對象也可以是它們。常見位運算符有:
    按位進行與運算 : &
    按位進行或運算 : |
    按位進行位異運算: ^
    按位進行取反運算: ~
    按位進行循環左移:<<,運算符左側對象左移由右側指定的位數,低位補0,最高位拋棄。帶符號的左移位運算相當于對左操作數進行乘2運算。
    按位進行循環右移:>>,運算符左側對象右移由右側指定的位數,若值為正,在最高位插入0,若值為負,在最高位插入1,即移入的最高位和原最高符號位相同。帶符號的右移位運算相當于對左邊的運算對象進行除2運算。
    按位進行無符號右移:>>>,無論運算符左邊的運算對象取值正負,都在高位插入0,即移入位始終補0.
    要注意是沒有按位進行無符號左移的。位運算符的操作數只能是整數,char,byte,short,
    int和long,進行位運算時,總是先將字符型值、字節型值和短整型值轉換為整型再進行位運算。位運算符游標的操作數用于指定移動的位數,按規定其不應超過左側數的進制表示位數。
    The bitwise operators allow you to manipulate individual bits in an integral primitive data type.Bitwise operators perform Boolean algebra on the corresponding bits in the two arguments to produce the result. The bitwise operators come from C’s low-level orientation, where you often manipulate hardware
    directly and must set the bits in hardware registers. Java was originally designed to be embedded in TV set-top boxes, so this low-level orientation still made sense. However, you probably won’t use the bitwise operators much.
    The bitwise AND operator (&) produces a one in the output bit if both input bits are one; otherwise, it produces a zero.
    The bitwise OR operator (|) produces a one in the output bit if either input bit is a one and produces a zero only if both input bits are zero.
    The bitwise EXCLUSIVE OR, or XOR (^), produces a one in the output bit if one or the other input bit is a one, but not both.
    The bitwise NOT (~, also called the ones complement operator) is a unary operator; it takes only one argument. (All other bitwise operators are binary operators.) Bitwise NOT produces the opposite of the input bit—a one if the input bit is zero, a zero if the input bit is one.

    posted @ 2008-05-20 13:22 九寶 閱讀(376) | 評論 (0)編輯 收藏

    僅列出標題
    共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
    主站蜘蛛池模板: 国产在线观看www鲁啊鲁免费| 免费看美女裸露无档网站| 四虎影视永久免费观看网址| 一区二区亚洲精品精华液 | 亚洲国产无线乱码在线观看| 亚洲国产精品自在在线观看| 亚洲AV无码一区二区三区牛牛| 日本免费网站视频www区| 亚洲国产成人九九综合| 一区二区免费国产在线观看| 免费观看激色视频网站bd| 亚洲乱码中文论理电影| 99久久99久久精品免费看蜜桃| 亚洲娇小性xxxx| 久久免费视频精品| 亚洲日韩中文字幕天堂不卡| 国产va精品免费观看| 亚洲国产精品嫩草影院在线观看 | 亚洲熟妇AV一区二区三区浪潮| 日韩精品免费一区二区三区| 四虎永久在线精品免费一区二区| 国产乱辈通伦影片在线播放亚洲| 中国极品美軳免费观看| 国产精品无码一二区免费| 日韩精品无码免费视频| 皇色在线视频免费网站| 亚洲AV无码一区二区三区性色| 国产精品免费精品自在线观看| 亚洲中文字幕无码mv| 国产精品亚洲高清一区二区| 三年片在线观看免费观看大全动漫| 亚洲最大黄色网址| 又黄又大又爽免费视频| a级精品九九九大片免费看| 亚洲国产精品久久久久秋霞影院 | 久久成人a毛片免费观看网站| 亚洲一区在线视频| 亚洲人午夜射精精品日韩| 永久免费在线观看视频| 美女被免费视频网站a| 亚洲国产日韩一区高清在线|