人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Java アプレットでOut of Memoryが発生して困っています。
-Xmsや-Xmxオプションをつけて、ヒープ領域を大きくしようとしているのですが、
何らかのリミット(制限)に引っかかり、大きくできない状態に陥っています。
Java アプリケーションでは、問題なく大きくできるのでJava Pluginの制限かと思っ
ているのですが…制限しているモノが何かを知りたいのです。
(実メモリ、JREのバージョン、OS、ブラウザ、レジストリを変更、調査してみました
が若干の変化はあるものの明確に連動しているものが見つかっていません)

Java アプレットのヒープ領域に制限を掛けているものを教えてください。
できれば、解除方法も…。

●質問者: maq
●カテゴリ:コンピュータ インターネット
✍キーワード:Java JRE OS Out アプリケーション
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● ffmpeg
●20ポイント

これかな

http://goldnet.ii2.cc/paint/pbbs_manual/faq/memory/

◎質問者からの返答

確かにその設定なんですけど…その設定値に対してリミット(制限)を掛けているところを知りたいのです。


2 ● ardarim
●20ポイント

具体的な数字(これ以上はダメというサイズ)はどれくらいなんでしょうか。

Javaアプレットで動作するということは、ブラウザのプロセス内で動作するということになりますので、ブラウザ自体が使うメモリの分、Javaアプリ単体で動かすよりも使える最大メモリは当然少なくなります。


通常Windowsでは1つのプロセスが扱える仮想アドレス空間は、プログラム、スタック、ヒープなど全てをひっくるめて2GBです。これを超えるメモリは確保できません。

観測するとしたら実メモリよりは仮想メモリの使用量を見たほうが良いと思います。これには例えばProcess Explorerなどが使えます。タスクマネージャで表示されるメモリ使用量はワーキングセットサイズなのであまり意味がありません。


またJavaはメモリリークがないとか思っていませんか? 低級言語でのポインタによるメモリリークはありませんが、かといってGCは万能というわけではありません。GCは不要になったオブジェクトを自動的に解放してくれますが、使わなくなったオブジェクトへの参照が残っているとGCはまだ必要なオブジェクトと判断して解放しません。こうしたことの積み重ねでJavaの空きヒープ領域はどんどん減っていきます。(いわばJava版のメモリリークです)

◎質問者からの返答

残念ながら、まったく回答になっていません。

Xmxで設定しようとしている値は2GBなどというふざけた値では

ありません。せいぜい512MB程度です。

また、リークうんぬんの話は全く聞いていません。

あくまで知りたいのは、制限を掛けている部分です。


3 ● KUROX
●20ポイント

http://shinsei.e-gov.go.jp/menu/prepare/use.html

「20MB以上の申請データを送信する場合について」

で、java pluginの-Xmxの設定の変更方法が載ってますが、

このように指定しても、Out of Memoryになりますか?

◎質問者からの返答

はい。と言うかXmx512mの設定を行うと何らかの制限にかかって

そこまでサイズを指定できないのが問題なのです。

設定の方法自体は1の回答でも書きましたが、既知です。

よろしくお願いします。


4 ● KUROX
●20ポイント

指定できないと言う意味が不明ですが・・。

設定画面でエラーになるんでしょうか?

ならないのなら、設定は反映されてるだろうし、

ヒープ領域は拡大されてると思います。

-----------

アプレットに実コードをいれて、本当にメモリーが増えてるかどうか

調べてみたほうが良さそうに思います。

totalMemory

maxMemory

freeMemory

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Runtime....()

------------

増えてないのなら、私なら、

本当にそのアプレットは、Java PluginのJVMをつかって

実行してるかどうかを疑いますね。

------------

あと、明示的に Runtime.getRuntime().gc()をかいてみるとか。

アプレットとアプリケーションでは、gcのタイミングが違うという

ことは考えられます。

◎質問者からの返答

指定できるのですが、一定の値(これが環境によって、少し違う場合あり)を超えると

起動できないエラーが発生します。

設定をすることによって、挙動が変わるのでJava PluginのJVMが使用されていること

は間違いないですし、起動できる範囲ではverboseオプションを付けることでメモリの

状況は確認しています。


5 ● DASM
●20ポイント

アプレットが原因なのか、VM のメモリ設定が原因なのか、問題の切り分けが出来ていないので、まずそこからではないですか?

のようなサイトで max の値を知ることもできるし、ただメモリを allocate するだけのアプレットもすぐ作れるはずです。Java コンソールを表示しながら作業すると、より確実でしょう。

VM のメモリ設定が原因ではない (他のアプレットでは目的のヒープ領域を確保できる) ことをまず確かめてはどうでしょうか。

同じ VM、他のアプリでうまくいくなら、アプレット固有の問題です。

VM のメモリ設定が原因なら、お手あげです。アプレットで 512 MB 以上に設定すると OutOfMemory になることがあるというのは有名なバグで、直そうという動きがあるようですが、まだ最新の jre に反映されていないかもしれません。

Java Web Start ならうまくいくかもしれません。

◎質問者からの返答

アプレット固有の問題との認識です。

512MBにすべての環境で広げられれば十分なのですが…広げられない環境がある原因が

わからないので困っています。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