"コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、前記コンピュータの処理により、前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にするステップと、前記コンピュータの処理により、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページフォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付けるステップを有する、メモリ管理方法。前記読み取りデータであることを示すマークを付けるステップの後に、前記コンピュータの処理により、前記メモリ上の指定した領域を書き込み禁止にするステップをさらに有する、請求項1に記載のメモリ管理方法。前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページフォールトが起きることに応答して、前記コンピュータの処理により、前記データに書き込みデータであることを示すマークを付けるステップをさらに有する、請求項2に記載のメモリ管理方法。前記コンピュータの処理により、前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動するステップをさらに有する、請求項3に記載のメモリ管理方法。前記個別のメモリ区画に移動するステップは、ガベージコレクションまたは、前記ページフォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項4に記載のメモリ管理方法。コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、前記コンピュータの処理により、前記メモリ上の指定した領域を一時的または間欠的に書込み禁止にするステップと、前記コンピュータの処理により、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページフォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付けるステップを有する、メモリ管理方法。前記コンピュータの処理により、前記書き込みデータであることを示すマークを付けたデータを、個別のメモリ区画に移動するステップをさらに有する、請求項6に記載のメモリ管理方法。コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、前記コンピュータに、前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にするステップと、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページフォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付けるステップを実行させる、メモリ管理プログラム。前記読み取りデータであることを示すマークを付けるステップの後に、前記メモリ上の指定した領域を書き込み禁止にするステップをさらに有する、請求項8に記載のメモリ管理プログラム。前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページフォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付けるステップをさらに有する、請求項9に記載のメモリ管理プログラム。前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動するステップをさらに有する、請求項10に記載のメモリ管理プログラム。前記個別のメモリ区画に移動するステップは、ガベージコレクションまたは、前記ページフォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項11に記載のメモリ管理プログラム。コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にする手段と、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページフォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付ける手段を有する、メモリ管理システム。前記読み取りデータであることを示すマークを付けるステップの後に、前記メモリ上の指定した領域を書き込み禁止にする手段をさらに有する、請求項13に記載のメモリ管理システム。前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページフォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付ける手段をさらに有する、請求項14に記載のメモリ管理システム。前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動する手段をさらに有する、請求項15に記載のメモリ管理システム。前記個別のメモリ区画に移動するステップは、ガベージコレクションまたは、前記ページフォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項16に記載のメモリ管理システム。この発明の目的は、コンピュータのメモリ上にあるデータに対する、読み取りや書き込みなどの特性を、低いオーバーヘッドで検出する技法を提供することにある。この発明の他の目的は、検出されたデータの特性に基づき、メモリ上でデータを再配置して最適化する技法を提供することにある。この発明は、上記課題を解決するために、以下のような機能をもつメモリ分別プロファイラを提供する。メモリ分別プロファイラは、対象プロセスにアタッチされて動作する。すなわち、メモリ分別プロファイラは、対象プロセスのページを間欠的に、すなわち、定期的または一時的にアクセス禁止、または書き込み禁止にする。この処理は、調査したいメモリ領域にのみ行えばよい。メモリ分別プロファイラは、対象アドレスのページフォールトハンドラの機能を果たす。すなわち、ページフォールトを検出すると、そのアドレスとアクセス種別を対象プロセスに通知し、ページを元の状態に戻す。このとき、読み出しアクセスだった場合は、ページをまず、読み出しのみ書き込み禁止に変更してもよい。対象プロセスは、通知された情報から、当該アドレスに存在するデータを判別し、データを以下の3種類に分別する。Nある時点以降は全くアクセスされないR読み出しアクセスのみしか行われないW読み書き両方が行われる調査結果に基づき、対象プロセスのメモリ割り当て機構が、RやWのデータをそれぞれ別ページに再配置追い出すし、測定を継続する。なお、この再配置は、対象プロセスのメモリ割り当て機構でなく、ガベージコレクションGCのプロセスが動的に行ってもよいし、次回起動時にそれまでの調査結果から静的に行ってもよい。この発明によれば、メモリ分別プロファイラは、対象プロセスのページを間欠的に、すなわち、定期的または一時的にのみアクセス禁止、または書き込み禁止にするので、処理の低いオーバーヘッドで、アクセスされるデータを分別することが可能となる。また、分別の結果に基づきデータを再配置することで、WやRのデータを調査対象から外せるので、プロファイラの精度向上をはかることができる。また、アクセス禁止にする領域も減らせるので測定オーバーヘッドを低減することができる。以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータハードウェアのブロック図が示されている。図1において、システムバス102には、CPU104と、主記憶RAM106と、ハードディスクドライブHDD108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium4、インテル社のCore2DUO、AMD社のAthlonなどを使用することができる。主記憶106は、好適には、2GB以上の容量、より好ましくは、4GB以上の容量をもつものである。ハードディスクドライブ108には、オペレーティングシステムが、格納されている。オペレーティングシステムは、Linux商標、マイクロソフト社のWindows7、WindowsXP、Windows2003サーバ、アップルコンピュータのMacOSなどの、CPU104に適合する任意のものでよい。ハードディスクドライブ108にはまた、Apacheなどの、Webサーバとしてシステムを動作させるためのプログラムが保存され、システムの起動時に、主記憶106にロードされる。ハードディスクドライブ108にはさらに、Java仮想マシンVMを実現するためのJavaRuntimeEnvironmentプログラムが保存され、システムの起動時に、主記憶106にロードされる。ハードディスクドライブ108にはさらに、本発明の機能を実現するメモリ分別プロファイラ204図2が実行可能形式のファイルとして保存されている。メモリ分別プロファイラ204は、C、Cなどの既存のプログラミング言語処理系により、CPU104に適合する実行可能形式のコードを生成し得るコンパイラによって作成することができる。メモリ分別プロファイラ204は、使用時には主記憶106にロードされる。キーボード110及びマウス112は、オペレーティングシステムが提供するグラフィックユーザインターフェースに従い、ディスプレイ114に表示されたアイコン、タスクバー、テキストボックスなどのグラフィックオブジェクトを操作するために使用される。ディスプレイ114は、これには限定されないが、好適には、1024×768以上の解像度をもち、32ビットtruecolorのLCDモニタである。ディスプレイ114は例えば、後述するメモリ上でデータ再配置処理の進捗状況を示すために使用される。通信インターフェース116は、好適には、イーサネットプロトコルにより、ネットワークと接続されている。通信インターフェース116は、クライアントコンピュータ図示しないからApacheが提供する機能により、TCP/IPなどの通信プロトコルに従い、処理リクエストを受け取り、あるいは処理結果を、クライアントコンピュータ図示しないに返す。図2は、本発明を用いてJVMが使用するデータの分別を行う場合の、プログラムまたはプロセスの階層を示す図である。図1に示すハードウェアの上で、オペレーティングシステム202が動作し、オペレーティングシステム202上ではメモリ分別プロファイラ204が動作する。オペレーティングシステム202ではJava仮想マシンJVM206が動作し、メモリ分別プロファイラ204の機能をJVM206が呼ぶので、階層としては、メモリ分別プロファイラ204上にJVM206が位置するように図示されている。アプリケーションプログラム208は、Javaバイトコードから構成され、JVM206上で動作する。そして、必要に応じてJVM206を介して、メモリ分別プロファイラ204の機能を呼び出す。なお、図示しないが、ハードディスクドライブ108にはJITコンパイラが格納され、アプリケーションプログラム208は、JITコンパイラによってオペレーティングシステム202に直接実行されるバイナリコードに変換されてもよい。この場合は、JITコンパイラによってコンパイルされたバイナリコードが直接、メモリ分別プロファイラ204の機能を呼び出すことになる。なお、メモリ分別プロファイラ204は、JavaVirtualMachineToolInterfaceエージェントなどの形で実現してもよい。あるいは、オペレーティングシステム202の機能の一部として、メモリ分別プロファイラ204の機能を実装することもできる。さらには、クラウド環境などで使われる仮想マシンモニタに、メモリ分別プロファイラ204の機能を実装することもできる。次に、図3~図5のフローチャートを参照して、本発明の処理について説明する。図3は、JVM206が、メモリ上の所定の領域にあるデータオブジェクトやクラスデータなどのアクセス状態を測定する処理を示す。JVM206が、メモリ分別プロファイラ204を呼び出し測定開始を指示すると、メモリ分別プロファイラ204は、ステップ302で、ページフォールトハンドラを設定する。ページフォールトハンドラは、メモリ分別プロファイラ204の機能の一部であり、好適にはオペレーティングシステム202の機能を利用する。ステップ304で、メモリ分別プロファイラ204は、JVM206によって指定されたメモリ領域のページをアクセス禁止または書き込み禁止にする。アクセス禁止と書き込み禁止のどちらにするかは、調べたいデータの状態による。メモリ分別プロファイラ204は、メモリ領域のアクセス禁止を行うために、好適には、オペレーティングシステム202の機能を呼び出す。例えば、Linuxなら、mprotectというシステムコールが用意されている。intmprotectという書式で、addrの開始アドレスから、lenの長さの領域ページ単位に、protで設定したアクセスを設定する。prodには、アクセス不可、読み取り可、読み書き可などを設定可能である。このようなシステムコールをもたないオペレーティングシステムの場合、別途オペレーティングシステムの拡張モジュール、デバイスドライバなどを用意することになる。ステップ306で、メモリ分別プロファイラ204は、一定時間待つ。その時間設定は、アプリケーションプログラム208を実行するJVM206がメモリにアクセスする頻度などに応じて適宜決められる。ステップ306の間に、アクセス禁止されたメモリ領域のページにあるデータに対してアクセスがあるか、書き込み禁止されたメモリ領域のページにあるデータに対して書き込みがあると、ページフォールトが起きる。ページフォールトが起きたときの処理は、図4のフローチャートを参照して後で説明する。なお、JVM206は、どのデータがどのメモリのアドレスの範囲にあるかの情報をテーブルなどの形で維持しているので、ページフォールトがあったときのメモリのアクセスアドレスを知ることで、どのデータがアクセスされているかを知ることができる。ステップ308では、メモリ分別プロファイラ204は、測定終了かどうか判断する。測定終了の判断は、測定対象プログラムであるJVM206からの指示や、測定開始からの時間あるいは、データへのアクセス回数などによって行われる。まだ測定終了の条件を満たしていないなら、ステップ304に戻る。これにより、本発明の特徴の一つである、定期的にページをアクセス禁止にすることが達成される。ステップ308で測定終了の条件を満たしたと判断すると、メモリ分別プロファイラ204は、ステップ310でページのアクセス設定を、アクセス禁止または書き込み禁止から元に戻し、ステップ312でページフォールトハンドラを解除し、測定終了となる。次に図4のフローチャートを参照して、ページフォールトが起きたときの処理について説明する。ページフォールトが起きると、メモリ分別プロファイラ204は、ステップ402で、ページフォールトしたアドレスがページのアクセス設定を変更している領域内かどうか判断し、もしそうなら、ステップ404で、メモリ分別プロファイラ204は、読み出しアクセスかどうか判断する。読み出しアクセスなのか、書き込みアクセスなのかを判別するには次のようにする。まず、CPU、メモリコントローラ、オペレーティングシステムなどの機能により、ページフォールトが読み出しなのか書き込みなのか分かる場合がある。この場合は、その機能を利用する。そのような機能が使えない場合は、ページフォールトを引き起こした命令を調べることで、読み出しアクセスなのか、書き込みアクセスなのかを判別する。あるいは、ページを先ずアクセス禁止にしておき、ページフォールトが起きた場合はそのアドレスに、読み出しアクセスがあったと判断し、ページを読み出しのみに変更して続行する。そうして、そのアドレスでさらにページフォールトが起きた場合は、そのアドレスに書き込みがあったと判断し、ページを読み書き可能に変更して続行する。これによって、読み出しアクセスであったのか、書き込みアクセスであったのかが判別できる。こうして、ステップ404で、読み出しアクセスであると判断されると、メモリ分別プロファイラ204は、ステップ406で、ページフォールトしたアドレスのデータにWマークがなければRマークを付ける。このようなマークは実際上、上述した、どのデータがどのメモリのアドレスの範囲にあるかのテーブルに書くことができる。なお、この処理は調査対象プログラムであるJVM206を呼び返して行ってもよい。そして、ステップ408で、ページを書き込み禁止に変更して処理を終わる。一方、ステップ404で、書き込みアクセスであると判断されると、メモリ分別プロファイラ204は、ステップ410で、ページフォールトしたアドレスのデータにWマークを付ける。この処理も、調査対象プログラムであるJVM206を呼び返し、JVM206に行わせてもよい。そして、ステップ412で、ページを書き込み禁止に変更して処理を終わる。ステップ402に戻って、ページフォールトしたアドレスがページのアクセス設定を変更している領域内でないと判断されると、メモリ分別プロファイラ204は特別な処理を行わず処理を終える。その結果、ステップ414で、ページフォールトのデフォルト処理を行うルーチンが実行される。図5は、データ再配置処理のフローチャートを示す図である。データ再配置処理を行うルーチンは、典型的には、測定対象プログラムであるJVM206中に実装される。図5において、ステップ502では、データ再配置処理は、メモリ分別プロファイラ204の測定が行われていれば一旦終了させる。ステップ504では、データ再配置処理は、Wの付いたデータ、Rの付いたデータ、マークのないデータNをそれぞれ個別のメモリ領域に再配置する。ステップ506では、データ再配置処理は、NとRのメモリ領域について、メモリ分別プロファイラ204により測定を再開する。そして、Nの領域はアクセス禁止、Rの領域は書き込み禁止にする。ページフォールトの度毎に図5のデータ再配置処理を行うと処理が重くなるので、好適には、メモリ分別プロファイラ204にはデータ分別機能だけを行わせ、データ分別がある程度進んだきっかけで、図5のデータ再配置処理を行う。そのきっかけとは例えば、ガベージコレクションが行われたとき、あるいは、アプリケーションプログラム208が次に起動されたとき、などである。図6は、メモリ分別プロファイラ204によってデータが分別され、その結果に基づきデータ再配置処理がデータを再配置する様子を図式的に示す図である。図6は、メモリのページ602~610に、データ1~9が配置されている様子を示す。そこで測定対象のプログラムこれまでの例ではJVM206は、プログラムの初期化が終わったある時点でメモリ分別プロファイラ204を呼び出してページ602~610を定期的にアクセス禁止にし、データ1~9にRやWのラベルを付けていく。これはそれぞれ、そのデータに対して読み出し,書き込みのアクセスがあったことをあらわしている。ある程度ラベルが付けられた段階のあるきっかけで、図6に示すように、データ再配置処理が、Rが付いたデータと、Wが付いたデータをそれぞれ、ページ608とページ610に再配置する。ここで、メモリ分別プロファイラ204は、ページ602~606は定期的にアクセス禁止にし、ページ608は定期的に書き込み禁止にする。書き込みがあるとして分別済みのデータがあるページ610は、ページのアクセス変更は不要である。このように、素性が判明したデータを別ページへと再配置することで、アクセス禁止にする領域を減らし、測定の効率を上げることができる。このような処理を続けた結果が図6である。結果的にページ602~604には、全くアクセスされなかったデータが残り、ページ606~608にはRのラベルのデータすなわち、読み出しのみが行われたデータが配置され、ページ610には、Wのラベルが付いたデータすなわち、書き込みが行われたデータが配置される。この結果、ページ602~604はページアウトの候補となり、ページ606~608はCopy-on-Write機構などを利用したプロセス間共有の候補となる。次に本発明の処理の適用例をいくつか示す。その1つの適用例は、Javaヒープ内のオブジェクトの動的再配置であり、以下の処理を行う。JavaヒープのページをN、R、Wに3分割する、最初は全部Nとしておく。Nのページを定期的一時的にアクセス禁止、Rのページは書き込み禁止にし、ReadやWriteのあったオブジェクトを記録する。ガベージコレクションGCの際に、上で記録したオブジェクトはそれぞれRやWのページへ再配置する。その他のオブジェクトはNのページに残す。ただし、GC中はヒープのページはアクセス可能になっているとする。~を繰り返すことで、アクセスのあるオブジェクトをどんどんRやWのページへ追い出し、濃縮していく。この手順により、Nのページには最終的にアクセスされないオブジェクトだけが残り、ページアウトがされやすくなる。また、Rのページには読み出しのみのオブジェクトが集まるので、その内容を解析することで、JVM間のヒープ共有などの基礎データにすることができる。次に、別の適用例として、JavaVM内のクラスデータの静的再配置がある。この場合は以下の処理が行われる。JavaVMのクラス領域に対して本発明の処理を適用する。クラスデータ用のページをN、R、Wに分けておく。最初は全部Nに配置する。アプリケーション初期化後にページを定期的一時的にアクセス禁止にすることで、ReadやWriteが行われるクラスデータを見つけ、それぞれRやWとして記録する。次回起動時に、前回までの記録でRやWとなっていたクラスデータはそれぞれRやWのページに配置するようにする静的再配置。なお、クラスデータがオブジェクトのように動的に再配置できれば、実行中にこの作業を行うこともできるが、ここではできないという前提の実施例を示している。起動のたびに~を繰り返し、RやWの情報を正確にするとともに、初期化後もアクセスのあるクラスデータをどんどん別ページに集めていく。この手順により、アプリケーションの初期化後はアクセスされないクラスデータのページアウトが促進される。また、読み出しのみのクラスデータを解析することで、JVM間のクラスデータ共有を促進できる。以上、本発明の実施例を説明したが、この発明は、特定のハードウェア及びオペレーティングシステムあるいはアプリケーションプログラムに限定されないことに留意されたい。すなわち、メモリ領域を選択的にアクセス不可にできる任意のハードウェア及びオペレーティングシステム上で、データをメモリ上で動的もしくは静的に再配置可能な任意のアプリケーションに対して実施可能である。例えば、クラウド環境で使用される大規模環境のシステム上でも適用可能である。あるいは、スタンドアロンの環境で動作する場合にも適用可能である。"