亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

存儲(chǔ)器分配方法、程序和系統(tǒng)的制作方法

文檔序號(hào):6496432閱讀:314來(lái)源:國(guó)知局
存儲(chǔ)器分配方法、程序和系統(tǒng)的制作方法
【專利摘要】[問(wèn)題]為了減少創(chuàng)建供Java(R)處理器等使用諸如JNI的預(yù)定義接口訪問(wèn)堆外的緩沖區(qū)的開(kāi)銷。[解決手段]在本發(fā)明中,事先創(chuàng)建被特別稱作幻影字節(jié)緩沖區(qū)的一個(gè)或多個(gè)字節(jié)緩沖區(qū)。該幻影字節(jié)緩沖區(qū)在規(guī)范范圍內(nèi)具有盡可能大的大小。設(shè)置該幻影字節(jié)緩沖區(qū)的地址和大小從而覆蓋存儲(chǔ)器塊地址在堆外中的假設(shè)范圍。當(dāng)從系統(tǒng)接收到用于利用對(duì)地址和大小的指派來(lái)創(chuàng)建字節(jié)緩沖區(qū)的請(qǐng)求時(shí),已經(jīng)準(zhǔn)備好幻影字節(jié)緩沖區(qū)的程序能夠僅通過(guò)使用具有相對(duì)低開(kāi)銷的字節(jié)緩沖區(qū)的方法利用所請(qǐng)求的地址和大小對(duì)某個(gè)幻影字節(jié)緩沖區(qū)進(jìn)行切分來(lái)創(chuàng)建所請(qǐng)求的字節(jié)緩沖區(qū)。
【專利說(shuō)明】存儲(chǔ)器分配方法、程序和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計(jì)算機(jī)存儲(chǔ)器分配技術(shù),并且更具體地涉及一種用于Java (R)處理器等的用于在由另一處理器所管理的存儲(chǔ)器區(qū)域中執(zhí)行存儲(chǔ)器分配的技術(shù)。
【背景技術(shù)】
[0002]借助于諸如多平臺(tái)兼容性之類的有利優(yōu)勢(shì),Java (R)目前已經(jīng)被作為用于構(gòu)建系統(tǒng)的處理器來(lái)使用。
[0003]與此同時(shí),大規(guī)模分布式處理系統(tǒng)近年來(lái)已經(jīng)采用了鍵值存儲(chǔ)(KVS)技術(shù)。在KVS技術(shù)中,許多鍵值組合使用散列(散列表)而被存儲(chǔ)為相關(guān)聯(lián)的陣列。圖1示出了以常規(guī)方式利用Java (R)所實(shí)施的這樣的數(shù)據(jù)結(jié)構(gòu)。在該結(jié)構(gòu)中,KVS中所保存的值被存儲(chǔ)為散列表(HashMap) 104,其在實(shí)施KVS的服務(wù)器系統(tǒng)的Java (R)堆102中包含了多個(gè)條目。
[0004]當(dāng)接收到來(lái)自客戶端系統(tǒng)的請(qǐng)求時(shí),該服務(wù)器系統(tǒng)在堆102中構(gòu)建字節(jié)緩沖區(qū)(ByteBuffer)對(duì)象106。出于該原因,散列表104中所存儲(chǔ)的每條數(shù)據(jù)的類型是字節(jié)緩沖區(qū)自身,或者作為字節(jié)緩沖區(qū)對(duì)象的實(shí)際數(shù)據(jù)的字節(jié)陣列(byte []),如圖1所示。
[0005]然而,以這種方式在堆102上定位許多對(duì)象會(huì)減少堆中的空間并且導(dǎo)致頻繁的垃圾收集。由于垃圾收集的開(kāi)銷連同堆中的對(duì)象數(shù)量的增加而一起增加,所以運(yùn)行KVS的JVM中的垃圾收集開(kāi)銷不可避免地變得很高。
[0006]作為針對(duì)該問(wèn)題的解決方案,一種有效的方法是使用如圖2所示的機(jī)制,其中對(duì)象實(shí)體位于Java (R)控制以外的存儲(chǔ)器區(qū)域上(堆外(off heap) 202),并且包含指向條目的錨點(diǎn)(anchor)的指針的堆外表204位于堆102上。在該機(jī)制中,在服務(wù)器系統(tǒng)從客戶端系統(tǒng)接收請(qǐng)求時(shí)所創(chuàng)建的字節(jié)緩沖區(qū)206的對(duì)象實(shí)體也位于堆外202上。通過(guò)如此將對(duì)象實(shí)體定位于堆外202上,能夠減少堆102中的存儲(chǔ)器消耗和對(duì)象數(shù)量,并且還能夠減少垃圾收集的開(kāi)銷。
[0007]Java (R)使用被稱作Java (R)本地接口(JNI)的機(jī)制而利用標(biāo)準(zhǔn)API來(lái)處理堆外202中的對(duì)象。對(duì)于有關(guān)JNI的細(xì)節(jié),例如參見(jiàn)Rob Gordon的“Essential JN1: JavaNative Interface”,1998, Prentice Hall。
[0008]為了更為具體,調(diào)用JNIEnv_>NewDirectByteBuffer(address, size)來(lái)創(chuàng)建指向堆外202中之前所分配的存儲(chǔ)器塊302的字節(jié)緩沖區(qū)。這里,address是存儲(chǔ)器塊在堆外中的絕對(duì)地址,而size是存儲(chǔ)器塊的大小。針對(duì)有關(guān)Java (R)的字節(jié)緩沖區(qū)的細(xì)節(jié),例如參見(jiàn) Ron Hitchens 的 “Java Nio”,2002, O,Reilly。
[0009]雖然有可能通過(guò)調(diào)用JNIEnv_>NewDirectByteBuffer(address, size)創(chuàng)建指向在堆外202之前所分配的地址的存儲(chǔ)器塊302的字節(jié)緩沖區(qū),但是所存在的問(wèn)題在于該創(chuàng)建處理的開(kāi)銷實(shí)際上非常高。
[0010]更具體地講,JNIEnv->NewDirectByteBuffer(address, size)包括以下步驟:
[0011]1.Java (R)利用Java (R)所要求的地址和大小調(diào)用JNI庫(kù)處理器。
[0012]2.JNI 庫(kù)的(C, C++)處理器執(zhí)行 JNIEnv_>NewDirectByteBuffer (address, size)。[0013]3.JNI庫(kù)處理器調(diào)用Java (R)處理器,該Java (R)處理器構(gòu)建并初始化一些Java(R)對(duì)象以便創(chuàng)建字節(jié)緩沖區(qū)。
[0014]4.Java (R)處理器將所創(chuàng)建的字節(jié)緩沖區(qū)返回至JNI庫(kù)處理器。
[0015]5.JNI庫(kù)處理器將所返回的ByteB返回至Java (R)處理器。
[0016]6.Java (R)處理器使用可用的字節(jié)緩沖區(qū)。
[0017]由于這些步驟的每一個(gè)都具有高開(kāi)銷,所以整體開(kāi)銷極高。
[0018]在常規(guī)系統(tǒng)中,服務(wù)器系統(tǒng)每次接收到來(lái)自客戶端系統(tǒng)的請(qǐng)求并且需要?jiǎng)?chuàng)建字節(jié)緩沖區(qū)時(shí),都必須要執(zhí)行例如以上所提到的高開(kāi)銷的處理JNIEnv->NewDirectByteBuffer (address, size)。這導(dǎo)致了整體性能劣化的問(wèn)題。
[0019][引用列表]
[0020][非專利文獻(xiàn)]
[0021][非專利文獻(xiàn)]I:Rob Gordon, “Essential JN1: Java Native Interface,,,1998,PrenticeHall
[0022][非專利文獻(xiàn)]2:RonHitchens, “Java Nio”,2002,0,Reilly
【發(fā)明內(nèi)容】

