- PR -

Javaで共有メモリの使用について

1
投稿者投稿内容
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-09-12 16:13
UniX−Cのように、Javaで共有メモリって使用できますか?
頻繁にアクセスされるテーブルだけを共有メモリで持ちたいのですが、
どうすればいいのか困ってます。
おっきー
大ベテラン
会議室デビュー日: 2003/05/01
投稿数: 104
投稿日時: 2004-09-12 16:44
Unix-Cのような共有メモリっていったい何でしょうか?
グローバル変数のこと??

だとしたら static なフィールドを利用するのはどうでしょうか?

下記の例のように、static で宣言した map は
すべての Hoge インスタンスから参照されます。

class Hoge {
private static java.util.Map map = new java.util.HashMap();
}
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-12 18:52
 JavaからOSのAPIを呼び出せるなら、できるでしょうが、無理では?

 staticですると、そのアプリケーション内では共有できますが、他のアプリケーションとの共有はできない・・・ですよね?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-09-12 18:55
引用:

UniX−Cのように、Javaで共有メモリって使用できますか?


複数プロセス間でメモリを共有したいってことですか?
そういうのは知らないですねえ。
もしどうしてもやりたいとしたら、JNI使ってネイティブな
共有メモリのコードを呼び出すのかな?

JavaHouse-Brewersで検索したところ、こんな感じでした。
どうやら、共有メモリのようなものは無さそうですね。
ローカルでも、RMI使うしか無さそう(つまりソケット通信)。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-09-12 18:57
引用:

 JavaからOSのAPIを呼び出せるなら、できるでしょうが、無理では?


JNIって手はありますよね。
各プラットフォームごとにバイナリを用意する必要があるので、
Write Once, Run Anywhereな観点からはあまり宜しくありませんが。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-09-12 19:46
「System V IPC」の共有メモリ、だと、そういった物が(たぶん)ないのと、
共有メモリの更新を伝えるには別の方法(System V IPCならセマフォ?)も
必要になりますね。

「メモリマップドファイル」を流用するなら、J2SE 1.4 の
MappedByteBuffer (FileInputStream -> FileChannel 経由で作成)で
できるかも知れません。
 が、こちらもできたとしてもバッファの更新を伝える方法がわかんない。
(ありそうな気もしますが、追求してないです)
バッファの参照側でビジーループ回すわけにも行かないし、
Socketで通知するって手もあるでしょうが。
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-09-13 00:58
みなさん色々とご提案ありがとうございます。

色々考えてみたのですが、
メモリに置きたいテーブルのデータを、
クラス変数でもって、クラスローダをSharedでロードすれば解決しそうに思いました。

おそらく、Unixの共有メモリを使用するのと同じようなことができるように思いました。

今度のミーティングの時にでも提案してみたいと思います。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-09-14 00:18
引用:

クラス変数でもって、クラスローダをSharedでロードすれば解決しそうに思いました。


これって、プロセス間でのメモリ共有、という目標を達成できているんでしょうか?
JavaプログラムはJVMというプロセス上で動きますから、プロセス間=JVM間ということに
なりますよ。

複数のJVM間でメモリを共有するのが目標、というわけではないのでしょうか??
Sharedクラスローダって、もしかしてTomcatの話ですか?
1

スキルアップ/キャリアアップ(JOB@IT)