4

Java Swing ベースのアプリケーションには、クライアント側で Java Webstart を使用します。最近、jnlp リンクをクリックすると、「Java 仮想マシンを起動できません」という奇妙なエラーが発生します。

jnlp ファイルの max-heap-size 設定が 1024m に設定されているのに対し、ほとんどのクライアント PC には 1 GB の物理メモリしかないため、すぐにわかります。max-heap-size を 512m に戻して問題を解決しました。現在、jnlp ファイルの関連行は次のようになっています。

 <j2se version="1.5+" initial-heap-size="100m" max-heap-size="512m"/>

jnlp の仕様を調べましたが、「Java 仮想マシン」の問題に関連するものは見つかりませんでした。理論的には、max-heap-size は initial-heap-size ほど重要ではありません。しかし、私たちの経験はまったく逆であることを示唆していました。

クライアント環境:

Windows XP SP2 ( 32 ビット )、Internet Explorer 8.06、メモリ 1G 注 max-heap-size を 1024m に設定すると、2G RAM を搭載したマシンで同じ問題が発生する可能性があります。

基本的に、私がここで探しているのは、なぜこれが起こっているのかについての参照/仕様/経験であり、物理メモリサイズを増やす以外にこの問題を回避する方法があるかどうかです.

もう 1 つの問題は、max-heap-size を指定しない場合、実際の物理メモリ サイズが max-heap-size として使用されるのか、それともシステムのデフォルトのサイズが使用されるのかということです。

ありがとう、ジェイソンW

4

2 に答える 2

3

この問題は、JVMに十分な大きさのメモリ領域を割り当てることができなかったことが原因である可能性があります。実装上の理由から、Javaオブジェクトヒープは連続した仮想アドレスに割り当てる必要があります。

2 GbRAMを搭載したWinXPボックスでは、これは約1.5 GBで壊れることに気づきました(これは、各PCで実行されているプロセスによって異なるため、YMMVです)。

いくつかの説明については、次の投稿をチェックしてください。

WindowsXPのJava最大メモリ

Javaヒープの最大サイズが固定されているのはなぜですか?

于 2010-08-22T09:54:13.990 に答える
1

Mac 版の javaws では、initial-heap-size と max-heap-size の両方が十分に考慮されていないことがわかりました。私は最終的にそれらを次のようなものに置き換えました:

      <j2se version="1.6+" java-vm-args="-Xmx1024m -Xms256m -Xss8m" />

そしてついに、ヒープサイズが大きいMacで動作するようになりました

于 2011-05-02T16:08:20.767 に答える