[0023][技術(shù)問(wèn)題]
[0024]本發(fā)明的目標(biāo)是減少創(chuàng)建供Java (R)處理器等使用諸如JNI的預(yù)定義接口訪問(wèn)堆外的緩沖區(qū)的開(kāi)銷。
[0025][針對(duì)問(wèn)題的解決方案]
[0026]根據(jù)本發(fā)明,以上問(wèn)題能夠通過(guò)事先在規(guī)范的范圍內(nèi)創(chuàng)建一個(gè)或多個(gè)大小盡可能大的字節(jié)緩沖區(qū)來(lái)解決,其在本發(fā)明中被特別地稱作幻影字節(jié)緩沖區(qū)。
[0027]在優(yōu)選實(shí)施例中,JNIEnv_>NewDirectByteBuffer(address, size)被類似地調(diào)用以創(chuàng)建幻影字節(jié)緩沖區(qū),并且該處理自身需要以上所提到的開(kāi)銷。此時(shí),幻影字節(jié)緩沖區(qū)的地址和大小所指定的范圍得以被設(shè)置以便覆蓋存儲(chǔ)器塊地址在堆外中的假設(shè)范圍。然而要注意的是,Java (R) nio的預(yù)定義規(guī)范將字節(jié)緩沖區(qū)的大小限制為2GB,并且因此單個(gè)字節(jié)緩沖區(qū)可能不足以覆蓋存儲(chǔ)器塊地址在堆外中的假設(shè)范圍。
[0028]出于這一原因,優(yōu)選地,創(chuàng)建不同地址的多個(gè)幻影字節(jié)緩沖區(qū)以便廣泛地覆蓋存儲(chǔ)器塊地址在堆外中的假設(shè)范圍。
[0029]在以上所提到的確保多個(gè)幻影字節(jié)緩沖區(qū)以便廣泛覆蓋存儲(chǔ)器塊地址在堆外中的假設(shè)范圍的情況下,在接收到來(lái)自系統(tǒng)的用于創(chuàng)建具有地址和大小的字節(jié)緩沖區(qū)的請(qǐng)求時(shí),已經(jīng)準(zhǔn)備了幻影字節(jié)緩沖區(qū)的程序就找出包括該地址和大小所指定的范圍的幻影字節(jié)緩沖區(qū),并且調(diào)用作為字節(jié)緩沖區(qū)的方法的positionO、IimitO和sliceO。換句話說(shuō),所要求地址和大小的字節(jié)緩沖區(qū)通過(guò)以下而被截取:利用所請(qǐng)求地址作為變?cè){(diào)用positionO ;利用所請(qǐng)求大小作為變?cè){(diào)用IimitO ;并且調(diào)用sliceO。因此被截取的字節(jié)緩沖區(qū)可以被用作所指定存儲(chǔ)器塊在堆外中的緩沖區(qū)。當(dāng)接收到來(lái)自系統(tǒng)的用于使用地址和大小所指定的范圍創(chuàng)建字節(jié)緩沖區(qū)的另一個(gè)請(qǐng)求時(shí),就重復(fù)相同的處理。
[0030]也就是說(shuō),一旦創(chuàng)建了幻影字節(jié)緩沖區(qū),就能夠僅通過(guò)利用相對(duì)小的開(kāi)銷使用字節(jié)緩沖區(qū)的方法切分幻影字節(jié)緩沖區(qū)來(lái)創(chuàng)建系統(tǒng)后續(xù)所請(qǐng)求的字節(jié)緩沖區(qū)。[0031]注意到,如果沒(méi)有包括系統(tǒng)所請(qǐng)求的地址和大小所指定范圍的幻影字節(jié)緩沖區(qū),則需要利用預(yù)定開(kāi)銷創(chuàng)建包括該地址和大小所指定范圍的幻影字節(jié)緩沖區(qū)。然而,這樣的處理幾乎是不必要的并且在之前根據(jù)謹(jǐn)慎預(yù)測(cè)而創(chuàng)建了幻影字節(jié)緩沖區(qū)的情況下很少出現(xiàn)。
[0032]此外,如果準(zhǔn)備了大量的幻影字節(jié)緩沖區(qū),則為了創(chuàng)建每個(gè)字節(jié)緩沖區(qū)可能需要很高開(kāi)銷來(lái)識(shí)別包括所指定范圍的幻影字節(jié)緩沖區(qū)。然而,這樣的開(kāi)銷可以通過(guò)刪除經(jīng)常并不包括所請(qǐng)求地址和大小所指定范圍的具體幻影字節(jié)緩沖區(qū)而有所降低。
[0033][發(fā)明的有利效果]
[0034]根據(jù)本發(fā)明,有可能減少創(chuàng)建供Java (R)處理器等使用諸如JNI的預(yù)定義接口訪問(wèn)堆外的緩沖區(qū)的開(kāi)銷。由于僅通過(guò)切開(kāi)之前所創(chuàng)建的幻影字節(jié)緩沖區(qū)的一部分而響應(yīng)于請(qǐng)求來(lái)創(chuàng)建緩沖區(qū),該開(kāi)銷得以被降低。
【專利附圖】

【附圖說(shuō)明】
[0035]圖1是示出堆圖的一個(gè)示例的示圖。
[0036]圖2是示出堆外圖的一個(gè)示例的示圖。
[0037]圖3是示出堆中的字節(jié)緩沖區(qū)和堆外中的存儲(chǔ)器塊之間的對(duì)應(yīng)性的示圖。
[0038]圖4是示出用于執(zhí)行本發(fā)明的硬件示例的框圖。
[0039]圖5是示出硬件配置層的示圖。
[0040]圖6是示出本發(fā)明的處理的流程圖的示圖。
[0041]圖7是示出本發(fā)明的處理的另一個(gè)流程圖的示圖。
[0042]圖8是示出堆中的幻影字節(jié)緩沖區(qū)和堆外中的存儲(chǔ)器塊之間的對(duì)應(yīng)性的示圖?!揪唧w實(shí)施方式】
[0043]隨后,將參考附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。應(yīng)當(dāng)注意的是,實(shí)施例的目的在于描述本發(fā)明的優(yōu)選方法,而并非意在對(duì)本發(fā)明的范圍加以限制。此外,在以下附圖中,如果沒(méi)有另外指出,則相同的標(biāo)號(hào)指示相同的對(duì)象。
[0044]圖4示出了用于實(shí)施本發(fā)明實(shí)施例的系統(tǒng)配置和處理的計(jì)算機(jī)硬件的框圖。在圖4中,連接至系統(tǒng)總線402的有:CPU404、主存儲(chǔ)器(RAM) 406、硬盤(pán)驅(qū)動(dòng)器(HDD) 408、鍵盤(pán)410、鼠標(biāo)412和顯示器414。CPU404優(yōu)選地基于32位或64位架構(gòu),并且例如可以使用Intel 公司的 Pentium (商標(biāo))、Intel 公司的 Core (商標(biāo))2Duo、AMD 的 Athlon (商標(biāo))等。主存儲(chǔ)器406的容量?jī)?yōu)選地不小于4GB,或者更為優(yōu)選地不小于8GB。
[0045]操作系統(tǒng)被存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器408中。只要其與CPU404相兼容,就可以使用任意的操作系統(tǒng),諸如Linux (商標(biāo))、Microsoft公司的Windows (商標(biāo))7、Windows (商標(biāo))XP、Windows (商標(biāo))2003server 以及 Apple 公司的 Mac OS (商標(biāo))。
[0046]諸如Apache的使得系統(tǒng)作為web服務(wù)器進(jìn)行操作的程序也存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器408中,并且在系統(tǒng)啟動(dòng)時(shí)被加載到主存儲(chǔ)器406中。
[0047]用于實(shí)施Java (R)虛擬機(jī)(VM)的Java (R)運(yùn)行時(shí)環(huán)境程序也保存在硬盤(pán)驅(qū)動(dòng)器408中,并且在系統(tǒng)啟動(dòng)時(shí)被加載到主存儲(chǔ)器406中。
[0048]硬盤(pán)驅(qū)動(dòng)器408還可以包括JIT編譯器,其將字節(jié)碼應(yīng)用程序轉(zhuǎn)換為操作系統(tǒng)的本地代碼并且運(yùn)行該程序。
[0049]硬盤(pán)驅(qū)動(dòng)器408還在其中存儲(chǔ)要被JNI所調(diào)用的庫(kù),其優(yōu)選地為以C或C++進(jìn)行編寫(xiě)并編譯的二進(jìn)制程序。
[0050]鍵盤(pán)410和鼠標(biāo)412被用來(lái)依據(jù)操作系統(tǒng)所提供的圖形用戶界面而對(duì)在顯示器414上顯示的諸如圖標(biāo)、任務(wù)欄、文本框等的圖形對(duì)象進(jìn)行操作。
[0051]雖然并不局限于此,但是顯示器414優(yōu)選地為具有不低于1024X768分辨率的32位真彩色LCD監(jiān)視器。例如,顯示器414被用來(lái)顯示實(shí)施本發(fā)明的程序的啟動(dòng)畫(huà)面。
[0052]通信接口 416優(yōu)選地利用以太網(wǎng)(R)協(xié)議連接至網(wǎng)絡(luò)。通過(guò)使用Apache所提供的功能,通信接口 416根據(jù)諸如TCP/IP之類的通信協(xié)議從客戶端計(jì)算機(jī)(未示出)接收處理請(qǐng)求,或者將處理結(jié)果返回至客戶端計(jì)算機(jī)(未示出)。
[0053]圖5是示出程序或進(jìn)程的層次的示圖。操作系統(tǒng)(OS) 502在圖4所示的硬件上運(yùn)行。Java (R)虛擬機(jī)(1]\0 504在03502上運(yùn)行,并且應(yīng)用程序506在1]\1504上運(yùn)行。應(yīng)用程序506的源代碼利用javac等進(jìn)行編譯并且以字節(jié)碼的形式保存在硬盤(pán)驅(qū)動(dòng)器408中。JVM504包括JNI接口及其庫(kù),并且本發(fā)明的應(yīng)用程序506使用JNI接口。
[0054]接下來(lái),將參考圖6和7所示的流程圖對(duì)應(yīng)用程序506所執(zhí)行的處理進(jìn)行描述。
[0055]圖6中的流程圖優(yōu)選地涉及由應(yīng)用程序506在其啟動(dòng)時(shí)所執(zhí)行的處理。在步驟602,應(yīng)用程序506創(chuàng)建一個(gè)或多個(gè)幻影(phantom)字節(jié)緩沖區(qū)。特別是在本發(fā)明中,幻影字節(jié)緩沖區(qū)將被稱作指向可能包括并不允許JVM對(duì)其進(jìn)行訪問(wèn)的區(qū)域的存儲(chǔ)器空間的字節(jié)緩沖區(qū)。這里,address被選擇以便覆蓋對(duì)堆外中的存儲(chǔ)器中的存儲(chǔ)器塊所分配的地址范圍。size優(yōu)選地被設(shè)置為2GB,這是能夠在java.nio的規(guī)范的范圍內(nèi)所能夠設(shè)置的最大值。用于創(chuàng)建幻影字節(jié)緩沖區(qū)的處理與隨后所描述的圖7中所示流程圖中的步驟712至720中所示的相同。
[0056]要被單個(gè)幻影字節(jié)緩沖區(qū)所指向的堆外存儲(chǔ)器的范圍被限制為2GB。因此,如果應(yīng)用程序506的堆外存儲(chǔ)器的假設(shè)范圍超過(guò)2GB,則單個(gè)幻影字節(jié)緩沖區(qū)并不足以覆蓋應(yīng)用程序506的堆外存儲(chǔ)器的假設(shè)范圍。在這種情況下,創(chuàng)建不同地址的多個(gè)幻影字節(jié)緩沖區(qū)以便盡可能多地覆蓋應(yīng)用程序506的堆外存儲(chǔ)器的整個(gè)假設(shè)范圍。
[0057]在步驟604,應(yīng)用程序506優(yōu)選地將所創(chuàng)建的幻影字節(jié)緩沖區(qū)的地址和大小的值注冊(cè)到堆中的預(yù)定分區(qū)作為諸如散列表的表數(shù)據(jù)。
[0058]圖7中的流程圖涉及應(yīng)用程序506的用于響應(yīng)于來(lái)自系統(tǒng)的請(qǐng)求而創(chuàng)建字節(jié)緩沖區(qū)的處理。
[0059]步驟702在應(yīng)用程序506從系統(tǒng)接收到用于創(chuàng)建具體地址和大小的字節(jié)緩沖區(qū)的請(qǐng)求時(shí)被發(fā)起。
[0060]隨后,在步驟704,應(yīng)用程序506訪問(wèn)圖6的步驟604中所注冊(cè)的信息,并且搜索包括所指定地址和大小所指示范圍的幻影字節(jié)緩沖區(qū)。
[0061]在步驟706,應(yīng)用程序506確定是否找到了滿足步驟704中所指定條件的幻影字節(jié)緩沖區(qū),并且如果是,則根據(jù)所指定的地址和大小對(duì)找出的幻影字節(jié)緩沖區(qū)進(jìn)行劃分。字節(jié)緩沖區(qū)的positionO、limit()和sliceO方法被用于這一操作。更具體地,所要求地址和大小的字節(jié)緩沖區(qū)通過(guò)以下而被截取:利用所請(qǐng)求地址作為變?cè){(diào)用positionO ;利用所請(qǐng)求大小作為變?cè){(diào)用IimitO ;并且調(diào)用sliceO。因此在步驟710中,被截取的字節(jié)緩沖區(qū)能夠被用作所指定存儲(chǔ)器塊在堆外中的緩沖區(qū)。由此,用于創(chuàng)建字節(jié)緩沖區(qū)的處理終止。
[0062]返回步驟706,如果沒(méi)有找到滿足步驟704中所指定條件的幻影字節(jié)緩沖區(qū),則應(yīng)用程序506創(chuàng)建自所指定地址開(kāi)始的范圍的幻影字節(jié)緩沖區(qū)。更確切地講,在該處理中,應(yīng)用程序506在步驟712從Java (R)調(diào)用JNI。
[0063]隨后在步驟714,應(yīng)用程序506利用所指定的地址和最大大小(2GB)調(diào)用JNIEnv->NewDirect 字節(jié)緩沖區(qū)(address, size)。
[0064]接下來(lái),在步驟716,應(yīng)用程序506構(gòu)建用于創(chuàng)建字節(jié)緩沖區(qū)的一些對(duì)象。
[0065]在步驟718,所創(chuàng)建的字節(jié)緩沖區(qū)被返回至Java (R)0
[0066]隨后在步驟720,應(yīng)用程序506將所創(chuàng)建的字節(jié)緩沖區(qū)注冊(cè)為幻影字節(jié)緩沖區(qū)。
[0067]由此,該處理返回至步驟704。隨后,由于新登記了幻影字節(jié)緩沖區(qū),所以在步驟704中找到了相對(duì)應(yīng)的幻影字節(jié)緩沖區(qū),步驟706中的確定變?yōu)榭隙?,并且在步驟708中通過(guò)以以上所提到的方式進(jìn)行切分而創(chuàng)建字節(jié)緩沖區(qū)。
[0068]當(dāng)在步驟706中確定了沒(méi)有找到具有高開(kāi)銷的幻影字節(jié)緩沖區(qū)時(shí)執(zhí)行步驟712至720。然而,在大多數(shù)情況下,如果幻影字節(jié)緩沖區(qū)被準(zhǔn)備好從而覆蓋先前假設(shè)范圍的存儲(chǔ)器地址,則相對(duì)應(yīng)的幻影字節(jié)緩沖區(qū)都被找到。因此,步驟706中的確定變?yōu)榭隙ú⑶以撨^(guò)程前進(jìn)至步驟708,使得開(kāi)銷問(wèn)題幾乎不會(huì)出現(xiàn)。
[0069]圖8是示出如何切分幻影字節(jié)緩沖區(qū)并且從其截取實(shí)際字節(jié)緩沖區(qū)的示意性表示形式的示圖。在圖8中,在圖6的步驟602中事先創(chuàng)建了幻影字節(jié)緩沖區(qū)802。
[0070]隨后,如圖7的步驟702所示,在從系統(tǒng)接收到用于創(chuàng)建字節(jié)緩沖區(qū)的請(qǐng)求時(shí),通過(guò)在步驟708中對(duì)幻影字節(jié)緩沖區(qū)進(jìn)行切分來(lái)創(chuàng)建實(shí)際(即,不同于幻影)字節(jié)緩沖區(qū)804,并且該實(shí)際字節(jié)緩沖區(qū)804指向堆外中的存儲(chǔ)器塊808。
[0071]隨后,當(dāng)從系統(tǒng)接收到另一個(gè)字節(jié)緩沖區(qū)創(chuàng)建請(qǐng)求時(shí),通過(guò)在步驟708中對(duì)幻影字節(jié)緩沖區(qū)進(jìn)行切分而創(chuàng)建實(shí)際字節(jié)緩沖區(qū)806,并且該實(shí)際字節(jié)緩沖區(qū)806指向堆外中的存儲(chǔ)器塊810。
[0072]如已經(jīng)描述的,一旦以開(kāi)銷為代價(jià)創(chuàng)建了幻影字節(jié)緩沖區(qū),則隨后就能夠僅通過(guò)對(duì)該幻影字節(jié)緩沖區(qū)進(jìn)行切分而創(chuàng)建任意數(shù)量的所期望的實(shí)際字節(jié)緩沖區(qū)。切分字節(jié)緩沖區(qū)的處理在Java (R)內(nèi)完成,這不同于JNI而具有相對(duì)低的開(kāi)銷。
[0073]上文中已經(jīng)以利用JNI創(chuàng)建從Java (R)指向堆外中的存儲(chǔ)器塊的緩沖區(qū)的示例對(duì)本發(fā)明的實(shí)施例進(jìn)行了描述。然而,應(yīng)當(dāng)注意的是,只要處理器包括用于另一系統(tǒng)的本地接口,本發(fā)明就并不局限于具體的硬件和操作系統(tǒng)、處理器或應(yīng)用程序。
[0074][附圖標(biāo)記列表]
[0075]404CPU,406主存儲(chǔ)器,408硬盤(pán)驅(qū)動(dòng)器,5020S,504JVM,506應(yīng)用程序,802幻影字節(jié)緩沖區(qū),804實(shí)際字節(jié)緩沖區(qū),806實(shí)際字節(jié)緩沖區(qū)。
【權(quán)利要求】
1.一種用于在語(yǔ)言處理器上運(yùn)行程序的系統(tǒng)的方法,所述語(yǔ)言處理器包括用于訪問(wèn)由絕對(duì)地址所指定的存儲(chǔ)器空間的緩沖區(qū)的特殊類,并且具有通過(guò)切開(kāi)由所述類所指定的所述存儲(chǔ)器空間的一部分而創(chuàng)建所述類的功能,所述方法由計(jì)算機(jī)所實(shí)施以創(chuàng)建用于訪問(wèn)所指定存儲(chǔ)器空間的所述類的緩沖區(qū),所述方法包括如下步驟: 由所述計(jì)算機(jī)創(chuàng)建所述類的緩沖區(qū),所述緩沖區(qū)是可以包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空間的緩沖區(qū);以及 響應(yīng)于指派了允許訪問(wèn)的存儲(chǔ)器空間和大小,由所述計(jì)算機(jī)切開(kāi)創(chuàng)建的所述類的所述緩沖區(qū)的一部分,以在所述允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的可訪問(wèn)緩沖區(qū)。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括如下步驟:在可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的區(qū)域的存儲(chǔ)器空間中創(chuàng)建所述類的多個(gè)緩沖區(qū),并且記錄所述類的所述緩沖區(qū)中每一個(gè)的地址和大小。
3.根據(jù)權(quán)利要求2所述的方法,其中在允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的所述可訪問(wèn)緩沖區(qū)的所述步驟包括:搜索創(chuàng)建的所述類的其地址被記錄的多個(gè)緩沖區(qū),以找到包括由指派的地址和大小所指示范圍的特定緩沖區(qū),并且切分找到的所述緩沖區(qū)。
4.根據(jù)權(quán)利要求3所述的方法,其中當(dāng)對(duì)找到并切分所述類的包括所述地址的所述特定緩沖區(qū)的處理無(wú)法找到所述類的包括所述地址的所述特定緩沖區(qū)時(shí),所述處理進(jìn)一步包括用于創(chuàng)建所述類的附加緩沖區(qū)的處理,所述附加緩沖區(qū)包括存儲(chǔ)器空間中不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的地址。
5.根據(jù)權(quán)利要求1所述的方法,其中在創(chuàng)建所述類的可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空 間的所述緩沖區(qū)的所述步驟中,以最大的可允許大小來(lái)創(chuàng)建所述緩沖區(qū)。
6.根據(jù)權(quán)利要求1所述的方法,其中所述語(yǔ)言處理器是Java(R),所述緩沖區(qū)的類是字節(jié)緩沖區(qū),用于創(chuàng)建所述類的緩沖區(qū)的所述處理通過(guò)調(diào)用JNI接口來(lái)執(zhí)行,并且通過(guò)以下來(lái)執(zhí)行用于切開(kāi)所述類的所述緩沖區(qū)的所述處理:利用PositionO指派起始點(diǎn),利用IimitO指派大小并且隨后調(diào)用sliceO方法。
7.一種用于在語(yǔ)言處理器上運(yùn)行程序的系統(tǒng)的程序,所述語(yǔ)言處理器包括用于訪問(wèn)由絕對(duì)地址所指定的存儲(chǔ)器空間的緩沖區(qū)的特殊類,并且具有通過(guò)切開(kāi)由所述類所指定的所述存儲(chǔ)器空間的一部分而創(chuàng)建所述類的功能,所述程序由計(jì)算機(jī)所實(shí)施以創(chuàng)建用于訪問(wèn)所指定存儲(chǔ)器空間的所述類的緩沖區(qū),所述程序使計(jì)算機(jī)執(zhí)行如下步驟: 創(chuàng)建所述類的緩沖區(qū),所述緩沖區(qū)是可以包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空間的緩沖區(qū);以及 響應(yīng)于指派了允許訪問(wèn)的存儲(chǔ)器空間和大小,切開(kāi)所創(chuàng)建的所述類的所述緩沖區(qū)的一部分,以在所述允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的可訪問(wèn)緩沖區(qū)。
8.根據(jù)權(quán)利要求7所述的程序,進(jìn)一步包括如下步驟:在可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的區(qū)域的存儲(chǔ)器空間中創(chuàng)建所述類的多個(gè)緩沖區(qū),并且記錄所述類的所述緩沖區(qū)中每一個(gè)的地址和大小。
9.根據(jù)權(quán)利要求8所述的程序,其中在允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的所述可訪問(wèn)緩沖區(qū)的所述步驟包括:搜索創(chuàng)建的所述類的其地址被記錄的多個(gè)緩沖區(qū),以找到包括由指派的地址和大小所指示范圍的特定緩沖區(qū),并且切分找到的所述緩沖區(qū)。
10.根據(jù)權(quán)利要求9所述的程序,其中當(dāng)對(duì)找到并切分所述類的包括所述地址的所述特定緩沖區(qū)的處理無(wú)法找到所述類的包括所述地址的所述特定緩沖區(qū)時(shí),所述處理進(jìn)一步包括用于創(chuàng)建所述類的附加緩沖區(qū)的處理,所述附加緩沖區(qū)包括存儲(chǔ)器空間中不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的地址。
11.根據(jù)權(quán)利要求7所述的程序,其中在創(chuàng)建所述類的可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空間的所述緩沖區(qū)的所述步驟中,以最大的可允許大小來(lái)創(chuàng)建所述緩沖區(qū)。
12.根據(jù)權(quán)利要求7所述的程序,其中所述語(yǔ)言處理器是Java(R),所述緩沖區(qū)的類是字節(jié)緩沖區(qū),用于創(chuàng)建所述類的緩沖區(qū)的所述處理通過(guò)調(diào)用JNI接口來(lái)執(zhí)行,并且通過(guò)以下來(lái)執(zhí)行用于切開(kāi)所述類的所述緩沖區(qū)的所述處理:利用PositionO指派起始點(diǎn),利用IimitO指派大小并且隨后調(diào)用sliceO方法。
13.—種在語(yǔ)言處理器上運(yùn)行程序的系統(tǒng),所述語(yǔ)言處理器包括用于訪問(wèn)由絕對(duì)地址所指定的存儲(chǔ)器空間的緩沖區(qū)的特殊類,并且具有通過(guò)切開(kāi)由所述類所指定的存儲(chǔ)器空間的一部分而創(chuàng)建所述類的功能,所述系統(tǒng)包括: 用于創(chuàng)建所述類的緩沖區(qū)的裝置,所述緩沖區(qū)是可以包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空間的緩沖區(qū);以及 用于響應(yīng)于指派了允許訪問(wèn)的存儲(chǔ)器空間和大小,由所述計(jì)算機(jī)切開(kāi)所創(chuàng)建的所述類的所述緩沖區(qū)的一部分以在所述允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的可訪問(wèn)緩沖區(qū)的>J-U ρ?α裝直。
14.根據(jù)權(quán)利要求13`所述的系統(tǒng),進(jìn)一步包括如下裝置:在可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的區(qū)域的存儲(chǔ)器空間中創(chuàng)建所述類的多個(gè)緩沖區(qū),并且記錄所述類的所述緩沖區(qū)中每一個(gè)的地址和大小的裝置。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其中在允許訪問(wèn)的存儲(chǔ)器空間中創(chuàng)建所述類的所述可訪問(wèn)緩沖區(qū)的所述裝置執(zhí)行如下處理:搜索創(chuàng)建的所述類的其地址被記錄的多個(gè)緩沖區(qū),以找到包括由指派的地址和大小所指示范圍的特定緩沖區(qū),并且切分找到的所述緩沖區(qū)。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中當(dāng)對(duì)找到并切分所述類的包括所述地址的所述特定緩沖區(qū)的處理無(wú)法找到所述類的包括所述地址的所述特定緩沖區(qū)時(shí),所述處理進(jìn)一步包括用于創(chuàng)建所述類的附加緩沖區(qū)的處理,所述附加緩沖區(qū)包括存儲(chǔ)器空間中不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的地址。
17.根據(jù)權(quán)利要求13所述的系統(tǒng),其中在創(chuàng)建所述類的可能包括不允許所述語(yǔ)言處理器進(jìn)行訪問(wèn)的存儲(chǔ)器空間的所述緩沖區(qū)的所述步驟中,以最大的可允許大小來(lái)創(chuàng)建所述緩沖區(qū)。
18.根據(jù)權(quán)利要求13所述的系統(tǒng),其中所述語(yǔ)言處理器是Java(R),所述緩沖區(qū)的類是字節(jié)緩沖區(qū),用于創(chuàng)建所述類的緩沖區(qū)的所述處理通過(guò)調(diào)用JNI接口來(lái)執(zhí)行,并且通過(guò)以下來(lái)執(zhí)行用于切開(kāi)所述類的所述緩沖區(qū)的所述處理:利用PositionO指派起始點(diǎn),利用IimitQ指派大小并且隨后調(diào)用sliceO方法。
【文檔編號(hào)】G06F9/44GK103782273SQ201280043905
【公開(kāi)日】2014年5月7日 申請(qǐng)日期:2012年7月6日 優(yōu)先權(quán)日:2011年9月9日
【發(fā)明者】堀井洋, T·R·吉塞爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1