JP6103994B2 - 文字列データ処理方法、プログラム及びシステム - Google Patents

文字列データ処理方法、プログラム及びシステム Download PDF

Info

Publication number
JP6103994B2
JP6103994B2 JP2013050191A JP2013050191A JP6103994B2 JP 6103994 B2 JP6103994 B2 JP 6103994B2 JP 2013050191 A JP2013050191 A JP 2013050191A JP 2013050191 A JP2013050191 A JP 2013050191A JP 6103994 B2 JP6103994 B2 JP 6103994B2
Authority
JP
Japan
Prior art keywords
character string
program
guest
string
application program
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
JP2013050191A
Other languages
English (en)
Other versions
JP2014174966A (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 JP2013050191A priority Critical patent/JP6103994B2/ja
Publication of JP2014174966A publication Critical patent/JP2014174966A/ja
Application granted granted Critical
Publication of JP6103994B2 publication Critical patent/JP6103994B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

この発明は、1つのコンピュータ・システムの上で複数のゲスト環境(オペレーティング・システムやJava(R) VM)が動作する環境において、文字列データを処理する技法に関するものである。
従来より、1つのコンピュータ・システム(マシンとも呼ばれる)複数のゲスト環境が動作する環境において、物理メモリの使用効率を上げることは重要な課題である。その際、ほぼ同一のソフトウェア群が、複数のゲストVMで動作する環境では、各ゲストVMが同じ文字列データを生成するので、無駄がある。
これを解消するための1つの従来技法として、JVMのClass sharing機能を拡張して、JVMのクラスデータ等を複数ゲストVM間で共有する手法が知られている。これに関するより詳しい情報は、http://www.ibm.com/developerworks/jp/java/library/j-shared/などを参照されたい。
また、JVM起動時に生成される文字列オブジェクトのキャッシュファイルを作成し、各ゲストVMで共有する手法も知られている。しかしこのとき、キャッシュファイルが共有されるだけで、オブジェクトそのものは各JVM内で作り直さなくてはならず、共有できない。
特開2002−229793号公報は、Java(R)プログラムにおいて、各変数名および各メソッド名として文字または文字列を割り当てるに際して、変数名グループと、引数型別のメソッド名グループからなる複数のグループについて、1つのグループ内では個別の対象に対してそれぞれ固有の文字または文字列を割り当てるとともに、複数のグループ間では個別の対象に対して適宜に共通の文字または文字列を割り当てることを開示する。しかし、この先行技術には、割り当てた文字列を検索する技法についての記述はない。
米国特許公開第2012/0017204号明細書は、JVM起動時に生成される文字列オブジェクトをキャッシュファイルに入れ、次回起動時以降は、キャッシュファイルから文字列オブジェクトを生成することで、JVM起動時に重複して生成される文字列オブジェクトを削減することを開示する。この技法においては、JVMが起動するまでに重複して生成される文字列しか対象にされない。また、キャッシュファイルをロードした後で、インターン・テーブルに文字列オブジェクトを格納し直さなくてはならない。
米国特許第7707583号明細書は、ランタイム・システムにおいてオブジェクトを共有し、スケーラブル・マネジャにおけるユーザ・セッション間を隔離する技法を開示する。この技法において、ユーザ・セッションに対応するユーザ・コンテキストが、共有メモリ領域にストアされる。そして、当該ユーザ・セッションに対応するリクエストを受領すると、一組のオペレーティング・システム・プロセスから1つのプロセスが選択され、一組のランタイム・システムから、1つのランタイム・システムが選択される。この技法においては、複数仮想マシン間でクラスやオブジェクトを共有することで、物理メモリ使用量が削減される。また、クラス単位で共有可能なオブジェクトを分類し、どんな型のオブジェクトを共有するかユーザーが判断することが可能ならしめられる。しかし、この先行技術には、高速に共有オブジェクトを検索する技法についての記述はない。
米国特許公開第2004/0049493号明細書は、バケットペイロードのASCII文字列に基づいてルーティングを行うための文字列検索手法を開示する。この手法において、登録文字列は、一つのハッシュテーブルに登録される。検索時、ハッシュテーブルから検索文字列を探す前に、配列に部分文字列を検索しに行き、登録されている可能性がない文字列検索は即座に打ち切られる。さらに、配列は2つ用意され、ハッシュテーブルとともに階層的に構成される。この技法は、検索の早い段階で該当しない文字列の検索を打ち切ることは示すものの、検索を高速化するための文字列の格納の工夫については示唆するものではない。
米国特許第7418505号明細書は、IPアドレスのプリフィックス長毎にハッシュテーブルを分け、ハッシュテーブル中の値の衝突を減らすことで、ルーティングを高速に行うための手法を開示する。しかし、この技法においては、ハッシュテーブル中の値の衝突をできるだけ回避する準備を限定的にしか行うことができない。
Kiyokuni Kawachiya, Kazunori Ogata, Tamiya Onodera. "Analysis and Reduction of Memory Inefficiencies in Java Strings,", In Proceedings of the 23rd Annual ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA '08), pp. 385-401 (Oct. 2008).は、Java(R)ヒープにおいて、重複した文字列と使用されていないリテラルに着目することにより、メモリの使用効率を向上することを開示する。
特開2002−229793号公報 米国特許公開第2012/0017204号明細書 米国特許第7707583号明細書 米国特許公開第2004/0049493号明細書 米国特許第7418505号明細書
http://www.ibm.com/developerworks/jp/java/library/j-shared/ Kiyokuni Kawachiya, Kazunori Ogata, Tamiya Onodera. "Analysis and Reduction of Memory Inefficiencies in Java Strings,", In Proceedings of the 23rd Annual ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA '08), pp. 385-401 (Oct. 2008).
この発明の目的は、ヒープメモリ中の文字列オブジェクトを各ゲストVM間で共有することを可能ならしめることにより、メモリ使用効率を向上させることにある。
この発明の他の目的は、共有されたヒープメモリ中の文字列オブジェクトを高速で検索できる技法を提供することにある。
この発明は、複数ゲストVM間で共有可能な文字列オブジェクトを直接参照可能な形式で保存しておき、実行時に効率よく探索することを可能ならしめることにより、上記課題を解決するものである。
この発明は、これには限定されないが、好適な実装は、Java(R)による実装である。
Java(R)による実装の場合、本発明に係るシステムは、同じメモリイメージのオブジェクトを複数JVM間で利用するために、複数ゲストVMで共通して用いられる文字列オブジェクトを抽出してファイルにまとめ、実行開始時にそのファイルをメモリ上の予め決められたアドレスにマップし、実行時に文字列オブジェクトを生成しようとするとき、マップされたファイル中の文字列オブジェクトを検索して、同じものがあればそれを利用できるようにする。
その際、アプリケーションやコンポーネント毎に共有する文字列データセットが抽出しまとめられる。そのような共有する文字列データセットを用意するため、本発明に係るシステムは、複数ゲストVM上の複数JVM上で、一つ、もしくは複数のJava(R)プログラムを実行する。そのJava(R)プログラムは、各JVMのJava(R)ヒープ内に存在する文字列データをそれぞれ抽出し、異なるマシン上のJVMから共通して出現した文字列データを共有対象文字列データとする。このとき、JVMプロセスのアドレス空間にマップするだけで、共有対象文字列データをJava(R)オブジェクトとして直接参照可能である。
この発明の1つの側面においては、文字列オブジェクトの高速検索を可能ならしめるため、対象データの特性に基づきグループ分けし、対象オブジェクトの検索が一番高速になるデータ構造をグループ毎に使用するようにする。ここでいう対象データの特性とは、文字列の長さ、文字列オブジェクトが生成されるクラスファイル、jarファイルなどのことである。このようなグループ分けされた文字列毎にハッシュテーブルが作成され、後で、ハッシュテーブルを用いて文字列が高速検索される。
この発明によれば、ヒープメモリ中の文字列オブジェクトを各ゲストVM間で共有することにより、メモリ使用効率を向上させるという効果が得られる。
また、好適には文字列オブジェクトを対象データの特性に基づきグループ分けし、対象オブジェクトの検索が一番高速になるデータ構造をグループ毎に使用するようにしたことにより、文字列検索の効率が向上する。
本発明を実施するためのハードウェア構成の一例のブロック図である。 複数仮想マシン環境を示す図である。 1つのゲストVM中に複数のJVMが起動されている状態を示す図である。 複数のゲストVMから、共通対象文字列を集める処理のフローチャートを示す図である。 共通対象文字列から文字列を検索するためのハッシュ関数とビットシフト量を決定する処理のフローチャートを示す図である。 グループ分けした文字列において、ハッシュ関数とビットシフト量を決定する処理を図式的に示す図である。 グループ内の文字列データから、ハッシュ関数で使用するインデックスを求める処理のフローチャートを示す図である。 ハッシュの衝突が最も少なかったハッシュ関数を決定する処理のフローチャートを示す図である。 ハッシュテーブルインデックス値の衝突が最も少なかったシフト演算を求める処理のフローチャートを示す図である。 ハッシュテーブルインデックスと、ビットシフトの関係を示す図である。 DLLにおける共有文字列データを格納するための構造体を示す図である。 DLLにおける共有文字列データを具体的に格納した状態を示す図である。 複数のJVMが起動されている状態におけるメモリマップを示す図である。 Stringコンストラクタ呼び出し処理のフローチャートを示す図である。 String.intern()呼び出し処理のフローチャートを示す図である。
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
図1を参照すると、参照番号100で総称される、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図1において、システム・バス102には、CPU104と、主記憶(RAM)106と、ハードディスク・ドライブ(HDD)108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore(商標) i3、Core(商標) i5、Core(商標) i7、Xeon(R)、AMD社のAthlon(商標)、Phenom(商標)、Sempron(商標)などを使用することができる。主記憶106は、好適には、8GB以上の容量、より好ましくは、16GB以上の容量をもつものである。
ハードディスク・ドライブ108には、図2に示すように、複数の仮想マシン(VM)を実現するためのハイパーバイザ202が導入されている。ハイパーバイザ202として利用可能なプログラムとして、これには限定されないが、VMWare(R)、Xenなどがある。ここでは、Xenを用いるものとして説明する。
ハイパーバイザ202上には、ホストVM204及び、複数のゲストVM206a、206、・・・、206nが構成される。ホストVM204は、Xenではドメイン0とも呼ばれ、ハイパーバイザ202を介してハードウェア100とインターフェースするデバイス・ドライバが含まれている。これにより、ゲストVM206a、206b、・・・、206nは、ホストVM204を介して、ハードウェア100とインターフェースすることになる。
ハードディスク・ドライブ108には、オペレーティング・システム(OS)が格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows(商標) 7、Windows(商標)2008サーバなどの、CPU104に適合する任意のものでよい。オペレーティング・システム(OS)は、後述する図3では、参照番号302で示される。
ハードディスク・ドライブ108にはさらに、Java(R)仮想マシン(JVM)204(図2)を実現するためのJava(R) Runtime Environmentプログラムが格納されている。JVMは、後述する図3では、参照番号306a、306b、・・・、306mで示される。
ハードディスク・ドライブ108にはさらに、JVM上で動作するJava(R)アプリケーション・プログラムが格納されている。この実施例では、Java(R)アプリケーション・プログラムは、インターナショナル・ビジネス・マシーンズ・コーポレーションから提供される、WebSphere(R) Application Serverを含む。Java(R)アプリケーション・プログラムは、後述する図3では、参照番号308a、308b、・・・、308mで示される。
ハードディスク・ドライブ108にはまた、Apacheなどの、Webサーバとしてシステムを動作させるためのプログラムが保存されている。
キーボード110及びマウス112は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ114に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
ディスプレイ114は、これには限定されないが、好適には、1024×768以上の解像度をもち、32ビットtrue colorのLCDモニタである。ディスプレイ114は例えば、JVM上で実行されるアプリケーション・プログラムによる動作の結果を表示するために使用される。
通信インターフェース116は、好適には、イーサネット(R)プロトコルにより、ネットワークと接続されている。通信インターフェース116は、クライアント・コンピュータ(図示しない)からApacheが提供する機能により、TCP/IPなどの通信プロトコルに従い、処理リクエストを受け取り、ホストVM204がその処理リクエストを指定されたゲストVMに送り、その処理結果をゲストVMから受け取って、クライアント・コンピュータ(図示しない)に返す。
次に図3を参照して、ゲストVMについて説明する。ゲストVM206a、206b、・・・、206nはどれも機能的に同一であるので、ここでは代表的に、ゲストVM206aとして説明する。
すると、図3に示すように、ゲストVM206aは、OS302上に、各々JVM306a、306b、・・・、306mとアプリケーション・プログラムを含む、複数の仮想マシン304a、304b、・・・、304mを含みえる。
このような前提で、図4以下のフローチャートを参照して、本発明の処理について説明する。図4に示す処理は、各々のゲストVMにおけるJava(R)プログラム毎に実行されるので、複数のゲストVMに亘る処理として、ホストVM204に、全体の処理を制御するプログラムを配置することができる。
図4において、本発明のプログラムは、ステップ402で、あるゲストVMにおけるJava(R)プログラムを実行する。次にステップ404で、本発明のプログラムは、そのゲストVMにcoreファイルを出力させる。なお、ここでいうcoreファイルとは、JVMにおけるシステム・ダンプファイルのことである。システム・ダンプファイルは好適には、ハードディスク・ドライブ108の所定のディレクトリに書き出される。
次にステップ406で、本発明のプログラムは、coreファイルから文字列オブジェクトの情報を取り出す。
こうして、すべてのゲストVMにおいて、Java(R)プログラムの実行結果のcoreファイルから文字列オブジェクトの情報を取り出すと、本発明のプログラムは、ステップ408で、複数のゲストVMから情報を集め、ステップ410で、複数のcoreファイルに出現する文字列データを共通対象文字列とする。
このように複数のゲストVMから情報を集められた共通対象文字列の集合データのままでは、文字列の検索に時間がかかるので、本発明のプログラムは、図5のフローチャートで示す処理により、共通対象文字列の集合データに対して、検索キーをつける。
すなわち、ステップ502で、本発明のプログラムは、文字列対象データを特性に基づきグループ分けする。ここでいう対象データの特性とは、文字列の長さ、文字列オブジェクトが生成されるクラスファイル、jarファイルなどのことである。このうち一番典型的な特性は文字列の長さである。
本発明のプログラムは、ステップ504で、このようにしてグループ分けした全ての文字列を使い、何番目の文字がグループ内で文字の種類が多いかを調べ、種類の多い上位数個の文字インデックスをハッシュ計算に用いる。なお、ステップ504の詳細は、図7のフローチャートを参照して後で説明する。
図6は、文字列の長さでグループ分けされた文字列に対する処理を図式的に示す図である。図示されているのは、長さ9の文字列の処理と、長さ10の文字列の処理と、長さ12の文字列の処理の場合である。ここでは、文字列を並べた列の範囲で情報エントロピーの高い3個から4個のインデックスが選ばれる。
本発明のプログラムは、ステップ506で、予め用意しておいたハッシュ関数の中から、ハッシュ値の衝突が最も少なかったものを選ぶ。ここで、予め用意しておいたハッシュ関数とは、図6ではhashFn1、hashFn2、・・・、hashFn10のように示されているものである。予め用意しておいたハッシュ関数の例としては次のようなものがある。下記の式で、ch1、ch2、ch3、ch4は、選ばれたインデックスにおける文字列の値である。なお、これらのハッシュ関数は一例であって、当業者が思いつく様々な他のハッシュ関数も使用可能である。また、ステップ506の詳細は、図8のフローチャートを参照して後で説明する。
int hash = ch1 * ch2 + ch3;
return (hash * hash);
int hash = ch1 * ch2 * ch3;
return (hash * hash);
int hash = ch1 * ch2 * ch3 + ch4;
return (hash * hash);
本発明のプログラムは、ステップ508で、インデックスを求めるときに、全てのシフト演算を試して衝突が最も少なかった計算方法を選ぶ。これは、図6では、1ビット・シフト、・・・、nビット・シフトとして示されている。ステップ508の詳細は、図9のフローチャートを参照して後で説明する。
次に、図7のフローチャートを参照して、ステップ504の詳細を説明する。図7のフローチャートは、グループ内の文字列の処理に関するものであって、ステップ702で、本発明のプログラムは、i番目の文字が何種類あるか数える。このとき、文字列の長さがi未満のものは数え上げの対象から外す。
ステップ704で、本発明のプログラムは、種類の多かった上位数個のインデックスを求める。こうしてステップ706で、ハッシュ関数で使用する、複数個の文字列インデックスが得られる。
次に、図8のフローチャートを参照して、ステップ506の詳細を説明する。図8のフローチャートは、グループ内の文字列データと文字列インデックス、すなわち何番目の文字を計算に使用するかを用いるものであって、本発明のプログラムは、ステップ802で、与えられた文字列インデックスを使って、上述したような予め用意したハッシュ関数でハッシュ値を計算し、これをグループ内の全ての文字列に対して繰り返す。ステップ804で本発明のプログラムは、ハッシュ値の衝突した回数を数える。
本発明のプログラムは、ステップ802とステップ804を、予め用意しておいた全てのハッシュ関数について繰り返し、ステップ806で、ハッシュ値の衝突が最も少なかったハッシュ関数を選ぶ。
次に、図9のフローチャートを参照して、ステップ508の詳細を説明する。図9のフローチャートは、グループ内の文字列データそれぞれに対してハッシュ関数を適用したときのハッシュ値を用いるものであって、本発明のプログラムは、ステップ904で、図10に示すように、nビットだけ右シフトして、Lビットをハッシュテーブルインデックスと計算する。ここでLは、ハッシュテーブルのサイズに依存する定数である。次に本発明のプログラムはステップ906で、ハッシュテーブルインデックス値の衝突した回数を数え、ステップ904とステップ906を、右シフト可能なビット数分だけ繰り返し、ステップ908で、ハッシュテーブルインデックス値の衝突が最も少なかったシフト演算が選ばれる。
この結果、例えば、情報エントロピーが高いインデックスが、3、4、6であり、ハッシュ値の衝突が最も少なかったハッシュ関数がhashFn3であり、2ビット分だけ右シフトした演算のハッシュテーブルインデックスの衝突が最も少なかったとすると、長さ9の文字を見出すために使用されるインデックスindexは、以下のようにして計算されることになる。
int hc = hashFn3(char, offset,3,4,6);
int index = (hc >> 2 & ((1 << 12) - 1);
ここで、ハッシュテーブルインデックスについて補足する。この実施例では、共有文字列を格納するためにグループごとにハッシュテーブルを用意している。すると、共有文字列をハッシュテーブルに格納するためには、ハッシュテーブルのどの位置(インデックス)に格納するかを決める必要がある。
文字列を入力としてハッシュ関数で計算されるが、その計算結果がハッシュテーブルのインデックスに必ずしも一対一対応するわけではない。そこで、計算結果を補正してハッシュテーブルのインデックスの範囲内に収める必要がある。その補正をするのが「nビット分だけ右シフトして、Lビットをハッシュテーブルインデックスとして使用する」処理である。
ハッシュテーブルを利用する際にポイントとなるのが、ハッシュテーブルの同じインデックスにはできるだけひとつの文字列しか格納しない、という方針である。となると、グループ内の文字列を用いて得る結果:
(1) ハッシュ関数での計算の結果
(2) インデックス計算での結果
で(2)が可能な限りばらけるように工夫する必要がある。(2)がばらけるためには、(1)の値がそもそもばらけていることが望ましい。それが「予め用意しておいたハッシュ関数の中からハッシュ値の衝突が最も少なかったものを選ぶ」処理である。
さらに、(1)を得るために入力として文字列を使うわけであるが、文字列のすべての情報を使う必要はない。そこで、グループ内の文字列を調べて、必要そうな場所だけを取り出して使う。例えば、"ISOLATION"、"ASSERTION","ASSOCIATE"という3つの文字列があるグループに属するとする。このとき、以下のように並べてみると、
"ISOLATION"
"ASSERTION"
"ASSOCIATE"
グループ内の文字列の中で最も違いが出るインデックス3,4だけを使えば十分であることが分かる。
本発明のプログラムは、共有文字列を保存したDLLを作成し、JVMがそのDLLを、毎回同じアドレスにロードするようにする。これは、Linux(商標)の場合、prelinkコマンドを使用して達成できる。
そして、JVM起動時、Stringとchar[]のClassだけDLLの書き込み可能な場所に置く。図11は、このための、共有文字列テータとしてのjava.lang.Stringとchar[]の構造体string_len3の定義を示す。このような構造体は、java.lang.Stringとchar[]を一組として文字列の長さごとに定義される。図12は、string_len3に実際に値が格納された様子を示す。なお、図12には、java.lang.Stringとchar[]の組が2つしか示されていないが、実際はもっと多数含まれることを理解されたい。
図13は、単一のゲストVM中の複数のJVMに亘って、共有文字列を保存したDLLが同一アドレスでロードされている様子を示す図である。これにより、各JVMは同様に且つ独立にDLL中に定義された共有文字列を検索することができる。その検索の際に、共有文字列テータのグループ毎に選ばれたハッシュ関数とインデックスが使用される。なお、共有文字列は好適には、ヒープ外(off-heap)に配置される。なお、JVMからヒープ外メモリへのアクセスは、JNI(Java(R) Native Interface)などの技法を用いて達成することができる。
図14は、Java(R)プログラムにおける、Stringコンストラクタの呼び出し処理のフローチャートを示す図である。ステップ1402ではプログラムは、引数のchar[]が表す文字列の特性(長さ)などをチェックする。
そして、ステップ1404で特性に対するグループがあるかどうか判断し、もしないならプログラムは、ステップ1406でStringオブジェクトをnewする。もし特性に対するグループがあるなら、プログラムは、引数のchar[]が表す文字と同じものがグループ内にあるかどうか、上記したDLLにアクセスして検索する。
そして、プログラムは、ステップ1410で文字列が見つからなかったと判断すると、ステップ1412でStringオブジェクトをnewする。プログラムは、ステップ1410で文字列が見つかったと判断すると、ステップ1414で、StringをnewしてDLL内のchar[]を参照する。
図15は、Java(R)プログラムにおける、String.intern()の呼び出し処理のフローチャートを示す図である。ステップ1502ではプログラムは、引数のchar[]が表す文字列の特性(長さ)などをチェックする。
そして、ステップ1504で特性に対するグループがあるかどうか判断し、もしないならプログラムは、ステップ1506でString.intern()を実行する。もし特性に対するグループがあるなら、プログラムは、引数のchar[]が表す文字と同じものがグループ内にあるかどうか、上記したDLLにアクセスして検索する。
そして、プログラムは、ステップ1510で文字列が見つからなかったと判断すると、ステップ1512でString.intern()を実行する。プログラムは、ステップ1510で文字列が見つかったと判断すると、ステップ1514で、DLL内のStringオブジェクトを返す。
以上、ゲストVMにおけるJVMでの実装の上で本発明の実施例を説明してきたが、これには限定されず、複数のVM環境から使用文字列を取り出して、数のVM環境に対して共通文字列をアクセス可能ならしめることができるような任意の環境に、この発明は適用可能であることを理解されたい。すなわち、本発明は特定の言語環境やプラットフォームに限定されないで実施可能である。
また、複数のVM環境から、共通文字列をアクセス可能ならしめる仕組みとして、上記実施例ではDLLが使用されたが、これは一例に過ぎず、ヒープ外メモリなど、個別のJVMの管理外のメモリ配置するなら、任意の方法でメモリを配置してよい。
104 CPU
106 RAM
108 ハードディスク・ドライブ
204 ホストVM
206a、206b、・・・206n ゲストVM
306a、306b、・・・306m JVM

Claims (13)

  1. 複数のゲストVMの各々で、アプリケーション・プログラムが実行されているコンピュータ・システムにおいて、
    前記各ゲストVMで、前記各アプリケーション・プログラムが使用している各々のヒープ領域から、共通に存在する文字列を抽出するステップと、
    前記抽出された共通に存在する文字列を、前記各アプリケーション・プログラムがアクセス可能に、前記システムのメモリに配置するステップを有する、
    方法。
  2. 前記ゲストVMが複数のJVMを含み、前記アプリケーション・プログラムがJavaプログラムであり、前記抽出された共通に存在する文字列は、前記JVMが、クラス定義を毎回同じアドレスで行うようになされ、以って前記抽出された共通に存在する文字列のオブジェクトが、クラス・ポインタが前記複数のゲストVM間で同一になるようになされる、請求項1に記載の方法。
  3. 前記文字列のオブジェクトは、DLLとしてメモリにロードされる、請求項2に記載の方法。
  4. 前記抽出された共通に存在する文字列を、文字列の長さ、または作られ方の特性でグループ分けするステップと、
    前記グループ分けされた文字列のグループ毎に、対象文字列の検索を行うためのハッシュインデックスを構築するステップを更に有する、
    請求項1に記載の方法。
  5. 前記ハッシュインデックスを構築するステップは、
    文字列において、情報エントロピーの高さの観点から、インデックスに使う位置を見つけるステップと、
    前記見つけたインデックスのところで、複数のハッシュ関数を計算し、該複数のハッシュ関数のうち最も衝突が少ないハッシュ関数を選ぶステップと、
    前記文字列をビットシフトして、最も衝突の少ないシフト位置を選ぶステップを有する、
    請求項4に記載の方法。
  6. 複数のゲストVMの各々で、アプリケーション・プログラムが実行されているコンピュータ・システムにおいて、
    前記コンピュータ・システムに、
    前記各ゲストVMで、前記各アプリケーション・プログラムが使用している各々のヒープ領域から、共通に存在する文字列を抽出するステップと、
    前記抽出された共通に存在する文字列を、前記各アプリケーション・プログラムがアクセス可能に、前記システムのメモリに配置するステップを実行させる、
    プログラム。
  7. 前記ゲストVMが複数のJVMを含み、前記アプリケーション・プログラムがJavaプログラムであり、前記抽出された共通に存在する文字列は、前記JVMが、クラス定義を毎回同じアドレスで行うようになされ、以って前記抽出された共通に存在する文字列のオブジェクトが、クラス・ポインタが前記複数のゲストVM間で同一になるようになされる、請求項6に記載のプログラム。
  8. 前記文字列のオブジェクトは、DLLとしてメモリにロードされる、請求項7に記載のプログラム。
  9. 前記コンピュータ・システムに、
    前記抽出された共通に存在する文字列を、文字列の長さ、または作られ方の特性でグループ分けするステップと、
    前記グループ分けされた文字列のグループ毎に、対象文字列の検索を行うためのハッシュインデックスを構築するステップを更に実行させる、
    請求項6 に記載のプログラム。
  10. 前記ハッシュインデックスを構築するステップは、
    文字列において、情報エントロピーの高さの観点から、インデックスに使う位置を見つけるステップと、
    前記見つけたインデックスのところで、複数のハッシュ関数を計算し、該複数のハッシュ関数のうち最も衝突が少ないハッシュ関数を選ぶステップと、
    前記文字列をビットシフトして、最も衝突の少ないシフト位置を選ぶステップを有する、
    請求項9に記載のプログラム。
  11. 複数のゲストVMの各々で、アプリケーション・プログラムが実行されているコンピュータ・システムにおいて、
    前記各ゲストVMで、前記各アプリケーション・プログラムが使用している各々のヒープ領域から、共通に存在する文字列を抽出する手段と、
    前記抽出された共通に存在する文字列を、前記各アプリケーション・プログラムがアクセス可能に、前記システムのメモリに配置する手段を有する、
    コンピュータ・システム。
  12. 前記ゲストVMが複数のJVMを含み、前記アプリケーション・プログラムがJavaプログラムであり、前記抽出された共通に存在する文字列は、前記JVMが、クラス定義を毎回同じアドレスで行うようになされ、以って前記抽出された共通に存在する文字列のオブジェクトが、クラス・ポインタが前記複数のゲストVM間で同一になるようになされる、請求項11に記載のコンピュータ・システム。
  13. 前記文字列のオブジェクトは、DLLとしてメモリにロードされる、請求項12に記載のコンピュータ・システム。
JP2013050191A 2013-03-13 2013-03-13 文字列データ処理方法、プログラム及びシステム Expired - Fee Related JP6103994B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013050191A JP6103994B2 (ja) 2013-03-13 2013-03-13 文字列データ処理方法、プログラム及びシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013050191A JP6103994B2 (ja) 2013-03-13 2013-03-13 文字列データ処理方法、プログラム及びシステム

Publications (2)

Publication Number Publication Date
JP2014174966A JP2014174966A (ja) 2014-09-22
JP6103994B2 true JP6103994B2 (ja) 2017-03-29

Family

ID=51696077

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013050191A Expired - Fee Related JP6103994B2 (ja) 2013-03-13 2013-03-13 文字列データ処理方法、プログラム及びシステム

Country Status (1)

Country Link
JP (1) JP6103994B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115576954B (zh) * 2022-11-24 2023-04-07 恒生电子股份有限公司 哈希表的确定方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7882198B2 (en) * 2007-07-02 2011-02-01 Oracle America, Inc. Shared JAVA JAR files
US8839215B2 (en) * 2010-07-19 2014-09-16 International Business Machines Corporation String cache file for optimizing memory usage in a java virtual machine

Also Published As

Publication number Publication date
JP2014174966A (ja) 2014-09-22

Similar Documents

Publication Publication Date Title
US10915449B2 (en) Prioritizing data requests based on quality of service
EP2344953B1 (en) Provisioning virtual resources using name resolution
US20190332230A1 (en) User interface view generation
US8261267B2 (en) Virtual machine monitor having mapping data generator for mapping virtual page of the virtual memory to a physical memory
CN104079613B (zh) 用于多租户间共享应用程序对象的方法和系统
CN102693230B (zh) 用于存储区域网络的文件系统
CN109074316A (zh) 页面错误解决方案
US10169348B2 (en) Using a file path to determine file locality for applications
US11016886B2 (en) Multi-ring shared, traversable, and dynamic advanced database
US9772951B2 (en) Preemptive guest merging for virtualization hypervisors
JP5588072B2 (ja) メモリ割り当て方法、プログラム、及びシステム
JP5030647B2 (ja) 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム
CN110362404B (zh) 一种基于sql的资源分配方法、装置和电子设备
US10296363B2 (en) Tuning a virtual machine startup parameter
JP6103994B2 (ja) 文字列データ処理方法、プログラム及びシステム
US20140095718A1 (en) Maximizing resources in a multi-application processing environment
US9921858B2 (en) Apparatus and method for realizing runtime system for programming language
JP6173031B2 (ja) コンピュータにおいてオブジェクトを管理するための方法、プログラム及びシステム
EP2972837B1 (en) Dynamic memory management for a virtual supercomputer
US20220292095A1 (en) Data expanse using a bitmap and interrupt
CN116954818A (zh) 一种基于增量存储的靶场模板管理方法与系统
KR20220062669A (ko) 데이터 저장 방법, 장치, 조회 방법, 전자 설비 및 판독가능 매체
Thakkar et al. Scheduling in Big Data Heterogeneous Distributed System Using Hadoop
JP2021009443A (ja) 情報処理装置及びコンパイラプログラム
Givelberg Object-Oriented Parallel Programming

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160301

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170130

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: 20170207

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170228

R150 Certificate of patent or registration of utility model

Ref document number: 6103994

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees