用于內存泄漏診斷的方法和裝置的制作方法

            文檔序號:6465621閱讀:258來源:國知局
            專利名稱:用于內存泄漏診斷的方法和裝置的制作方法
            技術領域
            本發明涉及一種用于垃圾收集語言的內存泄漏診斷的方法和裝置。
            背景技術
            在一些編程語言以及相關的運行時間(runtime)中,通常會由應用程序 本身提供一種內存管理功能。對于那不再被程序需要的內存是由程序設計員 來釋放。如果程序不能合理釋放不同的內存將導致內存資源的浪費,即這些 內存將不能被任何其他的程序使用。導致這種內存浪費的程序錯誤通常稱之 為"內存泄漏"。在有些編程語言中,會采用自動內存管理而不是依賴程序員 釋放內存。這種自動內存管理在本領域通常稱之為"垃圾收集",就是一種與 編程語言以及其相關的運行時間的實施相關的運行時間系統的主動元件。這
            員部分地從釋放內存的管理工作中解脫出來。但是,自動內存管理會產生另 一個問題,就是有些對象保留對部分內存中的數據結構的引用(reference),
            動垃圾收集器回收那些不再被使用的內存部分,也導致了 "內存泄漏"。因 此,盡管垃圾收集機制幫助減少了 "內存泄漏"問題,但是后一種內存泄漏 仍舊存在并導致計算機的性能降低,嚴重的時候會導致應用程序的運行占用 所有的內存并導致計算機崩潰。因此,內存泄漏由于其對計算機的性能造成 巨大影響而削弱了計算機的可獲得性和安全性。
            對于支持自動內存管理的運行時間中的內存泄漏,其主要以兩類方式存 在 一類是通過每次執行而快速地創建大量的泄漏或以至于為人所覺察的方 式創建泄漏;另一類是通過每次執行而連續微妙地以至于無法察覺地創建泄 漏。
            如何發現和找到那些正在泄漏的對象以及快速找到泄漏的原因是本領域 需要解決的問題。 一個系統的泄漏診斷起來是非常復雜的,尤其是對于那些 每次連續以及較小容量地發生的緩慢泄漏而言是如此。對于在堆上的不明顯
            5的增長是非常難以辨識的。通常,在發現泄漏時已經為時已晚,泄漏程序已 經對整個系統造成了嚴重的影響。這對于那種開始很小但是在整個運行時間 段內持續增長的泄漏而言尤其如此。有時,在問題大到足以可注意之前需要 高達幾周的服務時間。識別這些潛在泄漏是非常困難的,尤其是對于不能忍
            受多次堆(heap )訪問甚至堆轉儲(dump )的在線系統(live productive system ) 而言是如此,因為這些系統不能忍受由于堆操作需要的執行暫停。盡管現在 存在各種垃圾回收方式并且也各有益處,但是這種內存泄漏對于Java程序而 言依然是一個問題。
            目前,現有的一些技術有助于用戶對黑箱進行研究以便確定在運行時間 (runtime)處的根本原因。對診斷內存泄漏,現有技術主要依賴于比較區分 堆快照(snapshot)(堆快照是一種由像節點一樣的類型以及其間的引用構成 的圖(graph))以及根據對象數量的增長來進行診斷。這些技術在每輪垃圾 收集之后監視堆,并且觀察自由空間的向下的鋸齒圖形(內存的使用率曲線 圖)直到程序無法在從堆上獲得空間為止(每次收集的、可供以后使用的內 存越來越少)。這種現有的技術并不能用于在線系統,因為這種堆快照的獲取 和分析會使得具有較大的堆容量的系統暫停幾十秒。對于諸如服務器的在線 系統而言,這種延遲或暫停會導致超時,從而顯著影響在線應用的表現。基 于上述原因,這種延遲和暫停對于在線系統而言是完全不可接受的。
            而且,用于大型應用程序的內存堆往往容量巨大,因此,試圖對堆快照 進行頻繁的比較對這些應用程序的診斷幫助有限,因為泄漏對象并不明顯, 但是如果利用現有技術進行泄漏診斷,應用程序會由于為進行泄漏診斷而頻 繁進行堆快照的比較操作而減慢,這將對服務質量以及用戶的體驗帶來負面
            到很大干擾(perturb)以至于不具有實際價值,尤其是在在線環境下。
            現有的內存泄漏的診斷方法對工業應用的效果有限,因為這些現有的方 法通常將基本類型識別為嫌疑類型。例如, 一種現有技術建議使用引用 (reference)來查找負責內存泄漏的有用對象。但是引用不能包含執行語境 信息。被引用的嫌疑對象因為是基本的常見使用類型,可能同時被多個引用 者持有。在這種情況下,人們依然不了解這些引用為什么會產生以及在何種 條件下泄漏問題會被再現。診斷以及修復是否正確難以進行判別。
            在目前的實踐中, 一方面,依賴多次取得全引用圖快照并對其進行引用分析對于大規模在線系統而言成本過于昂貴。另一方面,在發明人的經驗中, 為了診斷內存泄漏,用戶必須尋找可能具有問題的候選數據結構。但是,發 現將要關注的正好的數據結構非常困難。當探尋服務(尤其是大型在線系統) 的引用圖時,噪聲、復雜性以及規模問題會使得引用圖的分析非常困難。當 在長時間運行的系統中診斷緩慢的內存泄漏時,噪聲可能是一個特別的問題。 噪聲影響可能會矮化診斷緩慢泄漏所需的證據直到其運行了很久之后為止。
            概括而言,現有技術方案主要集中在以下幾點反復訪問堆甚至進行堆
            轉儲來產生堆快照、在不同的快照之間進行比較以便找到作為泄漏候選的增 長節點、找到嫌疑結構、以及分析引用圖從而找到造成內存被不當持有的引 用者以便隨后進行確認。因此,目前針對內存泄漏路徑所采取的方法通常包
            括兩個步驟診斷并確認診斷以及修復泄漏點。但是在診斷和確認診斷之間 存在斷層(gap),現有技術在內存泄漏診斷方面所能提供的幫助有限。 根據以上描述可知,現有的內存泄漏診斷技術存在以下技術問題
            1. 效率低下。現有的途徑需要用戶手動將這些高速緩存對象與真正的泄 漏對象區分開。總體而言,這些途徑使得用戶忙于應付關于所創建的各個對 象的眾多低水平的細節,普通用戶很難解釋復雜引用圖以獲得相關問題執行 環境。這些解釋處理需要大量的專門知識。即使對于專家而言,這也通常需 要進行很長時間的分析工作來發現泄漏的根本原因。
            2. 堆訪問會對所運行的系統造成的干擾(perturbation )。這些技術在有 些情況下將使得運行的系統不穩定以至于不具有實際價值,尤其是在在線境 下。獲取引用圖后需要對堆快照執行比較分析,這些工作甚至可以造成具有 較大堆尺寸的系統暫停幾十秒。如前所述,對于服務器而言,這些延遲或暫 停會導致超時(timeout),并且顯著地改變系統的特性。
            3. 基于堆增長進行泄漏分析受到限制。現有的一些工具利用堆的增長和 對堆進行區分來發現內存泄漏,以便發現使得堆增長的對象。盡管堆增長是 有助于判別的有用的參數,但是僅僅使用增長作為一種啟發來發現泄漏依然 存在許多問題。畢竟,增長的對象或類型并不一定就是泄漏并且泄漏也并不 一定就會增長。
            4. 基于引用進行的泄漏分析受到限制。僅僅知曉占支配地位的泄漏對象 的類型,通常是諸如"串型"的低級類型,對解釋為什么會發生內存泄漏的 幫助有限,這是因為這些串可能被用于多個語境中,甚至可能在相同的數據結構(例如DOM文件)中被用于多種用途。此外由于一個低級泄漏對象可 能同時被多個引用者不當持有,因此很容易在分析引用圖、提取泄漏的原因
            時導致迷失。單一的DOM對象包含有成千上萬個對象,并且在其間存在豐 富的引用網絡。如果對架構的實施不了解,就很難獲知要遵循引用路徑中的 那個路徑、獲知何時分析分配調用路徑、或者哪個調用位置是重要的。
            5.基于類型分配堆棧進行的泄漏分析受到限制。有些方法能夠通過監視 堆而同時記錄每一個類型對象的分配堆棧,但并不是嫌疑類型的所有實例正 在泄漏,因此實際泄漏路徑趨向被淹沒在所有堆棧之間,并且存儲和分析這 些堆棧需要付出運行時間和運行空間的代價。通常,泄漏位置不是與分配位 置映射,而是與分配函數的調用者相映射。例如,Java數據庫連接(JDBC) 通過由一個類調用的一個代理類被反復地創建,所述調用的類會忘記調用該 代理類的JDBC釋放函數。這樣,就必須對調用者進行分析。
            綜上可見,現有技術現需要進行復雜圖分析以及豐富的程序知識,為泄 漏的確認以及修復提供有限的線索。
            本申請的目的在于解決現有技術中存在的上述技術問題。

            發明內容
            發明人注意到,現有的方法主要集中在內存泄漏的查找,但是很少關注 與泄漏問題直接相關的分配路徑的認識。辨識其上可能發生泄漏的分配路徑 能夠直接獲得與泄漏分析相關的信息,指引用戶跟蹤嫌疑對象分配和使用。
            基于以上認識以及為了避免上述現有技術的缺點,本發明提供了 一種能 夠用于活動系統的內存泄漏診斷裝置和方法。
            根據本發明的一個方面,提供了一種用于診斷內存泄露的方法,包括 跟蹤應用程序在虛擬機上運行過程中的對象分配,從而獲取并記錄對象的分 配路徑和分配時間;以預定的時間間隔計算每一類對象在其分配路徑的年齡 代數;以及將其上具有高年齡代數對象的分配路徑確定為可能存在內存泄漏 的分配路徑,并報告給用戶以進行分析。
            根據本發明的另一個方面,提供了一種診斷內存泄漏的裝置,包括
            對象分配跟蹤器件,跟蹤應用程序在虛擬機上運行過程中的對象分配, 從而獲取并記錄對象的分配路徑和分配時間;分配路徑記錄器件,用于記錄 從對象分配跟蹤器件傳送來的每個對象的分配路徑和分配時間;用于應用程
            8序的堆,用于存儲從分配路徑記錄器件傳送來的路徑分配的對象信息;分配
            路徑讀取器件,用于讀取所述堆中路徑分配的對象信息,并掃描存儲器中存
            儲的每個對象的id以及對應的分配路徑信息,以便針對每條分配路徑整理由 它分配的、并且還沒有被回收的對象并根據每個對象的分配時間計算該路徑 所分配同一類對象的年齡代數;分配路徑排序器件,用于根據每條路徑分配 的、并且存活的對象的年齡代數把路徑排序;以及診斷報告器件,用于對從 分配路徑排序器傳送來的分配路徑的排序數據進行分析,并將高排序的分配 路徑確定為可能存在內存泄漏的分配路徑報告給用戶以進行分析。
            根據本發明的另一個方面,還提供一種用于診斷內存泄漏的裝置,包括 對象分配跟蹤器件,用于跟蹤應用程序在虛擬機上運行過程中的對象分 配,從而獲取對象的分配路徑和分配時間;分配路徑記錄器件,用于在每個 所分配的對象上打上包含其分配路徑與分配對象的對應關系的標簽;用于應 用程序的堆,用于存儲從分配路徑記錄器件傳送來的路徑分配的對象信息; 分配路徑讀取器件,對每條分配路徑直接按照標簽從所述堆中讀取由它分配 的、并且還沒有被回收的對象,并根據每個對象的分配時間計算該路徑所分 配同一類對象的年齡代數;分配路徑排序器件,用于根據每條路徑分配的、
            并且存活的對象的年齡代數把路徑排序;以及診斷報告器件,用于對從分配 路徑排序器傳送來的分配路徑的排序數據進行分析,并將高排序的分配路徑 確定為可能存在內存泄漏的分配路徑報告給用戶進行分析。


            下面參照附圖僅作為示例詳細描述本發明的實施例,其中
            圖1表示在執行應用程序的過程中用于管理所分配對象的信息的數據結
            構;
            圖2所示的是本發明所使用的標簽的結構的示意圖。; 圖3所示的是在不同波段上的同類對象之間的調用關系的示意圖; 圖4所示的是提取每個對象的分配路徑以及將所述分配路徑與具體對象 進行綁定的過程示意圖5所示的是不同位置層級的結構以及進行對象聚合的示意圖。 圖6所示的是診斷一個應用程序所造成的內存泄漏的流程圖 圖7所示的是用于診斷內存泄漏的裝置的一個實施例。圖8所示的是用于診斷內存泄漏的裝置的另 一個實施例。
            具體實施例方式
            現在將參考本發明的示例性實施例進行詳細的描述,在附圖中圖解說明 了所述實施例的示例,其中相同的參考數字始終指示相同的元件。應當理解, 本發明并不限于所公開的示例實施例。還應當理解,并非所述方法和設備的 每個特征對于實施任一權利要求所要求保護的本發明都是必要的。此外,在
            整個公開中,當顯示或描述處理或方法時,方法的步驟可以以任何順序或者 同時執行,除非從上下文中能清楚一個步驟依賴于先執行的另一步驟。此外, 步驟之間可以有顯著的時間間隔。
            申請人發現,泄漏的對象通常屬于一種類型,并且該類型的實例在不同 的間隔期間被連續地生成、分配。考慮到這種情形,在本發明的方法中,首 先辨識與這種分配一致的類的類型。隨后,找到創建該類型的實例的路徑。 本發明關注在每一個相對較長的間隔中連續創建的同一類對象。為了實現本 發明的目的,本發明提出了一種數據結構對同一類型的對象分配進行跟蹤, 如圖1所示。每種面向對象的應用程序都包含有不同類型的對象。針對每種 類型的對象,都構建一種便于記錄其分配路徑的列表。這種數據結構中包含 了類的簽名、對象計數、時間計數器以及分配路徑(一個對象的分配路徑是 其分配時刻的堆棧映象)。通過這種數據結構對對象的分配進行管理。
            參見圖1,針對同一種類型的對象,在應用程序的過程中可能在不同的 路徑上被分配。因此根據圖l所示的數據結構,針對每條分配路徑進行跟蹤, 利用計數器記錄在該路徑上分配的對象數量,當分配數量超過一定規模的時 候在計時器中記錄相應的時刻。換句話說,計時器中記錄了分配數量連續到 達制定規模的時間間隔長度。。對所述的對象的分配信息的跟蹤,可以通過后
            面將結合圖6和7所詳細描述的對象分配跟蹤器件61來進行。對于所跟蹤獲 得這種對象的信息,可以由將結合圖6和7所詳細描述的分配路徑記錄器件 62記錄起來并存儲到相應的存儲器63中或直接發送到應用程序的堆中。
            對于所記錄的具有上述數據結構的對象信息,可以采用專門的分配路徑 管理器件來進行管理,也可以在直接將相關的對象信息發送到堆之前對每個 所分配的對象打上獨特的標簽,以便將每個對象(即使是相同類的對象)區 分開來。圖2所示的就是本發明可以使用的這種標簽的形式。針對每個所分配的對象的一個標簽包^"了多個字^殳。就本發明所示的圖2中的實施例而言,
            所述標簽結構中的第一字段是該對象的標識符字段id,其表示了該對象屬于 哪個波段(band)以及那個組(group),倆者的組合唯一的標志了該對象所 處的"年齡代數",其中對象的年齡是指從其被分配一直到被釋放的時間,其 年齡代數可以用該對象自分配起直到被回收所經歷的"垃圾回收,,次數或者 該對象存在時間相對于某一預定時間閾值的倍數。在這里,默認每一次垃圾 回收都會檢索所有在堆中分配內存的對象。第二字段表示類字段,表示該對 象屬于那個類,例如圖l中所示的類l、類2、類3......等。第三字段屬于路
            徑字段,表述該對象位于圖1中所示的哪個路徑上。第四字段是方法字段, 該方法字段并不是一種方法簽名的真實內容,而是一個地址,指向方法簽名 的實際存貯。最后一個字段是被調用者字段,被用來尋找分配的路徑。該字 段與第四個字段結合,可以恢復出分配指定對象的路徑內容。圖3就表示出 了如何基于不同年齡代數的對象標簽,從調用關系字段和方法字段恢復出基 本的路徑信息。
            下面,本發明將參照圖4對本發明如何跟蹤對象分配以及分配路徑以及 如何在分配過程中計數進行詳細的描述。
            圖4所示的是提取每個對象的分配路徑以及將所述分配路徑與具體對象 進行綁定標簽的過程示意圖。在應用程序運行時,對象的分配被跟蹤。對于 類型i的對象,當該對象的總數達到鬮值H時記錄時間Ti,同時將該計數器 值重置為0。當該對象的總數再次達到閾值H時記錄時間Ti+1。如果Ti和Tj+, 之間的差值超過閾值Tt時,該類型i就被識別需要進行下一階段的跟蹤記錄 過程,如果類型i進入下一階段的記錄過程,分配i對象的路徑將被記錄下來 以及在該路徑上分配i類型對象的總數也被記錄。對于由路徑Pi所分配的類 型i的對象,在Pi上的當前層級(tier,層級代表分配研究對象的堆棧位置, 因為堆棧是分層結構的,所以使用層級來標志堆棧中的位置),在本發明中也 稱之為波段(band),的位置被標簽到對象上。如果Tj和Tw之間的差值小于 閾值Tt時,類型i的計數不變,隨著新實例的分配而增加。當對象的總數在 時間Ti+I處再次達到閾值H時其數量并且Tj和Tj+,之間的差值超過閣值Tt 時,該數量被重置為0,并且采用Tjw的值替代Tj,并且增加Pi上的層級, 以便后面分配的對象將采用下一等級的位置來標簽。如此對Pi上的的每個等 級的位置逐步地執行相同的處理和判斷,以便這些等級將被標簽在對象上。閾值Tt選擇對于在服務期間辨識壽命(lifetime)分布是非常有幫助的。 該默認值被設定為平均GC (垃圾收集)間隔。Nt的選擇被用于安排對象分配 的規模或度量(scale ),這有助于發現用于相對頻繁地分配一種類型對象的路 徑。這種相對頻繁地分配一種類型的對象的分配路徑很可能與持續泄漏相關。 當屬于 一種類型的對象被分配的總數超過閾值Nt時,這種類型的對象被辨識 出來并且其分配路徑必須予以重視。當在固定路徑中分配的對象的數量超過 閾值Nt時,該路徑被辨識出來并通過將其自身與所創建的實例綁定起來而被 記錄。如果達到伐值的時間太短(<Tt),綁定到對象上的標簽不變。如果時 間足夠長(>=1\),新的標簽將被給予被分配的對象。這種綁定間隔導致標記 不同頻帶id和組id的組合的對象之間的分配時間至少長于Tt。換句話說,組 id和頻帶id的組合唯一的標記了不同年齡代數的對象。這種標記方式直接有 助于在堆訪問的同時進行泄漏診斷,并輸出泄漏對象以及直接相關的泄漏路徑。
            為了區分不同位置的層級(一個位置的層級表示其位于整個分配路徑上
            例如,頻帶O被賦予位于分配路徑的頂部的分配位置,該位置直接創建對象, 而頻帶1則賦予調用頻帶0的位置的分配位置。這樣對診斷泄漏對象以及跟 蹤對象標簽的分配路徑非常有用,該對象標簽將在下面兩部分中引入。組id 被引入以防頻帶的值滿溢當頻帶代表的層級數超過分配路徑的最大深度時, 組id從0開始自增。頻帶值每滿溢一次,組id自增l。組id和頻帶id的組 合對于后面的診斷非常重要。圖5所示的就是這種層級的示意圖。
            下面所示的程序代碼表示出了本發明是如何基于圖1中所示的結構來跟 蹤管理對象的分配的,也是對上面的具體描述的一種程序表示。該程序代碼 在Java對象-陂分配時^f皮調用。
            New—object ()
            /*Get class signature of the object's class.*/ classSignature = GetClassSignature ()
            /*Find the class index inhashTable, if it's not exist, putitintohashTable.*/ class工ndex = getAndPutClass ( classSignature ) /★Increase the object count of this class.*/ countClass (),'
            /*If count of this class > Nt, count this ojbect to it's allocation path.*/ if( objectCount 〉 Mt ){ /*Find allocation path in this class structure, if it's not exist, put it into hashTsble.*/
            getAndPutAllocationPath(); /*Tag this object with allocation path's band, class index, method of theband and its callee.V
            tagObject(allocPathBand, class工ndex, methodOfBand, callee)/ "Increase the object count of this allocation path of this class ,*/ countAllocPath (),-
            /*If the allocation path count 〉 Nt and time since last change of allocation path's band larger than Tt,then increase band of the allocation path, and reset its count, and update lastChangeTime*/
            if( countOfAllocPath 〉 Nt && time—interval 〉 Tt ) moveToNextBand ()
            }}
            以上對對象的分配的跟蹤和記錄進行詳細的描述。這種對各種類型的對 象的分配的跟蹤和記錄是為了便于在進行診斷時發現泄漏對象以及發生泄漏 的路徑。在進行診斷的時候,發現泄漏類以及泄漏的路徑是同時進行的,而 不是分步進行的。基于對對象分配的跟蹤和記錄,下面描述泄漏的診斷。
            在進行診斷之前,需要對應用程序的虛擬機的堆進行訪問。經過多次垃 圾回收當前堆中僅保存有存活的對象信息。就本發明而言,包含有所分配對 象的類型、分配時間、分配路徑等信息。這些信息可以以上述與對象綁定的 標簽的形式存在,也可以其他形式存在,例如可以專門設立一種分配路徑管 理器將按來管理每個對象的分配時間以及分配路徑直接的對應關系。
            總體而言,首先,將標簽中基于頻帶id和組id的組合相同的對象聚合 (aggregate)成一組。接著從具有最高頻帶的對象從其標簽的最后倆個字段 中恢復出這些對象的分配路徑。用這種方式找到的組數就是該路徑分配對象 的年齡跨度或者年齡代數。獲取該路徑中的對象分配跨度或代數(span)以 便用于診斷泄漏。采用這種方式,可同時找出泄漏對象以及泄漏路徑。
            在較長的運行時間期間,泄漏導致在堆上具有不同年齡的相同類型的對 象的存在。對象的壽命是其幸免的垃圾回收的次數。該跨度計數是一種類型 的所有實例的不同壽命的數量或者代數。較低的跨度計數表示一類的所有實 例在存儲器內已經存在了相同的時間。較高的跨度計數表示該運行的應用程 序正繼續分配同一類新對象而沒釋放其更老的對象,程序通常不傾向于間隔 地分配長時間存活的對象。相反,他們傾向于集中性地分配長時間存活的對 象,或者分配對象只是為了在隨后很短一段時間使用,這些對象隨后一旦其 不再被需要就會立刻被清除。
            基于以上理論,存活對象通過其標簽被匯總以便診斷泄漏問題。如在前 面所提到的那樣, 一個標簽包括與分配路徑上的層級相關的位置的頻帶id以
            13及與將路徑標簽到對象上的滿溢次數(round)相關的組id。每一次垃圾收集 都會清除清除堆上那些不被引用的、"死亡"的對象。如上面所提到的那樣, 頻帶id以及組id的組合在不同時間間隔(至少間隔Tt)期間被綁定。時間 Tt與垃圾回收的時間間隔相關,能夠用于標識對象的年齡。這樣,標簽中不 同頻帶id以及組id的組合區分了不同年齡的對象。基于以上分析,所有標簽 中擁有相同的頻帶id以及組id組合的對象被分到一組,這樣被一條分配路徑 分配的對象被分到若干組內。分組的數量決定了該路徑分配的對象的年齡代 數。分配最大年齡代數的對象的那些路徑被辨識為候選泄漏路徑。具有這些 候選路徑標簽的對象就是泄漏實例。圖5所示的是該聚合的處理過程。
            在進行聚合以及獲知了哪些是嫌疑泄漏類之后,需要采用與將標簽路徑 綁定到對象上的處理相反的處理來確定分配中哪些是泄漏哪些不是泄漏,因 為分配位置以及分配路徑具體內容對于診斷和修復泄漏來說是有很大幫助 的,因此遍歷整個路徑是必須的。為了解決這個問題,就要進行與將標簽路 徑綁定到對象上的處理相反的處理,從標簽中恢復出確切的泄漏路徑。該恢 復過程可見圖3所示。從類型i的對象的最高頻帶為K (K>=1 )處的標簽開 始,標簽的一個字段(field)是"callee (被調用者)",其引用在頻帶(K-l) 處的方法,被在頻帶K處的方法調用。這樣迭代的恢復出原始分配路徑的各 層方法,所發現的方法鏈條就是分配路徑。也就是說,路徑的發現過程從最 高波段開始進行。
            圖6所示的是診斷一個應用程序所造成的內存泄漏的流程圖。首先運行 一個應用程序,并在步驟S601處, 一種如后面將要描述的內存泄漏診斷裝置 隨著應用程序開始運行而開始監測在應用程序的運行時間(runtime)處對象 的分配以及內存的分配。在步驟S602處,內存泄漏診斷裝置中的對象分配跟 蹤器件跟蹤應用程序在虛擬機上運行過程中的對象分配,并針對每一種類型 的對象,獲取該當前對象的類型以及所分配的堆棧,為所有堆棧編碼唯一的 id以及為每個對象賦予一個與一條分配路徑相對應的唯一的id,并將這種對 應關系存儲起來。然后在步驟S603處,將其中包含了該對象的類型id、其堆 棧的id、以及指向頂部方法簽名的指針的標簽與相應的對象綁定在一起。該 頂部方法簽名并不在寄存器中。所有的方法簽名都被編碼并保存在代理中, 這種不同簽名的系列表示了各種分配路徑。因此,與對象綁定的標簽包含了 該對象的分配路徑以及對象的類型。在步驟S604處,將所有對象的標簽保存在一個列表中。具體而言,就是采用如后面所述的分配路徑管理器件來管理 該列表,從而管理列表中的標簽中所包含的數據,即對象的類型id、其堆棧
            的id、以及指向頂部方法簽名的指針。在步驟S605處,經過一個預訂的時間 間隔之后,例如經過了自動垃圾回收裝置執行一次自動垃圾回收的預定間隔 之后,用于由對象的類型id以及堆棧的id的id的寄存器被修改以便存儲具 有更高層級或波段的方法簽名,從而使得以后所分配的對象與在該間隔之前 所分配的對象具有不同的年齡代數。所述的時間間隔可以是預定時間間隔, 例如垃圾回收間隔。所述寄存器的改變也可以通過具體的事件來觸發。該具 體的時間可以是具有特定類型和堆棧的對象的總量達到了用戶根據其應用程 序的存儲器使用規模所規定的某種閾值,也可以是某種需要專門關注的事件。 在步驟S606處,用戶需要進行內存泄漏診斷時,通過后面將要描述的分配路 徑讀取器件,從一個存儲器中讀取關于標簽的列表以及位于堆中的存活的分 配對象的信息。隨后在步驟S607中,從所讀取的標簽列表中提取各個標簽, 并將所有存活的分配對象按照標簽聚合曽不同的組。然后在步驟S608處,對 每個具有相同標簽的組中的對象的總量進行排序,并將那些排序高的組中的 對象(即齡年代數較高的對象)所在的分配路徑確定為嫌疑的內存泄漏路徑。 應當理解上述方法為本發明的優選實施例,并非所有步驟對于解決本發明所
            除非從上下文中能清楚一個步驟依賴于先執行的另一步驟。此外,步驟之間 可以有顯著的時間間隔。
            以上對本發明的內存泄漏的診斷方法進行了詳細的描述。相對于現有技 術而言,這些方法具有以下優點用戶無需制作引用圖并對對象的引用圖進 行分析、通過將分配時間與分配路徑與分配對象的綁定可以直接獲得與泄漏 嫌疑對象對應的分配路徑、有助于修復泄漏,易于發現代碼跟蹤輸入項以及 找到被分配的對象是如何被使用的、尤其是可以同時發現泄漏的對象以及能 夠確定候選分配路徑,并且該候選分配路徑可以僅僅通過一次訪問堆就可以 實現。該方法有助于將用戶從瑣碎的中斷和分析中解脫出來,防止系統進行 多重堆訪問或堆轉儲,因此縮短了診斷的時間。此外,本發明的方法不需要 對現有的虛擬機進行任何修改、不需要對內部GC機制進行任何修改、不需 要對事件監聽的去分配(de-allocation )、甚至不需要考慮對象的移動。
            圖7是采用上述方法的裝置的一個實施例。如圖7所示,根據本發明的診斷內存泄漏的裝置700包括對象分配跟 蹤器件701,用于跟蹤應用程序70S在虛擬機712上運行過程中的對象分配, 從而獲耳又對象的分配路徑和分配時間;分配路徑記錄裝置702,用于記錄從 對象分配跟蹤器件701傳送來的每個對象的分配路徑和分配時間;存儲器 703,用于存儲從分配路徑記錄器件702傳送來的與對象相關的分配路徑和分 配時間;分配路徑管理器件704,用于管理存儲器中所存儲的數據,以及為 每個對象賦予一個與一條分配路徑相對應的唯一的id并將這種對應關系以存 儲在存儲器中;用于應用程序的堆709,用于存儲從分配路徑記錄器件702 傳送來的分配對象的信息;分配路徑讀取器件705,用于讀取所述堆中分配 對象的信息,并掃描存儲器中存儲的每個對象的id以及對應的分配路徑信息, 以便針對每條分配路徑整理由它分配的、并且還沒有被回收的對象并根據每 個對象的分配時間計算該路徑所分配同一類對象的年齡代數;分配路徑排序 器件706,用于根據每條路徑分配的、并且存活的對象的年齡代數對分配路 徑進行排序;以及診斷報告器件707,用于對從分配路徑排序器件傳送來的 分配路徑的排序數據進行分析,并將高排序的分配路徑確定為可能存在內存 泄漏的分配路徑報告給用戶進行分析。
            圖8是采用上述方法的裝置的另一個實施例。
            如圖8所示,根據本發明的診斷內存泄漏的裝置800包括對象分配跟 蹤器件801,用于跟蹤應用程序808在虛擬機812上運行過程中對象的分配, 從而獲取對象的分配路徑和分配時間;分配路徑記錄裝置802,用于在每個 所分配的對象上打上包含其分配路徑與分配時間的對應關系的標簽;用于應 用程序的堆809,用于存儲從分配路徑記錄器件802傳送來分配對象的信息; 分配路徑讀取器件805,針對每條分配路徑直接按照標簽從所述堆中讀取由 它分配的、并且還沒有被回收的對象并根據每個對象的分配時間計算該路徑 所分配同一類對象的年齡代數;分配路徑排序器件806,用于根據每條路徑 分配的、并且存活的對象的年齡代數對分配路徑進行排序;以及診斷報告器 件807,用于對從分配路徑排序器件806傳送來的分配路徑的排序數據進行 分析,并將高排序的分配路徑確定為可能存在內存泄漏的分配路徑報告給用 戶進行分析。
            對于上述診斷內存泄漏的裝置700和800,其還可以包括對象壽命管理 器件710以及810以及動態比特碼器件711以及811。對象壽命管理器件710以及810用于按照對象分配時間來直接計算對象的年齡,避免直接將分配時
            間放入所述堆中。動態比特碼器件711以及811可使用二進制代碼注入的方
            法獲取分配路徑,替換直接讀取運行時堆棧的內容以獲取路徑信息。
            本發明的描述是為了示例說明的目的而提供的,而不旨在是徹底無遺漏 的,或者局限于所公開的實施例。很多修改和變更對于本領域的普通技術人 員將是清楚的。選擇這些實施例是為了說明本發明的原理及其實際應用,并 且使得本領域的其他普通技術人員能夠理解本發明,以便實現可能適于其他 預期用途的具有各種修改的各種實施例。
            權利要求
            1.一種診斷內存泄露的方法,包括跟蹤應用程序在虛擬機上運行過程中的對象分配,從而獲取并記錄對象的分配路徑和分配時間;以預定的時間間隔計算每一類對象在其分配路徑的年齡代數;以及將其上具有高年齡代數對象的分配路徑確定為可能存在內存泄漏的分配路徑,并報告給用戶以進行分析
            2. 如權利要求1所述的診斷內存泄露的方法,其中,所述預定的時間間 隔是垃圾回收間隔或對應于特定類型和堆棧的對象的總量達到規定的閾值的 時間。
            3. 如權利要求1或2所述的診斷內存泄露的方法,其中,獲取并記錄對 象的分配路徑和分配時間的步驟包括為每個對象賦予一個與分配路徑相對 應的p舉一的id。
            4. 如權利要求3所述的診斷內存泄露的方法,其中,以預定的時間間隔 計算每一類對象在其分配路徑其年齡代數的步驟包括基于每個對象的與分 配該對象的分配路徑相對應id,確定其每個對象所屬的分配路徑,并針對每 條分配路徑整理由它分配的、并且還沒有被回收的對象并根據每個對象的分 配時間計算該路徑所分配同一類對象的年齡代數。
            5. 如權利要求3所述的診斷內存泄露的方法,其中,將其上具有高年齡 代數對象的分配路徑確定為可能存在內存泄漏的分配路徑的步驟包括根據 每條路徑分配的、并且存活的同類對象的年齡代數對路徑進行排序,以及對 分配路徑的排序數據進行分析,并將高排序的分配路徑確定為可能存在內存 泄漏的分配路徑報告給用戶進行分析。
            6. 如權利要求5所述的診斷內存泄露的方法,其中所述跟蹤應用程序在 虛擬機上運行過程中對象的分配采用一種數據結構來進行,該數據結構包含 了對象所屬類的簽名、對象計數、時間計數以及分配路徑。
            7. 如權利要求6所述的診斷內存泄露的方法,其中所述為每個對象賦予 一個與一條分配路徑相對應的唯一的id,包括將每個對象的與分配路徑相關 聯的波段id以及組id包含在一種標簽中并將標簽與相應的對象綁定。
            8. 如權利要求7所述的診斷內存泄露的方法,其中所述標簽中還可以包含關于對象的類型、路徑、方法以及被調用者的信息。
            9. 如權利要求4所述的診斷內存泄露的方法,其中所述以預定的時間間 隔計算每一類對象在其分配路徑其年齡代數從對象所屬的分配路徑的最高波段id開始。
            10. 如權利要求4所述的方法,其中還包括在進行所述整理之前進行至少一次垃圾收集。
            11. 一種診斷內存泄漏的裝置,包括對象分配跟蹤器件,跟蹤應用程序在虛擬機上運行過程中的對象分配, 從而獲取并記錄對象的分配路徑和分配時間;分配路徑記錄器件,用于記錄從對象分配跟蹤器件傳送來的每個對象的 分配3各徑和分配時間;用于應用程序的堆,用于存儲從分配路徑記錄器件傳送來的路徑分配的 對象信息;分配路徑讀取器件,用于讀取所述堆中路徑分配的對象信息,并掃描存 儲器中存儲的每個對象的id以及對應的分配路徑信息,以便針對每條分配路 徑整理由它分配的、并且還沒有被回收的對象并根據每個對象的分配時間計 算該路徑所分配同一類對象的年齡代數;分配路徑排序器件,用于根據每條路徑分配的、并且存活的對象的年齡 代數把路徑排序;以及進行分析,并將高排序的分配路徑確定為可能存在內存泄漏的分配路徑報告 給用戶以進行分析。
            12. 如權利要求11所述的診斷內存泄漏的裝置,其中對象分配跟蹤器件 采用 一種數據結構來進行對象分配的跟蹤,該數據結構包含了對象所述的類 的簽名、對象計數、時間計數以及分配路徑。
            13. 如權利要求11或12所述的診斷內存泄露的裝置,其還包括對象壽 命管理器件用于按照對象分配時間來直接計算對象的年齡,避免直接將分配 時間放入所述堆中。
            14. 如權利要求11所述的診斷內存泄露的裝置,其還包括動態調碼器, 其可使用二進制代碼注入的方法獲取分配路徑,替換直接讀取運行時堆棧的 內容以獲取路徑信息。
            15. —種用于診斷內存泄漏的裝置,包括對象分配跟蹤器件,用于跟蹤應用程序在虛擬機上運行過程中的對象分配,從而獲取對象的分配路徑和分配時間;分配路徑記錄器件,用于在每個所分配的對象上打上包含其分配路徑與 分配對象的對應關系的標簽;用于應用程序的堆,用于存儲從分配路徑記錄器件傳送來的路徑分配的 對象信息;分配路徑讀取器件,對每條分配路徑直接按照標簽從所述堆中讀取由它 分配的、并且還沒有被回收的對象,并根據每個對象的分配時間計算該路徑 所分配同一類對象的年齡代數;分配路徑排序器件,用于根據每條路徑分配的、并且存活的對象的年齡 代數把路徑排序;以及診斷報告器件,用于對從分配路徑排序器傳送來的分配路徑的排序數據 進行分析,并將高排序的分配路徑確定為可能存在內存泄漏的分配路徑報告 給用戶進行分析。
            16. 如權利要求15所述的診斷內存泄漏的裝置,其中對象分配跟蹤器件 采用一種數據結構來進行對象分配的跟蹤,該數據結構包含了對象所述的類 的簽名、對象計數、時間計數以及分配路徑。
            17. 如權利要求15所述的診斷內存泄露的裝置,其中所述分配路徑記錄 器件通過將標簽與相應的對象綁定來記錄與分配對象相關的信息。
            18. 如權利要求17所述的診斷內存泄露的裝置,其中所述標簽中還可以 包含關于對象的類型、路徑、方法以及被調用者的信息。
            19. 如權利要求15-19任意一項所述的診斷內存泄露的裝置,其還包括 對象壽命管理器件用于按照對象分配時間來直接計算對象的年齡,避免直接 將分配時間放入所述對象標簽中。
            20. 如權利要求19所述的診斷內存泄露的裝置,其還包括動態變碼器, 其可使用二進制代碼注入的方法獲取分配路徑,替換直接讀取運行時堆棧的 內容以獲取路徑信息。
            全文摘要
            一種診斷內存泄露的方法和裝置。所述方法包括跟蹤應用程序在虛擬機上運行過程中的對象分配,從而獲取對象的分配路徑和分配時間;記錄每個對象的分配路徑和分配時間;為每個對象賦予一個與一條分配路徑相對應的唯一的ID;基于每個對象的與分配該對象的分配路徑相對應ID,確定其每個對象所屬的路徑;針對每條分配路徑整理由它分配的、并且還沒有被回收的對象并根據這些對象的分配時間計算該路徑所分配同一類對象的“年齡代數”;根據每條路徑分配的、并且存活的同類對象的年齡代數對路徑進行排序;以及對分配路徑的排序數據進行分析,排序越高的分配路徑,越有可能是引入內存泄漏。據此,可能存在內存泄漏的分配路徑被挑選、報告給用戶進行分析。本發明還涉及一種執行上述方法的裝置。
            文檔編號G06F9/50GK101615143SQ200810131740
            公開日2009年12月30日 申請日期2008年6月27日 優先權日2008年6月27日
            發明者劉天成, 影 李, 李欣慧, 滕啟明, 瀅 陳 申請人:國際商業機器公司
            網友詢問留言 已有0條留言
            • 還沒有人留言評論。精彩留言會獲得點贊!
            1
            婷婷六月激情在线综合激情,亚洲国产大片,久久中文字幕综合婷婷,精品久久久久久中文字幕,亚洲一区二区三区高清不卡,99国产精品热久久久久久夜夜嗨 ,欧美日韩亚洲综合在线一区二区,99国产精品电影,伊人精品线视天天综合,精品伊人久久久大香线蕉欧美
            亚洲精品1区 国产成人一级 91精品国产欧美一区二区 亚洲精品乱码久久久久久下载 国产精品久久久久久久伊一 九色国产 国产精品九九视频 伊人久久成人爱综合网 欧美日韩亚洲区久久综合 欧美日本一道免费一区三区 夜夜爽一区二区三区精品 欧美日韩高清一区二区三区 国产成人av在线 国产精品对白交换绿帽视频 国产视频亚洲 国产在线欧美精品 国产精品综合网 国产日韩精品欧美一区色 国产日韩精品欧美一区喷 欧美日韩在线观看区一二 国产区精品 欧美视频日韩视频 中文字幕天天躁日日躁狠狠躁97 视频一二三区 欧美高清在线精品一区二区不卡 国产精品揄拍一区二区久久 99久久综合狠狠综合久久aⅴ 亚洲乱码视频在线观看 日韩在线第二页 亚洲精品无码专区在线播放 成人亚洲网站www在线观看 欧美三级一区二区 99久久精品免费看国产高清 91麻豆国产在线观看 最新日韩欧美不卡一二三区 成人在线观看不卡 日韩国产在线 在线亚洲精品 亚洲午夜久久久久中文字幕 国产精品成人久久久久久久 精品国产一区二区在线观看 欧美精品国产一区二区三区 中文在线播放 亚洲第一页在线视频 国产午夜精品福利久久 九色国产 精品国产九九 国产永久视频 久久精品人人做人人综合试看 国产一区二区三区免费观看 亚洲精品国产电影 9999热视频 国产精品资源在线 麻豆久久婷婷国产综合五月 国产精品免费一级在线观看 亚洲国产一区二区三区青草影视 中文在线播放 国产成人综合在线 国产在线观看色 国产亚洲三级 国产片一区二区三区 久久99精品久久久久久牛牛影视 亚洲欧美日韩国产 四虎永久免费网站 国产一毛片 国产精品视频在 九九热在线精品 99精品福利视频 色婷婷色99国产综合精品 97成人精品视频在线播放 精品久久久久久中文字幕 亚洲欧美一区二区三区孕妇 亚洲欧美成人网 日韩高清在线二区 国产尤物在线观看 在线不卡一区二区 91网站在线看 韩国精品福利一区二区 欧美日韩国产成人精品 99热精品久久 国产精品免费视频一区 高清视频一区 精品九九久久 欧美日韩在线观看免费 91欧美激情一区二区三区成人 99福利视频 亚洲国产精品91 久热国产在线 精品久久久久久中文字幕女 国产精品久久久久久久久99热 成人自拍视频网 国产精品视频久久久久久 久久影院国产 国产玖玖在线观看 99精品在线免费 亚洲欧美一区二区三区导航 久久久久久久综合 国产欧美日韩精品高清二区综合区 国产精品视频自拍 亚洲一级片免费 久久久久久九九 国产欧美自拍视频 视频一区二区在线观看 欧美日韩一区二区三区久久 中文在线亚洲 伊人热人久久中文字幕 日韩欧美亚洲国产一区二区三区 欧美亚洲国产成人高清在线 欧美日韩国产码高清综合人成 国产性大片免费播放网站 亚洲午夜综合网 91精品久久一区二区三区 国产无套在线播放 国产精品视频网站 国产成人亚洲精品老王 91在线网站 国产视频97 欧美黑人欧美精品刺激 国产一区二区三区免费在线视频 久久久国产精品免费看 99re6久精品国产首页 久久精品91 国产成人一级 国产成人精品曰本亚洲 日本福利在线观看 伊人成综合网 久久综合一本 国产综合久久久久久 久久精品成人免费看 久久福利 91精品国产91久久久久久麻豆 亚洲精品成人在线 亚洲伊人久久精品 欧美日本二区 国产永久视频 国产一区二 一区二区福利 国产一毛片 亚洲精品1区 毛片一区二区三区 伊人久久大香线蕉综合影 国产欧美在线观看一区 亚洲国产欧洲综合997久久 国产一区二区免费视频 国产91精品对白露脸全集观看 久久亚洲国产伦理 欧美成人伊人久久综合网 亚洲性久久久影院 久久99国产精一区二区三区! 91精品国产欧美一区二区 欧美日韩亚洲区久久综合 日韩精品一二三区 久久久夜色精品国产噜噜 国产在线精品福利91香蕉 久久久久久久亚洲精品 97se色综合一区二区二区 91国语精品自产拍在线观看性色 91久久国产综合精品女同我 日韩中文字幕a 国产成人亚洲日本精品 久久国产精品-国产精品 久久国产经典视频 久久国产精品伦理 亚洲第一页在线视频 国产精品久久久久三级 日韩毛片网 久久免费高清视频 麻豆国产在线观看一区二区 91麻豆国产福利在线观看 国产成人精品男人的天堂538 一区二区三区中文字幕 免费在线视频一区 欧美日韩国产成人精品 国产综合网站 国产资源免费观看 亚洲精品亚洲人成在线播放 精品久久久久久中文字幕专区 亚洲人成人毛片无遮挡 国产一起色一起爱 国产香蕉精品视频在 九九热免费观看 日韩亚洲欧美一区 九九热精品在线观看 精品久久久久久中文字幕专区 亚洲欧美自拍偷拍 国产精品每日更新 久久久久国产一级毛片高清板 久久天天躁狠狠躁夜夜中文字幕 久久精品片 日韩在线毛片 国产成人精品本亚洲 国产成人精品一区二区三区 九九热在线观看 国产r级在线观看 国产欧美日韩精品高清二区综合区 韩国电影一区二区 国产精品毛片va一区二区三区 五月婷婷伊人网 久久一区二区三区免费 一本色道久久综合狠狠躁篇 亚洲综合色站 国产尤物在线观看 亚洲一区亚洲二区 免费在线视频一区 欧洲精品视频在线观看 日韩中文字幕a 中文字幕日本在线mv视频精品 91精品在线免费视频 精品国产免费人成在线观看 精品a级片 中文字幕日本在线mv视频精品 日韩在线精品视频 婷婷丁香色 91精品国产高清久久久久 国产成人精品日本亚洲直接 五月综合视频 欧美日韩在线亚洲国产人 精液呈暗黄色 亚洲乱码一区 久久精品中文字幕不卡一二区 亚洲天堂精品在线 激情婷婷综合 国产免费久久精品久久久 国产精品亚洲二区在线 久久免费播放视频 五月婷婷丁香综合 在线亚洲欧美日韩 久久免费精品高清麻豆 精品久久久久久中文字幕 亚洲一区网站 国产精品福利社 日韩中文字幕免费 亚洲综合丝袜 91精品在线播放 国产精品18 亚洲日日夜夜 伊人久久大香线蕉综合影 亚洲精品中文字幕乱码影院 亚洲一区二区黄色 亚洲第一页在线视频 一区二区在线观看视频 国产成人福利精品视频 亚洲高清二区 国内成人免费视频 精品亚洲性xxx久久久 国产精品合集一区二区三区 97av免费视频 国产一起色一起爱 国产区久久 国产资源免费观看 99精品视频免费 国产成人一级 国产精品九九免费视频 欧美91精品久久久久网免费 99热国产免费 久久精品色 98精品国产综合久久 久久精品播放 中文字幕视频免费 国产欧美日韩一区二区三区在线 精品久久蜜桃 国产小视频精品 一本色道久久综合狠狠躁篇 91在线免费观看 亚洲精品区 伊人成综合网 伊人热人久久中文字幕 伊人黄色片 99国产精品热久久久久久夜夜嗨 久久免费精品视频 亚洲一区二区三区高清不卡 久久久久国产一级毛片高清板 国产片一区二区三区 久久狠狠干 99久久婷婷国产综合精品电影 国产99区 国产精品成人久久久久 久久狠狠干 青青国产在线观看 亚洲高清国产拍精品影院 国产精品一区二区av 九九热在线免费视频 伊人久久国产 国产精品久久久久久久久久一区 在线观看免费视频一区 国产精品自在在线午夜区app 国产精品综合色区在线观看 国产毛片久久久久久国产毛片 97国产免费全部免费观看 国产精品每日更新 国产尤物视频在线 九九视频这里只有精品99 一本一道久久a久久精品综合 久久综合给会久久狠狠狠 国产成人精品男人的天堂538 欧美一区二区高清 毛片一区二区三区 国产欧美日韩在线观看一区二区三区 在线国产二区 欧美不卡网 91在线精品中文字幕 在线国产福利 国内精品91久久久久 91亚洲福利 日韩欧美国产中文字幕 91久久精品国产性色也91久久 亚洲性久久久影院 欧美精品1区 国产热re99久久6国产精品 九九热免费观看 国产精品欧美日韩 久久久久国产一级毛片高清板 久久国产经典视频 日韩欧美亚洲国产一区二区三区 欧美亚洲综合另类在线观看 国产精品自在在线午夜区app 97中文字幕在线观看 视频一二三区 精品国产一区在线观看 国产欧美日韩在线一区二区不卡 欧美一区二三区 伊人成人在线观看 国内精品91久久久久 97在线亚洲 国产在线不卡一区 久久久全免费全集一级全黄片 国产精品v欧美精品∨日韩 亚洲毛片网站 在线不卡一区二区 99re热在线视频 久久激情网 国产毛片一区二区三区精品 久久亚洲综合色 中文字幕视频免费 国产视频亚洲 婷婷伊人久久 国产一区二区免费播放 久久99国产精品成人欧美 99国产在线视频 国产成人免费视频精品一区二区 国产不卡一区二区三区免费视 国产码欧美日韩高清综合一区 久久精品国产主播一区二区 国产一区电影 久久精品国产夜色 国产精品国产三级国产 日韩一区二区三区在线 久久97久久97精品免视看 久久国产免费一区二区三区 伊人久久大香线蕉综合电影网 99re6久精品国产首页 久久激情网 亚洲成人高清在线 国产精品网址 国产成人精品男人的天堂538 香蕉国产综合久久猫咪 国产专区中文字幕 91麻豆精品国产高清在线 久久国产经典视频 国产精品成人va在线观看 国产精品爱啪在线线免费观看 日本精品久久久久久久久免费 亚洲综合一区二区三区 久久五月网 精品国产网红福利在线观看 久久综合亚洲伊人色 亚洲国产精品久久久久久网站 在线日韩国产 99国产精品热久久久久久夜夜嗨 国产综合精品在线 国产区福利 精品亚洲综合久久中文字幕 国产制服丝袜在线 毛片在线播放网站 在线观看免费视频一区 国产精品久久久精品三级 亚洲国产电影在线观看 最新日韩欧美不卡一二三区 狠狠综合久久综合鬼色 日本精品1在线区 国产日韩一区二区三区在线播放 欧美日韩精品在线播放 亚洲欧美日韩国产一区二区三区精品 久久综合久久网 婷婷六月激情在线综合激情 亚洲乱码一区 国产专区91 97av视频在线观看 精品久久久久久中文字幕 久久五月视频 国产成人福利精品视频 国产精品网址 中文字幕视频在线 精品一区二区三区免费视频 伊人手机在线视频 亚洲精品中文字幕乱码 国产在线视频www色 色噜噜国产精品视频一区二区 精品亚洲成a人在线观看 国产香蕉尹人综合在线 成人免费一区二区三区在线观看 国产不卡一区二区三区免费视 欧美精品久久天天躁 国产专区中文字幕 久久精品国产免费中文 久久精品国产免费一区 久久无码精品一区二区三区 国产欧美另类久久久精品免费 欧美精品久久天天躁 亚洲精品在线视频 国产视频91在线 91精品福利一区二区三区野战 日韩中文字幕免费 国产精品99一区二区三区 欧美成人高清性色生活 国产精品系列在线观看 亚洲国产福利精品一区二区 国产成人在线小视频 国产精品久久久久免费 99re热在线视频 久久久久久久综合 一区二区国产在线播放 成人国产在线视频 亚洲精品乱码久久久久 欧美日韩一区二区综合 精品久久久久免费极品大片 中文字幕视频二区 激情粉嫩精品国产尤物 国产成人精品一区二区视频 久久精品中文字幕首页 亚洲高清在线 国产精品亚洲一区二区三区 伊人久久艹 中文在线亚洲 国产精品一区二区在线播放 国产精品九九免费视频 亚洲二区在线播放 亚洲狠狠婷婷综合久久久久网站 亚洲欧美日韩网站 日韩成人精品 亚洲国产一区二区三区青草影视 91精品国产福利在线观看 国产精品久久久久久久久99热 国产一区二区精品尤物 久碰香蕉精品视频在线观看 亚洲日日夜夜 在线不卡一区二区 国产午夜亚洲精品 九九热在线视频观看这里只有精品 伊人手机在线视频 91免费国产精品 日韩欧美中字 91精品国产91久久久久 国产全黄三级播放 视频一区二区三区免费观看 国产开裆丝袜高跟在线观看 国产成人欧美 激情综合丝袜美女一区二区 国产成人亚洲综合无 欧美精品一区二区三区免费观看 欧美亚洲国产日韩 日韩亚州 国产欧美日韩精品高清二区综合区 亚洲午夜国产片在线观看 精品久久久久久中文字幕 欧美精品1区 久久伊人久久亚洲综合 亚洲欧美日韩精品 国产成人精品久久亚洲高清不卡 久久福利影视 国产精品99精品久久免费 久久久久免费精品视频 国产日产亚洲精品 亚洲国产午夜电影在线入口 精品无码一区在线观看 午夜国产精品视频 亚洲一级片免费 伊人久久大香线蕉综合影 国产精品久久影院 久碰香蕉精品视频在线观看 www.欧美精品 在线小视频国产 亚洲国产天堂久久综合图区 欧美一区二区三区不卡 日韩美女福利视频 九九精品免视频国产成人 不卡国产00高中生在线视频 亚洲第一页在线视频 欧美日韩在线播放成人 99re视频这里只有精品 国产精品91在线 精品乱码一区二区三区在线 国产区久久 91麻豆精品国产自产在线观看一区 日韩精品成人在线 九九热在线观看 国产精品久久不卡日韩美女 欧美一区二区三区综合色视频 欧美精品免费一区欧美久久优播 国产精品网址 国产专区中文字幕 国产精品欧美亚洲韩国日本久久 日韩美香港a一级毛片 久久精品123 欧美一区二区三区免费看 99r在线视频 亚洲精品国产字幕久久vr 国产综合激情在线亚洲第一页 91免费国产精品 日韩免费小视频 亚洲国产精品综合一区在线 国产亚洲第一伦理第一区 在线亚洲精品 国产精品一区二区制服丝袜 国产在线成人精品 九九精品免视频国产成人 亚洲国产网 欧美日韩亚洲一区二区三区在线观看 在线亚洲精品 欧美一区二区三区高清视频 国产成人精品男人的天堂538 欧美日韩在线观看区一二 亚洲欧美一区二区久久 久久精品中文字幕首页 日本高清www午夜视频 久久精品国产免费 久久999精品 亚洲国产精品欧美综合 88国产精品视频一区二区三区 91久久偷偷做嫩草影院免费看 国产精品夜色视频一区二区 欧美日韩导航 国产成人啪精品午夜在线播放 一区二区视频在线免费观看 99久久精品国产自免费 精液呈暗黄色 久久99国产精品 日本精品久久久久久久久免费 精品国产97在线观看 99re视频这里只有精品 国产视频91在线 999av视频 亚洲美女视频一区二区三区 久久97久久97精品免视看 亚洲国产成人久久三区 99久久亚洲国产高清观看 日韩毛片在线视频 综合激情在线 91福利一区二区在线观看 一区二区视频在线免费观看 激情粉嫩精品国产尤物 国产成人精品曰本亚洲78 国产成人精品本亚洲 国产精品成人免费视频 国产成人啪精品视频免费软件 久久精品国产亚洲妲己影院 国产精品成人久久久久久久 久久大香线蕉综合爱 欧美一区二区三区高清视频 99热国产免费 在线观看欧美国产 91精品视频在线播放 国产精品福利社 欧美精品一区二区三区免费观看 国产一区二区免费视频 国产午夜精品一区二区 精品视频在线观看97 91精品福利久久久 国产一区福利 国产综合激情在线亚洲第一页 国产精品久久久久久久久久久不卡 九色国产 在线日韩国产 黄网在线观看 亚洲一区小说区中文字幕 中文字幕丝袜 日本二区在线观看 日本国产一区在线观看 欧美日韩一区二区三区久久 欧美精品亚洲精品日韩专 国产日产亚洲精品 久久综合九色综合欧美播 亚洲国产欧美无圣光一区 欧美视频区 亚洲乱码视频在线观看 久久无码精品一区二区三区 九九热精品免费视频 久久99精品久久久久久牛牛影视 国产精品成久久久久三级 国产一区福利 午夜国产精品视频 日本二区在线观看 99久久网站 国产亚洲天堂 精品国产一区二区三区不卡 亚洲国产日韩在线一区 国产成人综合在线观看网站 久久免费高清视频 欧美在线导航 午夜精品久久久久久99热7777 欧美久久综合网 国产小视频精品 国产尤物在线观看 亚洲国产精品综合一区在线 欧美一区二区三区不卡视频 欧美黑人欧美精品刺激 日本福利在线观看 久久国产偷 国产手机精品一区二区 国产热re99久久6国产精品 国产高清啪啪 欧美亚洲国产成人高清在线 国产在线第三页 亚洲综合一区二区三区 99r在线视频 99精品久久久久久久婷婷 国产精品乱码免费一区二区 国产在线精品福利91香蕉 国产尤物视频在线 五月婷婷亚洲 中文字幕久久综合伊人 亚洲精品一级毛片 99国产精品电影 在线视频第一页 久久99国产精品成人欧美 国产白白视频在线观看2 成人精品一区二区www 亚洲成人网在线观看 麻豆91在线视频 色综合合久久天天综合绕视看 久久精品国产免费高清 国产不卡一区二区三区免费视 欧美国产中文 99精品欧美 九九在线精品 国产中文字幕在线免费观看 国产一区中文字幕在线观看 国产成人一级 国产精品一区二区制服丝袜 国产一起色一起爱 亚洲精品成人在线 亚洲欧美精品在线 国产欧美自拍视频 99精品久久久久久久婷婷 久99视频 国产热re99久久6国产精品 视频一区亚洲 国产精品视频分类 国产精品成在线观看 99re6久精品国产首页 亚洲在成人网在线看 亚洲国产日韩在线一区 久久国产三级 日韩国产欧美 欧美在线一区二区三区 国产精品美女一级在线观看 成人午夜免费福利视频 亚洲天堂精品在线 91精品国产手机 欧美日韩视频在线播放 狠狠综合久久综合鬼色 九一色视频 青青视频国产 亚洲欧美自拍一区 中文字幕天天躁日日躁狠狠躁97 日韩免费大片 996热视频 伊人成综合网 亚洲天堂欧美 日韩精品亚洲人成在线观看 久久综合给会久久狠狠狠 日韩精品亚洲人成在线观看 日韩国产欧美 亚洲成aⅴ人片在线影院八 亚洲精品1区 99久久精品免费 国产精品高清在线观看 国产精品久久久免费视频 在线亚洲欧美日韩 91在线看视频 国产精品96久久久久久久 欧美日韩国产成人精品 91在线亚洲 热久久亚洲 国产精品美女免费视频观看 日韩在线毛片 亚洲永久免费视频 九九免费在线视频 亚洲一区网站 日本高清二区视频久二区 精品国产美女福利在线 伊人久久艹 国产精品久久久久三级 欧美成人精品第一区二区三区 99久久精品国产自免费 在线观看日韩一区 国产中文字幕一区 成人免费午夜视频 欧美日韩另类在线 久久99国产精品成人欧美 色婷婷中文网 久久天天躁夜夜躁狠狠躁2020 欧美成人伊人久久综合网 国产精品福利资源在线 国产伦精品一区二区三区高清 国产精品亚洲综合色区韩国 亚洲一区欧美日韩 色综合视频 国语自产精品视频在线区 国产高清a 成人国内精品久久久久影 国产在线精品香蕉综合网一区 国产不卡在线看 国产成人精品精品欧美 国产欧美日韩综合精品一区二区三区 韩国电影一区二区 国产在线视频www色 91中文字幕在线一区 国产人成午夜免视频网站 亚洲综合一区二区三区 色综合视频一区二区观看 久久五月网 九九热精品在线观看 国产一区二区三区国产精品 99久热re在线精品996热视频 亚洲国产网 在线视频亚洲一区 日韩字幕一中文在线综合 国产高清一级毛片在线不卡 精品国产色在线 国产高清视频一区二区 精品日本久久久久久久久久 亚洲国产午夜精品乱码 成人免费国产gav视频在线 日韩欧美一区二区在线观看 欧美曰批人成在线观看 韩国电影一区二区 99re这里只有精品6 日韩精品一区二区三区视频 99re6久精品国产首页 亚洲欧美一区二区三区导航 欧美色图一区二区三区 午夜精品视频在线观看 欧美激情在线观看一区二区三区 亚洲热在线 成人国产精品一区二区网站 亚洲一级毛片在线播放 亚洲一区小说区中文字幕 亚洲午夜久久久久影院 国产自产v一区二区三区c 国产精品视频免费 久久调教视频 国产成人91激情在线播放 国产精品欧美亚洲韩国日本久久 久久亚洲日本不卡一区二区 91中文字幕网 成人国产在线视频 国产视频91在线 欧美成人精品第一区二区三区 国产精品福利在线 久久综合九色综合精品 欧美一区二区三区精品 久久国产综合尤物免费观看 久久99青青久久99久久 日韩精品免费 久久国产精品999 91亚洲视频在线观看 国产精品igao视频 色综合区 在线亚洲欧国产精品专区 国产一区二区三区在线观看视频 亚洲精品成人在线 一区二区国产在线播放 中文在线亚洲 亚洲精品第一国产综合野 国产一区二区精品久久 一区二区三区四区精品视频 99热精品久久 中文字幕视频二区 国产成人精品男人的天堂538 99精品影视 美女福利视频一区二区 久久午夜夜伦伦鲁鲁片 综合久久久久久久综合网 国产精品国产欧美综合一区 国产99视频在线观看 国产亚洲女在线精品 婷婷影院在线综合免费视频 国产亚洲3p一区二区三区 91成人爽a毛片一区二区 亚洲一区二区高清 国产欧美亚洲精品第二区首页 欧美日韩导航 亚洲高清二区 欧美激情观看一区二区久久 日韩毛片在线播放 亚洲欧美日韩高清中文在线 亚洲日本在线播放 国产精品一区二区制服丝袜 精品国产一区二区三区不卡 国产不卡在线看 国产欧美网站 四虎永久在线观看视频精品 国产黄色片在线观看 夜夜综合 一本色道久久综合狠狠躁篇 欧美亚洲综合另类在线观看 国产91在线看 伊人久久国产 欧美一区二区在线观看免费网站 国产精品久久久久三级 久久福利 日韩中文字幕a 亚洲午夜久久久久影院 91在线高清视频 国产亚洲一区二区三区啪 久久人精品 国产精品亚洲午夜一区二区三区 综合久久久久久 久久伊人一区二区三区四区 国产综合久久久久久 日韩一区精品视频在线看 国产精品日韩欧美制服 日本精品1在线区 99re视频 无码av免费一区二区三区试看 国产视频1区 日韩欧美中文字幕一区 日本高清中文字幕一区二区三区a 亚洲国产欧美无圣光一区 国产在线视频一区二区三区 欧美国产第一页 在线亚洲欧美日韩 日韩中文字幕第一页 在线不卡一区二区 伊人久久青青 国产精品一区二区在线播放 www.五月婷婷 麻豆久久婷婷国产综合五月 亚洲精品区 久久国产欧美另类久久久 99在线视频免费 伊人久久中文字幕久久cm 久久精品成人免费看 久久这里只有精品首页 88国产精品视频一区二区三区 中文字幕日本在线mv视频精品 国产在线精品成人一区二区三区 伊人精品线视天天综合 亚洲一区二区黄色 国产尤物视频在线 亚洲精品99久久久久中文字幕 国产一区二区三区免费观看 伊人久久大香线蕉综合电影网 国产成人精品区在线观看 日本精品一区二区三区视频 日韩高清在线二区 久久免费播放视频 一区二区成人国产精品 国产精品免费精品自在线观看 亚洲精品视频二区 麻豆国产精品有码在线观看 精品日本一区二区 亚洲欧洲久久 久久中文字幕综合婷婷 中文字幕视频在线 国产成人精品综合在线观看 91精品国产91久久久久福利 精液呈暗黄色 香蕉国产综合久久猫咪 国产专区精品 亚洲精品无码不卡 国产永久视频 亚洲成a人片在线播放观看国产 一区二区国产在线播放 亚洲一区二区黄色 欧美日韩在线观看视频 亚洲精品另类 久久国产综合尤物免费观看 国产一区二区三区国产精品 高清视频一区 国产精品igao视频 国产精品资源在线 久久综合精品国产一区二区三区 www.五月婷婷 精品色综合 99热国产免费 麻豆福利影院 亚洲伊人久久大香线蕉苏妲己 久久电影院久久国产 久久精品伊人 在线日韩理论午夜中文电影 亚洲国产欧洲综合997久久 伊人国产精品 久草国产精品 欧美一区精品二区三区 亚洲成人高清在线 91免费国产精品 日韩精品福利在线 国产一线在线观看 国产不卡在线看 久久99青青久久99久久 亚洲精品亚洲人成在线播放 99久久免费看国产精品 国产日本在线观看 青草国产在线视频 麻豆久久婷婷国产综合五月 国产中文字幕一区 91久久精品国产性色也91久久 国产一区a 国产欧美日韩成人 国产亚洲女在线精品 一区二区美女 中文字幕在线2021一区 在线小视频国产 久久这里只有精品首页 国产在线第三页 欧美日韩中文字幕 在线亚洲+欧美+日本专区 精品国产一区二区三区不卡 久久这里精品 欧美在线va在线播放 精液呈暗黄色 91精品国产手机 91在线免费播放 欧美视频亚洲色图 欧美国产日韩精品 日韩高清不卡在线 精品视频免费观看 欧美日韩一区二区三区四区 国产欧美亚洲精品第二区首页 亚洲韩精品欧美一区二区三区 国产精品视频免费 在线精品小视频 久久午夜夜伦伦鲁鲁片 国产无套在线播放 久热这里只精品99re8久 欧美久久久久 久久香蕉国产线看观看精品蕉 国产成人精品男人的天堂538 亚洲人成网站色7799在线观看 日韩在线第二页 一本色道久久综合狠狠躁篇 国产一区二区三区不卡在线观看 亚洲乱码在线 在线观看欧美国产 久久福利青草精品资源站免费 国产玖玖在线观看 在线亚洲精品 亚洲成aⅴ人在线观看 精品91在线 欧美一区二三区 日韩中文字幕视频在线 日本成人一区二区 日韩免费专区 国内精品在线观看视频 久久国产综合尤物免费观看 国产精品系列在线观看 一本一道久久a久久精品综合 亚洲免费播放 久久精品国产免费 久久人精品 亚洲毛片网站 亚洲成a人一区二区三区 韩国福利一区二区三区高清视频 亚洲精品天堂在线 一区二区三区中文字幕 亚洲国产色婷婷精品综合在线观看 亚洲国产成人久久笫一页 999国产视频 国产精品香港三级在线电影 欧美日韩一区二区三区四区 日韩国产欧美 国产精品99一区二区三区 午夜国产精品理论片久久影院 亚洲精品中文字幕麻豆 亚洲国产高清视频 久久免费手机视频 日韩a在线观看 五月婷婷亚洲 亚洲精品中文字幕麻豆 中文字幕丝袜 www国产精品 亚洲天堂精品在线 亚洲乱码一区 国产日韩欧美三级 久久999精品 伊人热人久久中文字幕 久热国产在线视频 国产欧美日韩在线观看一区二区三区 国产一二三区在线 日韩国产欧美 91精品国产91久久久久 亚洲一区小说区中文字幕 精品一区二区免费视频 国产精品视频免费 国产精品亚洲综合色区韩国 亚洲国产精品成人午夜在线观看 欧美国产日韩精品 中文字幕精品一区二区精品