JP5588072B2 - メモリ割り当て方法、プログラム、及びシステム - Google Patents

メモリ割り当て方法、プログラム、及びシステム Download PDF

Info

Publication number
JP5588072B2
JP5588072B2 JP2013532484A JP2013532484A JP5588072B2 JP 5588072 B2 JP5588072 B2 JP 5588072B2 JP 2013532484 A JP2013532484 A JP 2013532484A JP 2013532484 A JP2013532484 A JP 2013532484A JP 5588072 B2 JP5588072 B2 JP 5588072B2
Authority
JP
Japan
Prior art keywords
class
buffer
memory space
generating
permitted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2013532484A
Other languages
English (en)
Other versions
JPWO2013035420A1 (ja
Inventor
洋 堀井
トマス・アール・ギッセル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2013532484A priority Critical patent/JP5588072B2/ja
Application granted granted Critical
Publication of JP5588072B2 publication Critical patent/JP5588072B2/ja
Publication of JPWO2013035420A1 publication Critical patent/JPWO2013035420A1/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

この発明は、コンピュータにおけるメモリ割り当て技法に関し、より詳しくは、Java(R)などの処理系から、他の処理系によって管理するメモリ領域に対するメモリ割り当てを行う技法に関するものである。
従来より、様々なプラットフォームに対する適合性などの理由で、Java(R)がシステム構築のための処理系として使用されている。
一方で近年、大規模な分散処理システムで、キー・バリュー・ストア(KVS)技術が採用されてきている。KVS技術は、キーとバリューの組み合わせをハッシュを用いた連想配列(ハッシュ・マップ、HashMap)として多数保存する。このようなデータ構造をJava(R)で普通に実装すると、図1に示すように、KVSに保存された値が、複数のエントリ(Entry)をもつHashMap104として、KVSを実装するサーバ・システムのJava(R)のヒープ102に格納される。
また、サーバ・システムがクライアント・システムからリクエストを受け取ると、ByteBufferオブジェクト106がヒープ102に生成される。そのため、各HashMapに格納されるデータの型は、図1で示されるようなByteBufferオブジェクトの実データであるバイト配列(byte[])、もしくは、ByteBufferそのものとなる。
しかし、このようにヒープ102上に多くのオブジェクトを配置すると、ヒープの空きが少なくなって、ガベージ・コレクションが頻繁に生じてしまう。ヒープ上のオブジェクトの数が増加すると、ガベージ・コレクションのオーバーヘッドも増加するため、必然的に、KVSを稼動するJVMでのガベージ・コレクションのオーバーヘッドは高くなる。
この問題の解決策として、図2に示すように、オブジェクトの実体は、Java(R)の管理外のメモリ領域(オフ・ヒープ202)上に置き、これらに対するアンカーのポインタとしてのオフ・ヒープ・マップ(OffHeapMap)204をヒープ102上に配置する仕組みが採る方法が有効である。この仕組みでは、サーバ・システムがクライアント・システムからリクエストを受け取るとき生成されるByteBuffer206の実体オブジェクトも、オフ・ヒープ202上に配置される。このようにオブジェクトの実体をオフ・ヒープ202上に置くことによって、ヒープ102のメモリ消費量、オブジェクト数を低下させることができ、ガベージ・コレクションのオーバーヘッドも低くすることが可能である。
Java(R)が、オフ・ヒープ202上にあるオブジェクトを標準APIを用いて取り扱うには、JNI(Java(R) Native Interface)という仕組みが使用される。JNIについては例えば、Rob Gordon, "Essential JNI: Java Native Interface", 1998, Prentice Hallなどを参照されたい。
さて、より具体的に、オフ・ヒープ202にある、予め割り当てられたメモリ・ブロック302を指し示すByteBufferを生成するには、JNIEnv->NewDirectByteBuffer(address,size)を呼び出す。ここで、addressは、オフ・ヒープ上のメモリ・ブロックの絶対アドレスであり、sizeは、そのメモリ・ブロックのサイズである。なお、Java(R)のByteBufferについては、Ron Hitchens, "Java Nio", 2002, O'Reillyなどを参照されたい。
JNIEnv->NewDirectByteBuffer(address,size)を呼び出すことによって、オフ・ヒープ202にある、予め割り当てられたアドレスのメモリ・ブロック302を指し示すByteBufferを生成することは可能であるが、実際上、その処理のオーバーヘッドが非常に大きいという問題がある。
すなわち、JNIEnv->NewDirectByteBuffer(address,size)は、具体的には次のようなステップからなる。
(1) Java(R)から、要求されるアドレス(address)とサイズ(size)で、JNIを実装するライブラリの処理系を呼び出す(Java(R)の処理系が実行する)。
(2) JNIEnv->NewDirectByteBuffer(address,size)を実行する(JNIを実装するライブラリ(C、C++)の処理系が実行する)。
(3) ByteBufferを生成するためのいくつかのJava(R)オブジェクトを生成し、その初期化を行うJava(R)の処理系を呼び出す。(JNIを実装するライブラリの処理系が実行する)
(4) 生成されたByteBufferをJNIを実装するライブラリの処理系に返す(Java(R)の処理系が実行する)。
(5) 返されたByteBufferをJava(R)の処理系に返す(JNIを実装するライブラリの処理系が実行する)。
(6) ByteBufferが利用可能になる。(Java(R)の処理系が実行する)
この個々のステップのオーバーヘッドが大きいので、全体のオーバーヘッドが非常に大きくなる。
従来のシステムでは、このオーバーヘッドが大きいJNIEnv->NewDirectByteBuffer(address,size)という処理を、例えばサーバ・システムがクライアント・システムからリクエストを受け取ってByteBufferを生成する必要がある度に実行する必要があるので、全体のパフォーマンスが低下してしまうという問題が生じる。
Rob Gordon, "Essential JNI: Java Native Interface", 1998, Prentice Hall Ron Hitchens, "Java Nio", 2002, O'Reilly
この発明の目的は、Java(R)などの処理系において、オフ・ヒープにアクセスするためのバッファを、JNIなどの所定のインターフェースで生成する際のオーバーヘッドを軽減することにある。
本発明によれば、上記課題は、この発明で特にファントムByteBufferと呼ぶ、仕様で許される範囲の大きいサイズのByteBufferを、1つまたは複数生成しておくことにより、解決される。
好適な実施例では、これらのファントムByteBufferの生成にはやはり、JNIEnv->NewDirectByteBuffer(address,size)が呼ばれ、その処理自体は上述のオーバーベッドがかかる。その際、ファントムByteBufferのアドレスとサイズで指定される範囲は、想定されるオフ・ヒープのメモリ・ブロックのアドレスの範囲をカバーするように設定される。但し、所定のJava(R) nioの仕様によれば、ByteBufferのサイズには、2GBという上限があるので、単一のファントムByteBufferでは想定されるオフ・ヒープのメモリ・ブロックのアドレスの範囲をカバーしきれない可能性がある。
そこで好適には、ファントムByteBufferは、想定されるオフ・ヒープのメモリ・ブロックのアドレスの範囲を広くカバーするように、アドレスをずらせて複数とるようにする。
このように、想定されるオフ・ヒープのメモリ・ブロックのアドレスの範囲を広くカバーするように、複数のファントムByteBufferが確保された状態で、システムから、アドレスとサイズを以ってByteBufferを作成する要求が送られてくると、ファントムByteBufferを生成しておいたプログラムは、そのアドレスとサイズで指定される範囲を含むファントムByteBufferに対して、ByteBufferに備わっているメソッドである、position()、limit()及びslice()を呼び出す。すなわち、position()の引数に要求されたアドレスを設定して実行し、limit()の引数に要求されたサイズを設定して実行し、slice()を実行することで、要求されたアドレスとサイズのByteBufferが切り出される。こうして切り出されたByteBufferを、指定されたオフ・ヒープのメモリ・ブロックに対するバッファとして使用することができる。さらにシステムから、アドレスとサイズで指定される範囲を以ってByteBufferを作成する要求が送られてくると、同様のことを繰り返す。
すなわち、一旦ファントムByteBufferを作成しておくことで、その後のシステムからの要求に対して、相対的にオーバーベッドの小さいByteBufferのメソッドを使ってスライスするだけで、要求されたByteBufferを作成することができる。
なお、システムから要求されたアドレスとサイズで指定される範囲を含むファントムByteBufferが見つからない場合は、そのアドレスとサイズで指定される範囲を含むファントムByteBufferを所定のオーバーヘッドで生成する処理が必要になるが、予め慎重に予測してファントムByteBufferを生成しておくことで、その必要性や頻度はかなり小さいと想定してよい。
また、用意するファントムByteBufferの数が多い際、各ByteBufferの生成の際に、指定される範囲を含むファントムByteBufferを特定するのにオーバーヘッドが高くなる場合がある。しかし、特定のファントムByteBufferに、要求されるアドレス、サイズで指定される範囲を含まないことが頻繁にある場合、そのファントムByteBufferを破棄することで、そのオーバーヘッドを軽減させることが可能である。
この発明によれば、Java(R)などの処理系において、予めファントムByteBufferを生成しておいて要求に応じてスライスすることによって、オフ・ヒープにアクセスするためのバッファを、JNIなどの所定のインターフェースで生成する際のオーバーヘッドを軽減することができる。
オン・ヒープ・マップの例を示す図である。 オフ・ヒープ・マップの例を示す図である。 ヒープ上のByteBufferと、オフ・ヒープ上のメモリ・ブロックの対応を示す図である。 本発明を実施するためのハードウェアの一例のブロック図である。 ソフトウェア構成のレイヤを示す図である。 本発明の処理のフローチャートを示す図である。 本発明の処理のフローチャートを示す図である。 ヒープ上のファントムByteBufferと、オフ・ヒープ上のメモリ・ブロックの対応を示す図である。
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
図4を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図4において、システム・バス402には、CPU404と、主記憶(RAM)406と、ハードディスク・ドライブ(HDD)408と、キーボード410と、マウス412と、ディスプレイ414が接続されている。CPU404は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium(商標)4、インテル社のCore(商標) 2 DUO、AMD社のAthlon(商標)などを使用することができる。主記憶406は、好適には、4GB以上の容量、より好ましくは、8GB以上の容量をもつものである。
ハードディスク・ドライブ408には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows(商標) 7、Windows XP(商標)、Windows(商標)2003サーバ、アップルコンピュータのMac OS(商標)などの、CPU404に適合する任意のものでよい。
ハードディスク・ドライブ408にはまた、Apacheなどの、Webサーバとしてシステムを動作させるためのプログラムが保存され、システムの起動時に、主記憶406にロードされる。
ハードディスク・ドライブ408にはさらに、Java(R)仮想マシン(VM)を実現するためのJava(R) Runtime Environmentプログラムが保存され、システムの起動時に、主記憶406にロードされる。
ハードディスク・ドライブ408はさらに、バイトコードのアプリケーション・プログラムをオペレーティング・システム・ネイティブなコードに変換して実行させるJITコンパイラを含んでいてもよい。
ハードディスク・ドライブ408にはさらに、好適にはCまたはC++で書いてコンパイルされたバイナリのプログラムである、JNIによって呼び出されるライブラリが格納されている。
キーボード410及びマウス412は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ414に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
ディスプレイ414は、これには限定されないが、好適には、1024×768以上の解像度をもち、32ビットtrue colorのLCDモニタである。ディスプレイ414は例えば、本発明を実装するプログラムを起動する画面を示すために使用される。
通信インターフェース416は、好適には、イーサネット(R)プロトコルにより、ネットワークと接続されている。通信インターフェース416は、クライアント・コンピュータ(図示しない)からApacheが提供する機能により、TCP/IPなどの通信プロトコルに従い、処理リクエストを受け取り、あるいは処理結果を、クライアント・コンピュータ(図示しない)に返す。
図5は、プログラムまたはプロセスの階層を示す図である。図4に示すハードウェアの上で、オペレーティング・システム(OS)502が動作し、OS502上ではJava(R)仮想マシン(JVM)504が動作し、JVM504上では、アプリケーション・プログラム506が動作する。アプリケーション・プログラム506は、ソースコードをjavacなどでコンパイルされたバイトコードの形式でハードディスク・ドライブ408に保存されている。JVM504は、JNIのインターフェース及びそのライブラリを含み、本発明のアプリケーション・プログラム506は、JNIのインターフェースを利用する。
次に、図6及び図7のフローチャートを参照して、アプリケーション・プログラム506が実行する処理について説明する。
図6のフローチャートは、好適にはアプリケーション・プログラム506の起動時に、アプリケーション・プログラム506が実行する処理に関する。アプリケーション・プログラム506は、ステップ602で、1つまたは複数のファントムByteBufferを生成する。ファントム(phantom)ByteBufferとは、本発明では特に、JVMにアクセスが許可されていない領域を含んでいてもよいメモリ空間を指し示すByteBufferを意味するものとする。ここでaddressは、オフ・ヒープのメモリ上でメモリ・ブロックが割り当てられるアドレスの範囲をカバーするように選ばれる。sizeは、好適には、java.nioの仕様の範囲で設定可能な最大値である2GBに設定される。ここで、ファントムByteBufferを生成する処理は、後述する図7のフローチャートで、ステップ712〜720で示す処理と同一である。
1つのファントムByteBufferの指し示すオフ・ヒープのメモリの範囲が2GBという制限があるので、もしアプリケーション・プログラム506が想定するオフ・ヒープのメモリの範囲が2GBより大きいと、単一のファントムByteBufferだけでは、アプリケーション・プログラム506が想定するオフ・ヒープのメモリの範囲をカバーしきれない。その場合は、可能な限りアプリケーション・プログラム506が想定するオフ・ヒープのメモリの範囲全体をカバーするように、アドレスの異なる複数のファントムByteBufferが生成される。
ステップ604で、アプリケーション・プログラム506は、生成されたファントムByteBufferのアドレスとサイズの値を、好適にはヒープの所定の領域に、例えばハッシュ・テーブルなどのテーブル・データとして登録する。
図7のフローチャートは、アプリケーション・プログラム506が、システムからのリクエストに応じて、ByteBufferを生成する処理に関する。
ステップ702は、アプリケーション・プログラム506が、システムから、アドレスとサイズを指定してByteBufferを生成するリクエストを受け取ったとき開始される。
すると、アプリケーション・プログラム506は、ステップ704で、図6のステップ604で登録した情報にアクセスして、指定されたアドレスとサイズの示す範囲を含むファントムByteBufferを探す。
ステップ706では、アプリケーション・プログラム506は、ステップ704での条件を満たすファントムByteBufferが見つかったかどうかを判断し、もしそうなら、ステップ708で、見つかったファントムByteBufferに対して、指定されたアドレスとサイズでスライスを行う。このために、ByteBufferに備わっているメソッドである、position()、limit()及びslice()を使用する。より具体的には、position()の引数に要求されたアドレスを設定して実行し、limit()の引数に要求されたサイズを設定して実行し、slice()を実行することで、要求されたアドレスとサイズのByteBufferが切り出される。こうして、ステップ710で、切り出されたByteBufferを、指定されたオフ・ヒープのメモリ・ブロックに対するバッファとして使用することができる。こうして、ByteBufferを生成する処理が終わる。
ステップ706に戻って、ステップ704での条件を満たすファントムByteBufferが見つからなかったならば、アプリケーション・プログラム506は、指定されたアドレスから始まる範囲のファントムByteBufferを生成する。この処理をより詳細に説明すると、アプリケーション・プログラム506は、ステップ712で、Java(R)からJNIを呼ぶ。
次にアプリケーション・プログラム506は、ステップ714で、指定されたアドレスと最大サイズ(2GB)でJNIEnv->NewDirectByteBuffer(address,size)を呼ぶ。
次にアプリケーション・プログラム506は、ステップ716で、ByteBufferのためのいくつかのオブジェクトを生成する。
ステップ718では、生成したByteBufferがJava(R)に返される。
次にアプリケーション・プログラム506は、ステップ720で、生成したByteBufferをファントムByteBufferとして登録する。
こうして処理は、ステップ704に戻る。すると新たにファントムByteBufferが登録されたので、ステップ704では該当するファントムByteBufferが見つかり、ステップ706での判断が肯定的になって、ステップ708で、既述のように、スライスによりByteBufferが生成されることになる。
ステップ706でファントムByteBufferが見つからなかったと判断された場合に行われるステップ712〜720は、オーバーヘッドが大きいが、予め想定した範囲のメモリのアドレスをカバーするようにファントムByteBufferを用意しておくことにより、ほとんどの場合に該当するファントムByteBufferが見つかるので、ステップ706での判断は肯定的になってステップ708に進むので、オーバーヘッドの問題はほとんど生じない。
図8は、ファントムByteBufferから、実ByteBufferがスライスされた切り出される様子を図式的に示す図である。図8において、ファントムByteBuffer802は、図6のステップ602で予め生成される。
その後、図7のステップ702に示すように、システムからByteBufferを生成する要求が来ると、実(すなわちファントムでない)ByteBuffer804が、ファントムByteBufferをスライスすることによってステップ708で生成されて、オフ・ヒープのメモリ・ブロック808を指し示す。
その後、システムからByteBufferを生成する別の要求が来ると、実ByteBuffer806が、ファントムByteBufferをスライスすることによってステップ708で生成されて、オフ・ヒープのメモリ・ブロック810を指し示す。
このように、オーバーヘッドをかけて一旦ファントムByteBufferを生成しておくと、その後はファントムByteBufferをスライスするだけで、所望の実ByteBufferを何個でも生成することができる。ByteBufferをスライスする処理は、JNIとは異なり、Java(R)内だけで完結する相対的にオーバーヘッドの小さい処理である。
以上、Java(R)からJNIを経由してオフ・ヒープ上のメモリ・ブロックを指し示すバッファを作成する例において、本発明の実施例を説明したが、この発明は、他システムへのネイティブ・インターフェースをもつ処理系であるなら、特定のハードウェア及びオペレーティング・システム、処理系あるいはアプリケーション・プログラムに限定されないことに留意されたい。
404・・・CPU
406・・・主記憶
408・・・ハードディスク・ドライブ
502・・・OS
504・・・JVM
506・・・アプリケーション・プログラム
802・・・ファントムByteBuffer
804・・・実ByteBuffer
806・・・実ByteBuffer

Claims (18)

  1. 絶対アドレスで、指定したメモリ空間へのアクセスを行うバッファのクラスをもち、さらに、該特別なクラスによって指定されたメモリ空間の一部をスライスして該クラスを生成する機能をもつ言語処理系上でプログラムを実行するシステムにおいて、前記指定したメモリ空間へのアクセスを行うクラスのバッファをコンピュータの処理によって生成する方法であって、
    前記コンピュータの処理によって、前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成するステップと、
    利用が許可されたメモリ空間とサイズが指定されたことに応答して、前記コンピュータの処理によって、前記生成されたクラスの前記バッファをスライスすることによって、該利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成するステップを有する、
    方法。
  2. 前記言語処理系にアクセスが許可されていない領域を含んでいてもよいメモリ空間に対して前記クラスのバッファを複数生成してアドレスとサイズを記録しておくステップをさらに有する、請求項1に記載の方法。
  3. 前記利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成するステップが、前記複数生成されてアドレスを記録されたクラスの前記バッファから、指定されたアドレスとサイズの示す範囲を含むバッファを見出してスライスする処理を含む、請求項2に記載の方法。
  4. 前記アドレスを含むクラスの所定のバッファを見出してスライスする処理が、前記アドレスを含む所定のバッファのクラスを見つけられないことに応答して、前記言語処理系にアクセスが許可されていないメモリ空間に対するアドレスを含む、クラスの追加のバッファ生成する処理を含む、請求項3に記載の方法。
  5. 前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成するステップが、許容される最大のサイズでバッファを生成する、請求項1に記載の方法。
  6. 前記言語処理系がJava(R)であり、前記バッファのクラスがByteBufferであり、前記バッファのクラスを生成する処理がJNIインターフェースを呼び出して実行され、前記バッファのクラスを切り出す処理がposition()で開始点を指定し、limit()でサイズを指定した後に、slice()メソッドにより実行される、請求項1に記載の方法。
  7. 絶対アドレスで、指定したメモリ空間へのアクセスを行うバッファのクラスをもち、さらに、該特別なクラスによって指定されたメモリ空間の一部をスライスして該クラスを生成する機能をもつ言語処理系上でプログラムを実行するシステムにおいて、前記指定したメモリ空間へのアクセスを行うクラスのバッファをコンピュータの処理によって生成するプログラムであって、
    前記コンピュータに、
    前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成するステップと、
    利用が許可されたメモリ空間とサイズが指定されたことに応答して、前記生成されたクラスの前記バッファをスライスすることによって、該利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成するステップを実行させる、
    プログラム。
  8. 前記言語処理系にアクセスが許可されていない領域を含んでいてもよいメモリ空間に対して前記クラスのバッファを複数生成してアドレスとサイズを記録しておくステップをさらに有する、請求項7に記載のプログラム。
  9. 前記利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成するステップが、前記複数生成されてアドレスを記録されたクラスの前記バッファから、指定されたアドレスとサイズの示す範囲を含むバッファを見出してスライスする処理を含む、請求項8に記載のプログラム。
  10. 前記アドレスを含むクラスの所定のバッファを見出してスライスする処理が、前記アド
    レスを含む所定のバッファのクラスを見つけられないことに応答して、前記言語処理系にアクセスが許可されていないメモリ空間に対するアドレスを含む、クラスの追加のバッファ生成する処理を含む、請求項9に記載のプログラム。
  11. 前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成するステップが、許容される最大のサイズでバッファを生成する、請求項7に記載のプログラム。
  12. 前記言語処理系がJava(R)であり、前記バッファのクラスがByteBufferであり、前記バッファのクラスを生成する処理がJNIインターフェースを呼び出して実行され、前記バッファのクラスを切り出す処理がposition()で開始点を指定し、limit()でサイズを指定した後に、slice()メソッドにより実行される、請求項7に記載のプログラム。
  13. 絶対アドレスで、指定したメモリ空間へのアクセスを行うバッファのクラスをもち、さらに、該特別なクラスによって指定されたメモリ空間の一部をスライスして該クラスを生成する機能をもつ言語処理系上でプログラムを実行するシステムにおいて、
    前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成する手段と、
    利用が許可されたメモリ空間とサイズが指定されたことに応答して、前記生成されたクラスの前記バッファをスライスすることによって、該利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成する手段を有する、
    システム。
  14. 前記言語処理系にアクセスが許可されていない領域を含んでいてもよいメモリ空間に対して前記クラスのバッファを複数生成してアドレスとサイズを記録しておく手段をさらに有する、請求項13に記載のシステム。
  15. 前記利用が許可されたメモリ空間にアクセス可能なクラスのバッファを生成する手段が、前記複数生成されてアドレスを記録されたクラスの前記バッファから、指定されたアドレスとサイズの示す範囲を含むバッファを見出してスライスする処理を実行する、請求項14に記載のシステム。
  16. 前記アドレスを含むクラスの所定のバッファを見出してスライスする処理が、前記アドレスを含む所定のバッファのクラスを見つけられないことに応答して、前記言語処理系にアクセスが許可されていないメモリ空間に対するアドレスを含む、クラスの追加のバッファ生成する処理を実行する、請求項15に記載のシステム。
  17. 前記言語処理系にアクセスが許可されていないメモリ空間を含んでいてもよい、前記クラスのバッファを生成する手段が、許容される最大のサイズでバッファを生成する、請求項13に記載のシステム。
  18. 前記言語処理系がJava(R)であり、前記バッファのクラスがByteBufferであり、前記バッファのクラスを生成する処理がJNIインターフェースを呼び出して実行され、前記バッファのクラスを切り出す処理がposition()で開始点を指定し、limit()でサイズを指定した後に、slice()メソッドにより実行される、請求項13に記載のシステム。
JP2013532484A 2011-09-09 2012-07-06 メモリ割り当て方法、プログラム、及びシステム Expired - Fee Related JP5588072B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013532484A JP5588072B2 (ja) 2011-09-09 2012-07-06 メモリ割り当て方法、プログラム、及びシステム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2011197051 2011-09-09
JP2011197051 2011-09-09
JP2013532484A JP5588072B2 (ja) 2011-09-09 2012-07-06 メモリ割り当て方法、プログラム、及びシステム
PCT/JP2012/067326 WO2013035420A1 (ja) 2011-09-09 2012-07-06 メモリ割り当て方法、プログラム、及びシステム

Publications (2)

Publication Number Publication Date
JP5588072B2 true JP5588072B2 (ja) 2014-09-10
JPWO2013035420A1 JPWO2013035420A1 (ja) 2015-03-23

Family

ID=47830902

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013532484A Expired - Fee Related JP5588072B2 (ja) 2011-09-09 2012-07-06 メモリ割り当て方法、プログラム、及びシステム

Country Status (5)

Country Link
US (1) US20130067190A1 (ja)
EP (1) EP2755129B8 (ja)
JP (1) JP5588072B2 (ja)
CN (1) CN103782273A (ja)
WO (1) WO2013035420A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9697220B2 (en) 2013-12-13 2017-07-04 Oracle International Corporation System and method for supporting elastic data metadata compression in a distributed data grid
US9424147B2 (en) 2013-12-13 2016-08-23 Oracle International Corporation System and method for supporting memory allocation control with push-back in a distributed data grid
WO2018164700A1 (en) 2017-03-10 2018-09-13 Visa International Service Association Techniques for in-memory data searching
US11243876B2 (en) 2019-11-06 2022-02-08 Oracle International Corporation Techniques for accessing off-heap memory
CN113835989A (zh) * 2020-06-08 2021-12-24 武汉斗鱼鱼乐网络科技有限公司 一种性能统计方法和装置
CN117251120B (zh) * 2023-11-17 2024-03-01 杭州乒乓智能技术有限公司 基于jvm堆外内存的对账系统优化方法、装置、设备及介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1248465C (zh) * 2002-11-01 2006-03-29 华为技术有限公司 网络通信中数据发送/接收缓冲区的管理方法
US7720802B2 (en) * 2007-01-03 2010-05-18 International Business Machines Corporation Reclaiming resident buffers when a reclaim threshold has been exceeded by swapping the oldest in use buffer and a new buffer, and referencing the new buffer via an updated set of read and write pointers
CN101714096A (zh) * 2009-12-02 2010-05-26 浙江中控技术股份有限公司 一种配置信息更新方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6012039075; 栗原傑享: 'DirectByteBufferのView' [online] [2012年7月20日検索], 20061201 *
JPN6012039076; 青柳龍也: 'Java 2 SDK 1.4' Java WORLD 第6巻,第6号, 20020601, p.36-50, (株)IDGジャパン *

Also Published As

Publication number Publication date
EP2755129A1 (en) 2014-07-16
WO2013035420A1 (ja) 2013-03-14
EP2755129A4 (en) 2014-07-30
EP2755129B8 (en) 2017-02-22
EP2755129B1 (en) 2016-10-12
CN103782273A (zh) 2014-05-07
US20130067190A1 (en) 2013-03-14
JPWO2013035420A1 (ja) 2015-03-23

Similar Documents

Publication Publication Date Title
JP5588072B2 (ja) メモリ割り当て方法、プログラム、及びシステム
US10268588B2 (en) Methods of cache preloading on a partition or a context switch
US9529611B2 (en) Cooperative memory resource management via application-level balloon
US7925818B1 (en) Expansion of virtualized physical memory of virtual machine
JP5235989B2 (ja) 仮想マシンのメモリを管理するためのシステム、方法、及びコンピュータ・プログラム
JP6943954B2 (ja) コンテナに基づくgpu仮想化方法及びシステム
US20130132953A1 (en) Method and System for Providing Application by Virtual Machine and Computer-Readable Storage Medium to Execute the Method
CA2810782C (en) Managing memory across a network of cloned virtual machines
US11010355B2 (en) Layer-based file access method and apparatus of virtualization instance
JP2019523920A (ja) ページ・フォールト解決法
JP2008108260A (ja) コンピュータ・システム上のハイパーバイザ内にポリシ・ベースのオペレーティング・システム・サービスを提供する方法、コンピュータ・システム及びコンピュータ・プログラム
KR20090079012A (ko) 가상 머신의 상태를 저장, 복원하는 방법 및 장치
US20060070065A1 (en) Memory support for heterogeneous virtual machine guests
JP2021502637A (ja) コンピューティング環境内の処理を促進するためのコンピュータ・プログラム、コンピュータ・システムおよび方法
Min et al. Vmmb: Virtual machine memory balancing for unmodified operating systems
US7689971B2 (en) Method and apparatus for referencing thread local variables with stack address mapping
JP2008107966A (ja) 計算機システム
JP5379779B2 (ja) コンピュータにおけるオブジェクトの処理方法、プログラム及びシステム
US10423526B2 (en) Method, program, and system for reducing the cost of stack scanning
US7444636B2 (en) Method and system of determining attributes of a functional unit in a multiple processor computer system
US20210326253A1 (en) Computer memory management in computing devices
Pinter et al. Improving machine virtualisation with'hotplug memory'
JP6173031B2 (ja) コンピュータにおいてオブジェクトを管理するための方法、プログラム及びシステム
JP6103994B2 (ja) 文字列データ処理方法、プログラム及びシステム
Akkaya Message from the demonstrations chair

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140610

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140708

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140724

R150 Certificate of patent or registration of utility model

Ref document number: 5588072

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees