2

私はデータベースからレコードにアクセスし、それを処理し、データベースを再度更新するJavaアプリケーションフォームを持っています。JavaアプリケーションをJARに変換し、コマンドプロンプトから実行することでこれを行っています。テスト中、データベースのテーブルごとに20レコードしかありません。そのために、メモリ不足エラーを回避するために、次のようにjarを実行しています。

java -jar -Xmx512m MyApp.jar

データベースに多くのレコード (50,000) が含まれている場合、jar の実行中にヒープ サイズを増やす方法、または jar の実行中にニーズに基づいてヒープ サイズを動的に増やす方法。

ありがとう

4

4 に答える 4

1

最大ヒープ サイズは、既に使用した -Xmx オプションを使用してプログラムを実行する前に設定されます。この情報に基づいて、JVM は指定された量まで、必要なだけのヒープ サイズを使用します。したがって、プログラムが 1 MB の RAM しか必要としない場合、JVM はその量だけを使用します。1G を必要としていて、512M しか与えなかった場合、OutOfMemoryError が発生します。

したがって、基本的には、必要に応じてプログラムにより多くのヒープ スペースを与えることができ、JVM は必要に応じて使用されるヒープ サイズを動的に調整します。

これは意図した動作ではない場合があり、ヒープ サイズの下限は -Xms で設定できます。次に、JVM は常に Xms と Xmx の間のサイズのヒープを予約します。

于 2012-12-20T07:35:37.233 に答える
0

最大値は、実際に使用する量ではなく、必要になる最大ヒープですこれは、実行を続けるよりもアプリケーションをクラッシュさせたくないポイントです。JVMは、これまでに使用されたメモリを動的に管理します。

jarの実行中にニーズに基づいてヒープサイズを動的に増やす方法。

したがって、JVMで256 MBを使用したいが、動的に30 GBまで拡張したい場合は、次のように設定します。

java -ms256m -mx30g -jar MyApp.jar

最小値でも使用が保証されているわけではありません。JVMは、メモリ使用量をこのレベルに維持するために最小限の労力を実行します。Hello Worldプログラムは、最小値を何に設定しても、256MBのヒープを使用しません。

于 2012-12-20T09:09:17.940 に答える
0

これにより、最大ヒープサイズが 1Gb に増加します。

java -Xms256m -Xmx1024m -jar MyApp.jar

ここで、-Xms は初期 Java ヒープ サイズを指定し、-Xmx は最大 Java ヒープ サイズを指定します。

JVM へのパラメーターは、-jar 部分の前に渡す必要があります。その理由は、「java -version」を実行するとわかります。

使用法:

java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
于 2012-12-20T07:35:52.547 に答える
0
-Xmx2048m -XX:-UseGCOverheadLimit

これを VM 引数に設定します。より少ないメモリサイズを設定できます 2048

于 2012-12-20T07:33:22.043 に答える