本申請要求于2015年12月16日提交的名稱為“Methods and Systems for Memory Suspect Detection”的印度專利申請第4721/MUM/2015號的優(yōu)先權(quán),其全部內(nèi)容通過引證結(jié)合于此。
技術(shù)領(lǐng)域
本文中的實施方式總體涉及運行時的應用環(huán)境中的存儲器嫌疑的檢測。
背景技術(shù):
在應用環(huán)境中,應用響應時間和存儲器(memory,內(nèi)存)利用率是能夠影響應用效率的重要因素。從利用率角度來看,應用響應時間和存儲器利用率有時被視為兩種不同的資源,然而,應用響應時間與存儲器利用率密切相關(guān)。如果涉及應用的應用數(shù)據(jù)被緩存在存儲器中,則應用的響應時間可得到改善。在大型應用環(huán)境中,數(shù)據(jù)在存儲器中的緩存呈現(xiàn)出一些挑戰(zhàn)。例如,許多企業(yè)應用面臨嚴重的性能問題,諸如響應時間慢以及存儲器不足的錯誤。在應用和/或服務器、第三方部件等的遷移和/或更新的過程中經(jīng)常觀察到這種問題。
在用于識別與存儲器緩存有關(guān)的問題的現(xiàn)有方法中,剖析員定期獲得堆轉(zhuǎn)儲,然后借助于一些存儲器分析工具來分析該堆轉(zhuǎn)儲。在另一方法中,應用使用剖析器來描述存儲器(對象)分配或每n個分配的輪廓以了解存 儲器的大致利用率。盡管該方法識別大量對象,但是它僅在少數(shù)情況下識別根本原因及對應使用情況。在現(xiàn)有方法中,主要目標是獲得或分離使用龐大存儲器的對象。但是在大部分情況下,存儲器的管理不僅與創(chuàng)建哪一個對象或者在什么位置創(chuàng)建該對象相關(guān),而且也與應用的使用情況相關(guān)。存在有相同代碼用于不止一種使用情況/情形的可能性。因此,不論基礎(chǔ)技術(shù)如何,存儲器的不當使用都不僅可導致存儲器錯誤而且也大大影響響應時間。因此,監(jiān)控和跟蹤存儲器的適當利用都有助于應用的更好性能。
技術(shù)實現(xiàn)要素:
為了提供對實施方式的基本理解,在下面呈現(xiàn)本公開的一些實施方式的簡要概括。本概括不是實施方式的擴展概述。它并非旨在確認實施方式的主要/關(guān)鍵元素或者描繪實施方式的范圍。它僅有的目的是以簡化形成呈現(xiàn)一些實施方式,以作為以下呈現(xiàn)的更詳細描述的開頭。
鑒于上述內(nèi)容,本文的實施方式提供一種用于檢測存儲器嫌疑的方法和系統(tǒng)。在一個方面中,提供一種用于檢測存儲器嫌疑的計算機實現(xiàn)的方法。該方法包括系統(tǒng)地執(zhí)行與應用相關(guān)的多個事務(transaction)。執(zhí)行多個事務導致生成度量(metrics)。關(guān)于執(zhí)行事務而生成的所述度量包括應用存儲器信息以及與事務相關(guān)的存儲器分配信息。周期性獲取在系統(tǒng)地執(zhí)行多個事務時生成的度量?;谥芷谛垣@取的度量,從多個事務中檢測由于有嫌疑的存儲器分配而受影響的一組事務。度量的存儲器分配信息有助于識別受影響的該一組事務。
在另一方面中,提供一種用于檢測存儲器嫌疑的計算機實現(xiàn)的系統(tǒng)。該系統(tǒng)包括至少一個存儲器;以及至少一個處理器,該至少一個存儲器耦接至至少一個處理器,其中,至少一個處理器能夠執(zhí)行在至少一個存儲器中存儲的編程指令以系統(tǒng)地執(zhí)行與應用相關(guān)的多個事務。執(zhí)行多個事務導致生成度量。關(guān)于執(zhí)行事務所生成的所述度量包括應用存儲器信息以及與事務相關(guān)的存儲器分配信息。周期性獲取在系統(tǒng)地執(zhí)行多個事務時生成的 度量?;谥芷谛垣@取的度量,從多個事務中檢測由于有嫌疑的存儲器分配而受影響的一組事務。度量的存儲器分配信息有助于識別受影響的該一組事務。
在又一方面中,提供一種具有用于執(zhí)行用于檢測存儲器嫌疑的方法的計算機程序裝載在其上的非暫時性計算機可讀介質(zhì)。該方法包括系統(tǒng)地執(zhí)行與應用相關(guān)的多個事務。執(zhí)行多個事務導致生成度量。關(guān)于執(zhí)行事務所生成的所述度量包括應用存儲器信息以及與事務相關(guān)的存儲器分配信息。周期性獲取在系統(tǒng)地執(zhí)行多個事務時生成的度量?;谥芷谛垣@取的度量,從多個事務之中檢測由于有嫌疑的存儲器分配而受影響的一組事務。度量的存儲器分配信息有助于識別受影響的該一組事務。
在又一實施方式中,提供一種用于存儲器嫌疑檢測的計算機實現(xiàn)的方法。該方法包括識別應用的多個事務。多個事務與有嫌疑的存儲器分配相關(guān),并且基于至少一個預定標準來識別。至少一個預定標準包括:識別與常見存儲器問題已知的類、與來自先前執(zhí)行中的存儲器問題相關(guān)的類以及與用戶興趣相關(guān)的類中的一個或多個相關(guān)的存儲器分配。進一步地,該方法包括:系統(tǒng)地執(zhí)行多個事務以發(fā)起多個存儲器分配請求,其中,執(zhí)行多個事務導致生成度量。關(guān)于執(zhí)行事務所生成的度量至少包括與事務相關(guān)的存儲器分配信息,與多個事務中的事務相關(guān)的存儲器分配信息包括存儲器分配類型、時間戳、尺寸以及存儲器分配起源(origin)。周期性地獲取系統(tǒng)地執(zhí)行多個事務時所生成的度量。周期性獲取度量包括:利用對應唯一標識符來標記多個存儲器分配請求中的每一個,其中,與多個存儲器分配請求中的一個存儲器分配請求相關(guān)的對應唯一標識符包括:對應分配的存儲器位置的哈希碼、響應于存儲器分配請求而創(chuàng)建的對象的類型、對象創(chuàng)建的時間戳以及對象從源以及運行時間中的位置(the location of the object from source and runtime)。對應于多個事務中的每一個的度量與對應唯一標識符相關(guān)?;诙攘恳约皩ㄒ粯俗R符,從多個事務中識別由于有嫌疑的存儲器分配而受影響的一組事務。
在又一實施方式中,提供一種具有用于執(zhí)行用于檢測存儲器嫌疑的方法的計算機程序裝載在其上的非暫時性計算機可讀介質(zhì)。該方法包括識別應用的多個事務。多個事務與有嫌疑的存儲器分配相關(guān),并且基于至少一個預定標準來識別。至少一個預定標準包括:識別與常見存儲器問題已知的類、與來自先前執(zhí)行中的存儲器問題相關(guān)的類以及與用戶興趣相關(guān)的類中一個或多個相關(guān)的存儲器分配。進一步地,該方法包括:系統(tǒng)地執(zhí)行多個事務以發(fā)起多個存儲器分配請求,其中,執(zhí)行多個事務導致生成度量。關(guān)于執(zhí)行事務所生成的度量至少包括與事務相關(guān)的存儲器分配信息,與多個事務中的事務相關(guān)的存儲器分配信息包括存儲器分配類型、時間戳、尺寸以及存儲器分配起源。周期性地獲取當系統(tǒng)地執(zhí)行多個事務時生成的度量。周期性獲取度量包括:利用對應唯一標識符來標記多個存儲器分配請求中的每一個,其中,與多個存儲器分配請求中的存儲器分配請求相關(guān)的對應唯一標識符包括:對應分配存儲器位置的哈希碼、響應于存儲器分配請求而創(chuàng)建的對象的類型、對象創(chuàng)建的時間戳以及對象從源以及運行時間中的位置。對應于多個事務中的每一個事務的度量與對應唯一標識符相關(guān)?;诙攘恳约皩ㄒ粯俗R符,從多個事務中識別由于有嫌疑的存儲器分配而受影響的一組事務。
附圖說明
參考附圖來描述詳細說明。在圖中,參考標號的最左側(cè)數(shù)字(多個數(shù)字)表示第一次出現(xiàn)該參考標號時的圖。整個說明書附圖,相同標號用于引用相同特征及模塊。
圖1示出根據(jù)本主題的實施方式的用于檢測與示出的應用相關(guān)的存儲器嫌疑的網(wǎng)絡實施例;
圖2示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的系統(tǒng)的框圖;
圖3示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的功能流的示例性表示;
圖4示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的存儲器監(jiān)控會話的示例性表示;
圖5示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的方法的流程圖;以及
圖6A和圖6B示出根據(jù)另一示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的方法的流程圖。
本領(lǐng)域技術(shù)人員應理解,本文中的任何框圖表示體現(xiàn)本主題的原理的說明性系統(tǒng)和設(shè)備的概念圖。類似地,應理解,任何流程圖、流程圖表等表示可基本上在計算機可讀介質(zhì)中表示并且由計算機或處理器執(zhí)行的各種處理,而不管計算機或處理器是否被明確示出。
具體實施方式
本公開涉及一種用于檢測應用環(huán)境中的存儲器嫌疑的系統(tǒng)和方法。參考本公開,“應用”可包括“應用軟件”,其可包含功能性的一個或多個單元(例如,具有電子郵件功能的網(wǎng)絡門戶、數(shù)據(jù)庫程序、單詞處理程序、記帳程序、數(shù)值分析程序)。“應用”也可包括“服務”,其可包含功能性的一個邏輯單元(例如,負責數(shù)據(jù)的轉(zhuǎn)換、存儲和/或檢索的自主單元,諸如數(shù)據(jù)庫管理服務或數(shù)據(jù)庫應用編程接口(API)服務)。與應用相關(guān)的服務可以是關(guān)于與應用提供的事務或使用情況相關(guān)的各種程序。例如,在線訂票應用可包括用于各種事務或使用情況(諸如登入應用、搜索可訂票、在線支付、酒店預訂、出租車預訂等)的程序。在一些實施方式中,應用可以是獨立Java應用。在一些實施方式中,應用可以是可利用多種資源的復雜企業(yè)應用。
在執(zhí)行與應用相關(guān)的各種程序或使用情況的過程中,要求應用在與運行該應用的系統(tǒng)有關(guān)的存儲器的一部分中存儲用于這種程序的臨時信息。系統(tǒng)通常具有有限的可用存儲器,并且因此如果一個應用使用系統(tǒng)可用存儲器的一大部分,則為此,其他應用可能不能夠訪問需要的存儲器。為了解決這種情況,要求應用釋放先前分配給該應用的存儲器。具體地,一旦釋放存儲器,它就被重分配到系統(tǒng),并且該系統(tǒng)可將該存儲器進一步重分配至任意其他應用或者需要存儲器的相同應用的其他對象。向應用分配存儲器的一部分被稱為‘存儲器分配’或‘對象分配’。
在一些情形中,分配至應用的存儲器不被釋放,并且甚至當使用該應用時,該存儲器仍然保持分配至該應用。在使用之后存儲器不被清理的這種情形被稱為‘存儲器泄露’。例如,在‘機票預訂’應用的情況下,一旦用戶登入到網(wǎng)站,用戶的配置文件就可能被加載到存儲器。在登入時,用戶可執(zhí)行多次事務,諸如搜索、預訂、支付等。但是用戶配置文件以及與用戶配置文件有關(guān)的數(shù)據(jù)可保持有效并且存儲在存儲器中,直至用戶退出應用登入。與用戶配置文件有關(guān)的數(shù)據(jù)保持存儲在存儲器中而不被清理的情況可被視為‘存儲器泄露’。存儲器泄露可隨著時間增加,并且在存儲器泄露未被清理的情況下,這些可導致系統(tǒng)變慢、應用響應時間長以及存儲器不足的錯誤。因此,為了有效的響應時間,有必要在使用之后清理存儲器。
在大型應用/環(huán)境中,識別與存儲器泄露有關(guān)的存儲器分配可能是困難且耗時的。本文中,與存儲器泄露或存儲器問題有關(guān)的存儲器分配可被稱為‘存儲器嫌疑’或‘有嫌疑的存儲器’。用于識別存儲器嫌疑的方法之一是周期性地檢索存儲器堆轉(zhuǎn)儲,隨后可針對存儲器嫌疑來分析該存儲器堆轉(zhuǎn)儲。通常,這種存儲器堆轉(zhuǎn)儲是非常巨大的,并且系統(tǒng)可能不能夠處理這種大的存儲器堆轉(zhuǎn)儲。在另一方法中,應用使用剖析器來描述存儲器(或?qū)ο?分配(例如,每n個存儲器分配)的輪廓以確定大概的存儲器 使用。盡管該方法識別大量對象,但是它僅在少數(shù)情況下可識別與存儲器泄露有關(guān)的根本原因及對應使用情況。
在一些情形中,可識別使用運行用的巨大存儲器的應用的對象。但是在大多數(shù)情況下,存儲器管理不僅與識別對象或者該對象分配至的存儲器位置相關(guān),而且也與應用的使用情況相關(guān)。這可歸因于如下事實:相同程序(或代碼或函數(shù))可被用在與存儲器有關(guān)的不止一種使用情況/情形中。例如,在與應用的不同使用情況有關(guān)的分類項中,可利用指定用于‘分類’的程序代碼。
在大多數(shù)情形中,存儲器利用率或者向?qū)ο蠓峙涞拇鎯ζ骺删唧w到應用環(huán)境或應用使用情況。因此,在沒有應用環(huán)境的情況下檢測的任何存儲器嫌疑都可提供解決存儲器泄露問題的不當指導。本文的各種實施方式公開了用于檢測和分析與應用相關(guān)的存儲器嫌疑的系統(tǒng)和方法。在各種實施方式中,通過遵循系統(tǒng)方法來監(jiān)控存儲器,可基于存儲器使用、應用使用情況以及應用環(huán)境的改變生成存儲器趨勢。盡管所描述的用于檢測應用環(huán)境中的存儲器嫌疑的系統(tǒng)和方法的方面可在任意數(shù)量的不同計算設(shè)備、環(huán)境和/或配置中實現(xiàn),但是實施方式是在如下示例性設(shè)備的環(huán)境中描述的。
參考圖1,示出了根據(jù)本主題的實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的網(wǎng)絡實施例100。網(wǎng)絡實施例100示出為包括:系統(tǒng)102、諸如用戶設(shè)備104-1、104-2......104-N的用戶設(shè)備以及用于促進系統(tǒng)102與用戶設(shè)備104-1、104-2......104-N之間的通信的通信網(wǎng)絡106。在一個實施方式中,系統(tǒng)102促進用于在應用環(huán)境中診斷存儲器嫌疑的共用平臺。
雖然考慮將系統(tǒng)102實現(xiàn)為單個設(shè)備來說明本主題,但是可理解的是,系統(tǒng)102還可實現(xiàn)為各種計算系統(tǒng)(諸如,膝上型電腦、臺式電腦、筆記本、工作站、大型機電腦、網(wǎng)絡服務器、平板電腦、移動電話、機器人等)。
將理解,系統(tǒng)102可通過一個或多個用戶設(shè)備104-1、104-2……104-N(在下文中,統(tǒng)稱為用戶設(shè)備104)或者駐留在用戶設(shè)備104上的應用,由多個用戶訪問。用戶設(shè)備104的實例可包括但不限于,便攜式電腦、個人數(shù)字助理、手持設(shè)備以及工作站。為了運行應用會話,用戶設(shè)備104可與服務器108創(chuàng)建對應會話。
在實施方式中,每個設(shè)備104可與服務器108創(chuàng)建會話用于與服務器108通信。設(shè)備104可通過通信網(wǎng)絡106與服務器108通信。通信網(wǎng)絡106可以是無線網(wǎng)絡、有線網(wǎng)絡或其組合。通信網(wǎng)絡106可實現(xiàn)為諸如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、互聯(lián)網(wǎng)等的不同類型網(wǎng)絡中的一種。通信網(wǎng)絡106可以是專用網(wǎng)絡或共享網(wǎng)絡。共享網(wǎng)絡表示使用各種協(xié)議(例如,超文本傳輸協(xié)議(HTTP)、傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)、無線應用協(xié)議(WAP)等)的不同類型的網(wǎng)絡的聯(lián)合以彼此通信。此外,網(wǎng)絡106可包括各種網(wǎng)絡設(shè)備,包括路由器、網(wǎng)橋、服務器、計算設(shè)備、存儲裝置等。
可如下執(zhí)行存儲器嫌疑的檢測:周期性地監(jiān)控應用的存儲器并且從活躍存儲器中的存儲器收集輸入。監(jiān)控存儲器促進分離有嫌疑的存儲器的位置,并且也參考應用的使用情況與有嫌疑的存儲器分配相關(guān)聯(lián)。具體地,系統(tǒng)在各種存儲器監(jiān)控會話中監(jiān)控存儲器以確定包括存儲器使用、垃圾收集以及與應用相關(guān)的有關(guān)使用情況的度量。系統(tǒng)基于確定的度量促進生成存儲器趨勢。在一些實施方式中,用戶可使用用戶設(shè)備(或客戶端)104發(fā)起用于在服務器102上運行的應用的存儲器監(jiān)控會話。在一些其他實施方式中,可以周期性方式自動發(fā)起存儲器監(jiān)控。
客戶端(例如,設(shè)備104)可與服務器102創(chuàng)建存儲器監(jiān)控會話。在存儲器監(jiān)控會話的過程中,在有系統(tǒng)地執(zhí)行與在服務器108的JVM上運行的應用有關(guān)的各種使用情況下,在受控環(huán)境中監(jiān)控應用。在存儲器監(jiān)控會話過程中生成的度量被收集為快照。例如,在服務器108上包括的系統(tǒng)可記錄和存儲用于存儲器監(jiān)控會話的度量,供由從客戶端104運行存儲器 監(jiān)控會話的用戶進行分析。在一些實施方式中,度量可存儲在服務器108上的存儲器中。在一些實施方式中,系統(tǒng)102也可向客戶端104發(fā)送數(shù)據(jù)供用戶分析??蛻舳?04可在被顯示在設(shè)備104上的圖形用戶界面(GUI)中顯示針對在JVM上運行的應用而記錄的數(shù)據(jù)。度量或存儲器快照的收集可由用戶觸發(fā)或者自動配置。存儲器快照可根據(jù)使用情況進行分類,并且包含相關(guān)應用上下文以識別使用情況或商業(yè)事務。系統(tǒng)102可將存儲器快照與先前快照相比較并且驗證存儲器快照以用于應用的存儲器診斷。參考圖2進一步描述用于檢測存儲器嫌疑的系統(tǒng)的實例。
圖2示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的系統(tǒng)200的框圖。系統(tǒng)200是圖1的系統(tǒng)108的實例。在示例性實施方式中,系統(tǒng)200可體現(xiàn)在計算設(shè)備中。可選地,系統(tǒng)200可體現(xiàn)在服務器(例如,圖1的服務器108)中。在實施方式中,系統(tǒng)200促進監(jiān)控與應用的各種事務或使用情況相關(guān)的存儲器分配,并且基于在監(jiān)控存儲器的過程中生成的度量的分析而進一步檢測存儲器嫌疑。系統(tǒng)200包括至少一個處理器(諸如,處理器202)、至少一個存儲器(諸如,存儲器204)以及用戶界面206,或者以另外方式與至少一個處理器(諸如,處理器202)、至少一個存儲器(諸如,存儲器204)以及用戶界面206通信。在實施方式中,處理器202、存儲器204以及用戶界面206可通過系統(tǒng)總線(諸如,系統(tǒng)總線208或類似機制)耦接。
除此之外,處理器202可包括實現(xiàn)與通信相關(guān)的音頻和邏輯功能的電路。例如,處理器202可包括但不限于一個或多個數(shù)字信號處理器(DSP)、一個或多個微處理器、一個或多個專用計算機芯片、一個或多個現(xiàn)場可編程門陣列(FPGA)、一個或多個專用集成電路(ASIC)、一個或多個計算機(多個計算機)、各種模數(shù)轉(zhuǎn)換器、數(shù)模轉(zhuǎn)換器和/或其他支持電路。因此,處理器202也可包括編碼消息和/或數(shù)據(jù)或信息的功能。除此之外,處理器202可包括時鐘、運算邏輯單元(ALU)以及被配置為支持處理器202的操作的邏輯門。此外,處理器202可包括運行一個或多個軟件程序 的功能,該軟件程序可存儲在存儲器204中或者以另外方式可訪問處理器202。
至少一個存儲器(諸如,存儲器204)可存儲由系統(tǒng)使用以實現(xiàn)系統(tǒng)的功能的若干信息或數(shù)據(jù)。例如,在示例性實施方式中,存儲器204被配置為存儲在應用的存儲器監(jiān)控會話過程中生成的度量。例如,存儲器204可包括易失性存儲器和/或非易失性存儲器。易失性存儲器可包括但不限于,易失性隨機存取存儲器(RAM)。另外地或可選地,非易失性存儲器可包括電可擦除可編程只讀存儲器(EEPROM)、閃存、硬盤驅(qū)動器等。易失性存儲器的一些實例包括但不限于,隨機存取存儲器、動態(tài)隨機存取存儲器、靜態(tài)隨機存取存儲器等。非易失性存儲器的一些實例包括但不限于,硬盤、磁帶、光盤、可編程只讀存儲器、可擦除可編程只讀存儲器、電可擦除可編程只讀存儲器、閃存等。存儲器204可被配置為存儲關(guān)于監(jiān)控用于存儲器診斷的存儲器分配、應用、指令等的信息、數(shù)據(jù),以執(zhí)行根據(jù)各種示例性實施方式的各種功能。另外地或可選地,存儲器204可被配置為存儲指令,當該指令由處理器202執(zhí)行時,使得系統(tǒng)200表現(xiàn)地與在各種實施方式中描述的方式一樣。
在實施方式中,使得系統(tǒng)200發(fā)起應用。例如,可使得系統(tǒng)200基于用戶輸入而發(fā)起應用。在發(fā)起應用時,可在運行環(huán)境中生成多個存儲器分配請求(或?qū)ο?。所述對象被分配有相應存儲器位置。下文中,向?qū)ο蠓峙浯鎯ζ骺杀环Q為‘存儲器分配’或‘對象分配’。為了確定與應用相關(guān)的存儲器嫌疑,執(zhí)行存儲器的剖析(profiling)。與應用相關(guān)的存儲器的剖析或者存儲器剖析包括調(diào)查和分析程序行為以確定如何優(yōu)化程序的存儲器使用的處理。
在實施方式中,可使得系統(tǒng)200執(zhí)行與應用相關(guān)的存儲器的剖析。在實施方式中,系統(tǒng)200可包括剖析代理或剖析器,其可集成至應用環(huán)境中用于執(zhí)行存儲器剖析。剖析器代理可由處理器配置,并且可以是充當代理的如下部件:其從應用收集所有相關(guān)度量并且將度量保存至數(shù)據(jù)儲存器。 剖析器代理能夠在目標應用中注入二進制執(zhí)行邏輯,由此跟蹤從應用到運行環(huán)境的存儲器分配請求。例如,對于基于java的應用,剖析器代理可使用字節(jié)碼測試(BCI)技術(shù)以將其嵌入應用中。使用BCI,樣本java應用可被轉(zhuǎn)換以收集所需度量。
在實施方式中,使得系統(tǒng)200轉(zhuǎn)換應用的類及二進制(classes and binaries of the application),用于使剖析器能夠收集存儲器剖析所需的相關(guān)數(shù)據(jù)(或度量)。在實施方式中,當發(fā)起目標應用并且由類裝載器在運行環(huán)境中裝載類時,使得系統(tǒng)200基于被裝載的類及二進制是否滿足至少一個預定標準的判定來轉(zhuǎn)換類及二進制。例如,如果xi表示將要由類裝載器在運行時裝載的類(二進制),則隨后在裝載類時,剖析器代理截獲每個類裝載并且檢查以下預定標準/條件:
xi∈Xnf,
其中,Xnf是滿足預定標準的類的集合。在實施方式中,滿足預定標準的類的集合可包括:將施加于存儲器剖析的本機過濾器(native filters)。本文中,本機過濾器(Xnf)可定義為來自如下提及的集合中的一個或多個:
Xnf=用戶興趣的二進制/類的特定集合,和/或
常見存儲器問題已知的二進制/類的特定集合,和/或
基于來自先前執(zhí)行中的存儲器問題的應用特定的二進制/類的特定集合。
在實施方式中,在向用于存儲器剖析的java代理提供類字節(jié)之前,使得系統(tǒng)200向滿足預定標準的存儲器分配請求(或類)應用剖析器轉(zhuǎn)換(PT)。剖析器轉(zhuǎn)換可表示如下:
否則,
如以上表示的,應用剖析器轉(zhuǎn)換包括:使得系統(tǒng)200利用對應唯一標識符來標記存儲器分配請求。在實施方式中,基于與存儲器分配請求相關(guān)的所分配的存儲器的哈希碼生成唯一標識符。在實施方式中,可使用如下定義的函數(shù),通過生成且為對象標記唯一數(shù)來標記對象:
唯一數(shù)生成U=f(type,memory,time,location)
其中,
type是創(chuàng)建的對象的類型,
memory是對象的存儲器位置,
time是以納秒計的對象被創(chuàng)建/分配時的時間戳,
location是對象從源和運行時間中的位置(location of object from the source and runtime)
對象的位置可定義為如下函數(shù):
location=f(thread,class,classloader,method,line number)
其中,
thread是實際創(chuàng)建/分配對象的線程,
class是其中分配發(fā)生的類的完全合格的類名(包括包名(package name)),
classloader是用于裝載完全合格的類的類裝載器的類型,
method是其中對象分配發(fā)生的方法名(包括方法的簽名),
line number是其中分配發(fā)生的行號。
基于以上定義,可使得系統(tǒng)200創(chuàng)建可用于標記對象的唯一數(shù)/標識符。創(chuàng)建函數(shù)以便基于靜態(tài)及動態(tài)參數(shù)來區(qū)別對象。例如,如果以循環(huán)創(chuàng)建對象,則可基于哪種的類裝載器被使用或者對象創(chuàng)建的時間戳什么樣或者使用哪種線程被使用來區(qū)分具有相同行號/類的對象。
在示例性實施方式中,使得系統(tǒng)200生成具有與標記的存儲器分配請求相關(guān)的細節(jié)的度量。例如,可以以映射表的形式獲取度量,該映射表包括與標記的存儲器分配相關(guān)的諸如分配請求的起源、時間戳、尺寸、類型等信息。轉(zhuǎn)換下的對象被標記有關(guān)于分配的源的映射表。在任何時間,如果系統(tǒng)確定不再使用對象(重分配/垃圾收集),則所述對象的細節(jié)在度量(或映射表)中更新。此外,使得系統(tǒng)200周期性地獲取存儲器信息,諸如總體存儲器使用、可用存儲器、存儲器檢索所花費的時間、存儲器檢索所占用的CPU。
在實施方式中,使得系統(tǒng)200存儲涉及存儲器的分配/重分配的存儲器信息以及涉及存儲器分配/重分配的至少一種應用使用情況。在實施方式中,使得系統(tǒng)200周期性地自動存儲存儲器信息。在另一實施方式中,使得系統(tǒng)200基于用戶輸入而存儲存儲器信息。例如,用戶可向剖析器代理發(fā)出 信號以將度量保存至存儲器204(或度量數(shù)據(jù)儲存器)。度量可被稱為存儲器快照。存儲器快照可包括應用存儲器信息和存儲器分配信息。應用存儲器信息可包括但不限于:可用于運行環(huán)境的總存儲器、由應用使用的存儲器、由運行環(huán)境為清理存儲器而做出的嘗試(例如,java環(huán)境中的垃圾收集計數(shù))、由處理器清理存儲器所花費的時間(例如,java環(huán)境中的垃圾收集所花費的時間)以及存儲器快照的時間戳。存儲器分配信息可包括諸如存儲器分配類型(結(jié)構(gòu)、類等)、時間戳、尺寸以及分配起源(例如,函數(shù)、源代碼等)的信息。
在實施方式中,使得系統(tǒng)200系統(tǒng)地監(jiān)控存儲器監(jiān)控會話中的應用以檢測有嫌疑的存儲器。本文中,術(shù)語‘系統(tǒng)地監(jiān)控’可指代通過迭代(反復)執(zhí)行與應用相關(guān)的多種使用情況或者事務來監(jiān)控應用,其中,多種使用情況是與滿足預定標準的類相關(guān)的那些使用情況。在實施方式中,系統(tǒng)監(jiān)控應用包括:訪問具有特定目標使用情況的目標應用。例如,在存儲器監(jiān)控會話過程中,用戶可周期性地訪問具有特定目標使用情況的目標應用。在實施方式中,監(jiān)控目標應用可從系統(tǒng)200的用戶界面中執(zhí)行。例如,用戶可從系統(tǒng)的用戶界面(或諸如圖1的設(shè)備104的客戶端設(shè)備)的目標應用啟動監(jiān)控。在另一實施方式中,系統(tǒng)200可自動配置為在存儲器監(jiān)控會話過程中,周期性地訪問具有特定目標使用情況的目標應用。
在實施方式中,使得系統(tǒng)200在存儲器監(jiān)控會話的開始和結(jié)束獲取存儲器快照。在存儲器監(jiān)控會話的開始和結(jié)束獲取到的這種存儲器快照被稱為基線快照。在存儲器監(jiān)控會話過程中,可針對多個迭代重復應用使用情況。在每個迭代結(jié)束時,使得系統(tǒng)200獲取存儲器快照。參考圖4進一步描述在存儲器監(jiān)控會話過程中生成多個存儲器快照的實例。在實施方式中,可應用逆轉(zhuǎn)換以完全關(guān)閉監(jiān)控并且恢復應用原始狀態(tài)。在實施方式中,為了結(jié)束監(jiān)控會話,使得系統(tǒng)200應用逆轉(zhuǎn)換(也被稱為逆剖析器轉(zhuǎn)換)。逆剖析器轉(zhuǎn)換PT’(xi)可如下定義:
否則,
在存儲器監(jiān)控會話過程中,使得系統(tǒng)200存儲在存儲器監(jiān)控會話過程中生成的多個存儲器快照。在示例性實施方式中,使得系統(tǒng)200在系統(tǒng)200的存儲器中存儲多個存儲器快照。在實施方式中,多個存儲器快照可存儲在與系統(tǒng)200相關(guān)的數(shù)據(jù)儲存器中,其中,數(shù)據(jù)儲存器可與系統(tǒng)200通信地耦接。
使得系統(tǒng)200按照每種使用情況或商業(yè)事務將存儲器快照分組。因為轉(zhuǎn)換下的所有對象標記有關(guān)于分配起源的映射表,所以系統(tǒng)200可將存儲器快照按照使用情況分組。在實施方式中,使得系統(tǒng)200解析運行存儲器以便識別標記有唯一標識符的存儲器分配。因此,分配列表可以和與存儲器快照相關(guān)的其他度量填充在存儲器快照中。
使得系統(tǒng)200執(zhí)行多個快照的分析,以檢測存儲器嫌疑。在實施方式中,使得系統(tǒng)200基于基線快照與多個中間快照的比較來執(zhí)行分析??蓤?zhí)行基線快照與多個中間快照的比較以得到對象的每個類型/類的計數(shù)、尺寸的改變。
在實施方式中,基于在監(jiān)控會話過程中獲取的多個存儲器快照,可檢測到引起存儲器泄露的有問題的使用情況。在示例性實施方式中,系統(tǒng)200可被配置為對在存儲器監(jiān)控會話過程中獲取的度量執(zhí)行分析,并且基于總尺寸和計數(shù)提供關(guān)于前(top,頂部)N個存儲器分配類型的存儲器趨勢。在實施方式中,可使得系統(tǒng)200橫跨存儲器快照解析度量并且生成存儲器嫌疑列表。對于諸如存儲器分配類型(例如,結(jié)構(gòu)、類等)、時間戳、尺 寸、分配起源(函數(shù)/源代碼)的存儲器分配信息中的每項,進行各個存儲器快照之間的比較,以確定對象的每個類型/類的計數(shù)、尺寸的改變。在實施方式中,可使得系統(tǒng)200針對所有對象類型,生成同基線開始及結(jié)束快照相比在在總體存儲器尺寸或計數(shù)方面具有凈增長的圖形圖案。在實施方式中,可使得系統(tǒng)200通過考慮沿著圖形的多個點,計算圖形的斜率。具有最高平均正斜率值以及非負斜率的對象類型可以降序列出。如果斜率為零或負值或者具有負的凈趨勢的正和負值的組合,則它們不被分類為存儲器嫌疑。然而,如果斜率是線性和正數(shù)的,或者組合平均凈斜率是正數(shù),則對應類型是存儲器嫌疑的候選項。
在實施方式中,使得系統(tǒng)200突出(加亮)存儲器嫌疑列表中的已知是頻繁存儲器嫌疑(來自先前執(zhí)行中的一般運行/應用特定問題)的對象類型。在選擇存儲器嫌疑時,利用堆疊追蹤和相關(guān)性圖形顯示詳細的深度探討報告。相關(guān)性圖形是具有對象存儲器尺寸/計數(shù)圖形的疊加圖形,其他存儲器細節(jié)包括垃圾收集時間、可用總存儲器、得到用于每種使用情況的對象類型的存儲器趨勢的相關(guān)視圖的總共使用的存儲器。由于這也示出了清理存儲器所花費的時間(垃圾收集時間),所以也可顯示由于存儲器嫌疑影響的響應時間或CPU。
在示例性實施方式中,當定位根本原因位置(碼堆疊追蹤)時,應用上下文(對該原因負責的特定使用情況)時,使得系統(tǒng)200生成關(guān)于應用的嫌疑位置的報告。一旦固定了存儲器嫌疑,則可再次監(jiān)控相同使用情況以與先前快照做比較,以檢查存儲器問題是否得到解決。
圖3示出根據(jù)示例性實施方式的用于檢測與應用(例如,應用302)相關(guān)的存儲器嫌疑的功能流300的示例性表示。功能流示出為包括在各種塊之間的流動,各種塊包括:應用302、配置數(shù)據(jù)304、度量數(shù)據(jù)儲存器306、存儲器嫌疑分析器308、用戶界面310以及與應用相關(guān)的剖析器代理312。
本文中,應用302表示可包括多種使用情況的目標應用。例如,目標應用可以是在線訂票應用。與訂票應用相關(guān)的使用情況或事務可包括,例如,搜索機票、定機票、更改航班等等。
為了獲取與應用302相關(guān)的存儲器嫌疑,剖析器代理312附接有應用302。剖析器代理312被配置為系統(tǒng)地剖析與應用302相關(guān)的存儲器,并且周期性地收集與應用相關(guān)的有關(guān)數(shù)據(jù)(諸如度量)。配置數(shù)據(jù)304包括關(guān)于度量的獲取的輸入。例如,配置數(shù)據(jù)304可包括諸如在度量中獲取什么數(shù)據(jù)、在什么時間必須獲取數(shù)據(jù)等的信息。在實施方式中,配置數(shù)據(jù)304可由用戶提供,并且可在發(fā)起用于監(jiān)控應用的存儲器監(jiān)控會話之前存儲該配置數(shù)據(jù)。在示例性實施方式中,可使用默認自動生成標準配置。
由剖析器代理312收集的度量可存儲在度量數(shù)據(jù)儲存器306中。例如,度量數(shù)據(jù)儲存器306可儲存存儲器信息和與事務相關(guān)的存儲器分配信息。度量數(shù)據(jù)儲存器306與存儲器嫌疑分析器308耦接。在度量數(shù)據(jù)儲存器306中收集的度量提供至存儲器嫌疑分析器308,并且存儲器嫌疑分析器308被配置為分析數(shù)據(jù),以與為引起存儲器嫌疑而負責的相關(guān)應用上下文(或使用情況或事務)一起預測與應用相關(guān)的存儲器嫌疑。
基于執(zhí)行的情形/事務,用戶界面310被配置為示出表示用于猛增的存儲器的存儲器趨勢的分析。此外,該分析表示與存儲器泄露相關(guān)的存儲器位置,用于發(fā)生存儲器泄露的代碼(或函數(shù))以及與發(fā)生存儲器泄露的代碼相關(guān)的特定使用情況。用戶界面310也可使用戶能夠提供關(guān)于度量的獲取的輸入。例如,用戶可對在特定時間點獲取度量或存儲器快照感興趣,并且因此可在用戶界面提供輸入。在實施方式中,用戶可從用戶界面310發(fā)起存儲器監(jiān)控會話,用于確定存儲器嫌疑。在存儲器監(jiān)控會話過程中,可獲取度量。參考圖4進一步描述存儲器監(jiān)控會話的實例。
圖4示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的存儲器監(jiān)控會話的示例性表示400。根據(jù)本文中的公開內(nèi)容,存儲器監(jiān)控 會話可被定義為系統(tǒng)執(zhí)行與應用相關(guān)的多個事務以檢測與應用相關(guān)的存儲器嫌疑的會話(session)。
在實施方式中,發(fā)起應用并且獲取與應用相關(guān)的度量。在實施方式中,通過以下表示為410的序列,可獲取與應用相關(guān)的事務的第一基線存儲器快照。參考圖4中的序列410,在發(fā)起應用時獲取度量(或表示為402的存儲器快照)。在發(fā)起應用時獲取的該度量402可被稱為基線存儲器快照。發(fā)起監(jiān)控會話,并且執(zhí)行第一事務402。在實施方式中,第一事務404可以是登入事務。在執(zhí)行登入事務404時,獲取與應用相關(guān)的度量(或存儲器快照)406。執(zhí)行第二事務,該第二事務為退出事務(例如,退出事務408)并且獲取與應用相關(guān)的度量412,?;诙攘?02、406以及412的比較來確定與度量相關(guān)的各參數(shù)的增加或減少。在實施方式中,確定的尺寸和其他參數(shù)的改變可以以圖形形式呈現(xiàn)(例如,呈現(xiàn)在用戶界面上)。例如,圖形可顯示為示出在登入或退出事務之后的存儲器的增加或減少。在實施方式中,可多次重復(用于多次迭代)登入、獲取度量、退出和再次獲取度量的序列410。參考序列450進一步描述執(zhí)行涉及多次執(zhí)行事務并獲取度量的多次迭代的實例。
參考圖4的序列450,發(fā)起應用并且獲取與應用相關(guān)的度量452(或基線快照452)。發(fā)起存儲器監(jiān)控會話,并且執(zhí)行第一事務454。在實施方式中,第一事務可為登入事務,例如,登入事務454。在執(zhí)行登入事務454時,獲取與應用相關(guān)的度量(或存儲器快照)456。執(zhí)行例如事務458的事務,并且在執(zhí)行該事務時獲取與應用相關(guān)的度量460。事務可與應用的使用情況相關(guān)。例如,在在線預訂應用中,事務458可以是票務搜索事務。如圖4所示,執(zhí)行事務多次,并且在每次執(zhí)行之后,生成存儲器快照。例如,多次執(zhí)行事務458,并且在每次執(zhí)行度量之后,獲取諸如存儲器快照460、462以及464的度量。在存儲器監(jiān)控會話結(jié)束時,執(zhí)行第二事務,并且獲取與應用相關(guān)的度量468,該第二事務為登出事務(例如,退出事務466)。
在實施方式中,基于在序列410及序列450中獲取的快照,可檢測引起存儲器泄露的有問題的使用情況。在示例性實施方式中,如參考圖2已經(jīng)討論的,系統(tǒng)可被配置為執(zhí)行對存儲器會話過程中獲取的度量的分析,并且提供存儲器嫌疑。在實施方式中,可分析在執(zhí)行序列410和450過程中收集的度量以檢測存儲器嫌疑。參考圖5進一步描述存儲器嫌疑的診斷的示例性流程圖。
圖5示出根據(jù)示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的方法500的流程圖。可在計算機可執(zhí)行指令的一般上下文中描述方法500。通常,計算機可執(zhí)行指令可包括執(zhí)行特定功能或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、分量、數(shù)據(jù)結(jié)構(gòu)、過程、模塊、函數(shù)等。還可在分布式計算環(huán)境中實踐該方法500,在分布式計算環(huán)境中,由經(jīng)由通信網(wǎng)絡鏈接的遠程處理設(shè)備執(zhí)行功能。在分布式計算環(huán)境中,計算機可執(zhí)行指令可位于包括存儲器存儲設(shè)備的本地和遠程計算機存儲介質(zhì)中。
描述方法500的順序并非旨在理解為具有限制性,并且任意數(shù)量的描述方法的方框可以按照任何順序組合來實現(xiàn)方法500或可選方法。此外,在不背離本文描述的主題的精神和范圍的情況下,可以從方法500中刪除各個方框。而且,該方法500可以在任何合適的硬件、軟件、固件或其組合中實現(xiàn)。然而,為了便于說明,在以下描述的實施方式中,方法500可被視為在上文中描述的系統(tǒng)102(圖1)和/或系統(tǒng)200(圖2)中實現(xiàn)。
在502中,系統(tǒng)地執(zhí)行與應用相關(guān)的多個事務。在實施方式中,執(zhí)行多個事務引起度量的生成。所述度量包括應用存儲器信息和與事務相關(guān)的存儲器分配信息。在504中,周期性地獲取在系統(tǒng)地執(zhí)行多個事務時生成的度量。參考圖4說明系統(tǒng)地執(zhí)行多個事務并且周期性地獲取度量的實例。
在506中,基于周期性獲取的度量,從多個事務中檢測由于有嫌疑的存儲器分配而受到影響的一組事務。在實施方式中,度量的存儲器分配信 息促進識別受到影響的該組事務。參考圖6A和圖6B進一步描述用于檢測與應用相關(guān)的存儲器嫌疑的方法的詳細地流程圖。
圖6A和圖6B示出根據(jù)另一示例性實施方式的用于檢測與應用相關(guān)的存儲器嫌疑的方法600的流程圖。
在602中,發(fā)起應用。應用可由用戶經(jīng)由用于訪問應用的設(shè)備的用戶界面發(fā)起。在604中,轉(zhuǎn)換滿足至少一個預定標準的與應用相關(guān)的類和/或二進制。在實施方式中,預定標準可包括識別與常見存儲器問題的已知的類、與來自先前執(zhí)行中的存儲器問題相關(guān)的類以及與用戶興趣相關(guān)的類中的至少一個相關(guān)的存儲器分配。在實施方式中,預定標準可設(shè)置為識別應用的可與有嫌疑的存儲器分配相關(guān)的那些事務。
在606中,創(chuàng)建用于檢測存儲器嫌疑的存儲器監(jiān)控會話。參考圖4詳細描述用于收集度量的存儲器監(jiān)控會話的實例。在存儲器監(jiān)控會話過程中,迭代執(zhí)行與應用相關(guān)的至少一個事務,并且在每次執(zhí)行之后可獲取與存儲器相關(guān)的度量。這種度量被稱為存儲器快照。例如,在608中,在監(jiān)控會話的開始執(zhí)行與應用相關(guān)的第一事務。在610中,利用對應唯一標識符標記對應于第一事務的存儲器分配請求。在612中,獲取與第一事務相關(guān)的度量。在存儲器監(jiān)控會話的開始獲取的這種度量或存儲器快照可被稱為基于存儲器快照的。在614中,多次執(zhí)行與應用相關(guān)的多個事務。在616中,利用對應唯一標識符標記對應于多個事務的存儲器分配請求,在執(zhí)行多個事務中的每個事務之后獲取度量。
在620中,執(zhí)行第二事務以停止存儲器監(jiān)控會話。在622中,利用對應唯一標識符標記對應于第二事務的存儲器分配請求。在624中,獲取與第二事務相關(guān)的度量。在626中,填入在執(zhí)行多個事務時生成的度量。在實施方式中,度量可填充在其中該度量與多個事務中的對應事務相關(guān)的表中。在實施方式中,度量可基于對應于事務的存儲器分配請求標記所利用的唯一標識符來與對應事務相關(guān)聯(lián)。在628中,可基于周期性獲取的度量 和對應事務的比較,執(zhí)行分析以確定與有嫌疑的存儲器分配相關(guān)的存儲器趨勢。參考圖2描述可執(zhí)行的各種示例性分析。
書面描述描述了本文的主題以使得本領(lǐng)域任意技術(shù)人員能夠做出并使用實施方式。主題實施方式的范圍由權(quán)利要求限定,并且可包括本領(lǐng)域技術(shù)人員想到的其它修改。如果這種其它修改具有與權(quán)利要求的字面語言沒有不同的相似元件,或者如果它們包括與權(quán)利要求的字面語言具有無實質(zhì)不同的等同元件,則這種其它修改旨在處于權(quán)利要求范圍內(nèi)。
本公開的各種實施方式提供一種用于存儲器嫌疑檢測的方法和系統(tǒng)。存儲器嫌疑是嫌疑有問題的和/或與錯誤相關(guān)的存儲器位置。例如,由于有嫌疑的存儲器分配,系統(tǒng)可面臨存儲器不足的錯誤或者響應時間慢。在應用/服務器/第三方部件等的遷移/更新過程中,可觀察這種問題。在大應用/環(huán)境中,識別這種存儲器是困難且耗時的。本公開的各種實施方式提供系統(tǒng)的方法以監(jiān)控存儲器,并且基于存儲器使用、應用使用情況以及應用環(huán)境的改變生成存儲器趨勢。例如,所公開的系統(tǒng)目標為周期性地監(jiān)控應用的存儲器并且收集來自活躍存儲器的中的存儲器的輸入,由此避免大轉(zhuǎn)儲文件的處理。系統(tǒng)不僅目標為分離有嫌疑的存儲器分配的位置而且也參考應用的使用情況將其關(guān)聯(lián)。系統(tǒng)也被配置為基于存儲器使用、垃圾收集以及相關(guān)應用使用情況生成存儲器趨勢。
在實施方式中,使得系統(tǒng)基于在執(zhí)行各種使用情況時觀察到的存儲器趨勢來監(jiān)控用于存儲器嫌疑的應用以及受到影響的使用情況或商業(yè)事務。在系統(tǒng)執(zhí)行各種使用情況的控制環(huán)境中監(jiān)控應用,并且度量被收集作為用戶觸發(fā)或自動配置的快照??煺湛杀环诸悶槊糠N使用情況并且包含相關(guān)應用環(huán)境以識別使用情況或商業(yè)事務。在從趨勢中識別出的嫌疑被決定之后,系統(tǒng)進一步促進與先前快照的比較和驗證。在本文公開的系統(tǒng)和方法中,只分析存儲器快照而不是完整的堆轉(zhuǎn)儲。相比較完整的堆轉(zhuǎn)儲,存儲器快照的尺寸非常小,并且因此便于分析。此外,系統(tǒng)促進識別碼水平的對象 的根本原因以及應用環(huán)境,其也涉及找到受影響的使用情況或商業(yè)事務。因此,系統(tǒng)在識別存儲器誤差的根本原因時是有效的。
然而,應理解,保護范圍延伸至如下的程序以及其中具有消息的非暫存性計算機可讀裝置;當程序在服務器或移動設(shè)備或任意合適的可編程設(shè)備上運行時,這種計算機可讀存儲裝置包含用于執(zhí)行該方法的一個或多個步驟的程序代碼裝置。硬件設(shè)備可以是可編程的任何類型的設(shè)備,包括例如,如同服務器或個人計算機等或者其任意組合的任意類型的計算機。設(shè)備也可包括可以為例如,硬件裝置(如同例如,專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)或硬件裝置和軟件裝置的組合(例如,ASIC與FPGA、或者至少一個微處理器與具有位于其中的軟件模塊的至少一個存儲器))的裝置。因此,裝置可包括硬件裝置和軟件裝置。本文描述的方法實施方式可在硬件和軟件中實現(xiàn)。設(shè)備也可包括軟件裝置。可選地,實施方式可例如,使用多個CPU在不同硬件識別上實現(xiàn)。
本文中的實施方式可包括硬件和軟件元件。在軟件中實現(xiàn)的實施方式包括但不限于固件、常駐軟件、微代碼等。通過本文描述的各種模塊執(zhí)行的功能可在其他模塊或其他模塊的組合中實現(xiàn)。為了說明的目的,計算機可用或計算機可讀介質(zhì)可以是可包含、存儲、通信、傳播或傳輸用于使用的程序或者與指令執(zhí)行系統(tǒng)、裝置或設(shè)備連接的任意裝置。
具體執(zhí)行方式及實施方式的以上說明將充分揭示本文中的執(zhí)行方式及實施方式的一般實質(zhì),使得在不背離本公開的一般構(gòu)思的情況下,通過應用目前知識,可針對各種應用容易地修改和/或調(diào)整這些具體實施方式,這些修改和調(diào)整應該處于公開的實施方式的等同物的含義和范圍中,而且旨在在公開的實施方式的等同物的含義和范圍中進行理解。應理解,本文采用的措辭或術(shù)語是為了描述的目的,而不是限制目的。盡管已經(jīng)以優(yōu)選實施方式的形式描述了本文的實施方式,然而,本領(lǐng)域技術(shù)人員應當認識到,可在本文描述的實施方式的精神和范圍內(nèi),實踐對本文的實施方式進行修改。
已參考各種實施方式呈現(xiàn)了前述描述。本申請所屬領(lǐng)域和技術(shù)中的普通技術(shù)人員將理解:在不有意偏離原理、精神和范圍的情況下,可實踐描述的操作的結(jié)構(gòu)和方法的修改和改變。
在另一固件和/或軟件執(zhí)行方式中,函數(shù)可存儲為非暫時性計算機可讀介質(zhì)上的一個或多個指令或代碼。實例包括編碼有數(shù)據(jù)結(jié)構(gòu)的計算機可讀介質(zhì)以及編碼有計算機程序的計算機可讀介質(zhì)。計算機可讀介質(zhì)可采取制造商物品的形式。計算機可讀介質(zhì)包括物理計算機存儲介質(zhì)。存儲介質(zhì)可以是可由計算機訪問的任何可用介質(zhì)。例如而非限制性地,這種計算機可讀介質(zhì)可包括可用于以指令或數(shù)據(jù)結(jié)構(gòu)的形式存儲期望的程序代碼并且可由計算機訪問的RAM、ROM、EEPROM、CD-ROM或其他光盤存儲器、磁盤存儲器或其他磁存儲設(shè)備或者任何其他介質(zhì);如本文使用的磁盤和圓盤包括光碟(CD)、激光盤、光盤、數(shù)字通用光盤(DVD)、軟盤以及藍光光盤,其中,圓盤通常磁性再現(xiàn)數(shù)據(jù),同時,圓盤使用激光光學再現(xiàn)數(shù)據(jù)。還應在計算機可讀介質(zhì)的范圍內(nèi)包括以上內(nèi)容的組合。