-3

LSI でコードを実行していますが、最初にデータベースから大量のデータをフェッチする必要があります。小さなデータセットでは問題なく動作しています。データセットを増やすと、次のエラーが発生します。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

現在、2 GB の RAM を搭載したシステムでコードを実行しています。RAM容量に関連するエラーか、それとも別の原因によるエラーか。

ありがとう!

4

5 に答える 5

2

Javaを実行するときは、特定の懸念事項のためにVMパラメーターを渡す必要があります。ヒープ値を増やす必要があります。

-Xms40m - minimum heap size in MB
-Xmx1024m - maximum heap size in MB

java test.java -Xms40m -Xmx1024m

アプリを起動するとき。詳細については、Oracleのドキュメントを参照してください。または、Eclipseを使用する場合は、ecliplse.iniファイル内のこのサイズを増やしてください。

于 2012-07-05T04:10:07.070 に答える
1

最初に、サーバーに割り当てたヒープ スペースの量を確認します。低いと思われる場合は、次のパラメーターを使用して増やすことができます-

-Xms128m   -  minimum heap size in MB
-Xmx1024m -  maximum heap size in MB

通常、使用可能な hep サイズがいっぱいになり、プログラムの通常の実行に使用できるメモリがなくなると、この例外が発生します。

于 2012-07-05T05:19:59.697 に答える
0

RAMに関連する場合、プロセッサはJavaを停止します。絶対にそうではありません。これは、 Java ヒープ メモリがいっぱいで、ヒープ スペース内のすべてのオブジェクトがアクティブであるため、ガベージ コレクション プロセスが実行されないためです。そのため、さらにデータを処理するための十分なメモリがヒープ領域にありません。この理由で、このエラーが発生します。

于 2012-07-05T04:15:00.093 に答える
0

アプリケーションが持つことができる最大ヒープ サイズを増やすだけでなく (これだけで十分かもしれません)、使用しているメモリの量を大幅に減らすことができるようです。ドキュメントをインデックス化する場合、標準の LSI セットアップでは、一度に 1 つのドキュメントしかメモリにロードできないはずです。たとえば、ドキュメントのリストがあるとします。リストをループして、ロード、インデックス、クローズします。すすいで繰り返します。

あなたのコードは小さなデータセットで動作するので、これがあなたの問題かもしれないと思っています。もう 1 つの可能性は、データ セットを拡張するときに、すべてのヒープ スペースを使い果たす巨大なドキュメントを含めることです。その場合、最も簡単な解決策はヒープ領域を増やすことです。

于 2012-07-05T04:20:21.993 に答える
0
  1. -最大ヒープ サイズの Xmx、
  2. -初期ヒープ サイズの Xms、

重要な点は、両方の構文で大文字と小文字が区別されることです。とても注意してください。

TomcatでJavaヒープサイズを設定するには? Tomcat サーバーを停止し、環境変数 CATALINA_OPTS を設定してから、Tomcat を再起動します。この変数の使用方法については、ファイル tomcat-install/bin/catalina.sh または catalina.bat を参照してください。例えば、

set CATALINA_OPTS=-Xms512m -Xmx512m (Windows、値の前後に "" なし) export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash、値の前後に "") setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh、 "" 値の前後)

catalina.bat または catallina.sh で、CATALINA_OPTS、JAVA_OPTS、またはその両方を使用して Tomcat JVM オプションを指定できることに気付いたかもしれません。CATALINA_OPTS と JAVA_OPTS の違いは何ですか? CATALINA_OPTS という名前は Tomcat サーブレット コンテナに固有のものですが、JAVA_OPTS は他の Java アプリケーション (JBoss など) で使用される場合があります。環境変数はすべてのアプリケーションで共有されるため、Tomcat が他のアプリケーション用の JVM オプションを誤って取得することは望ましくありません。私は CATALINA_OPTS を使用することを好みます。

JBossでJavaヒープサイズを設定するには?

JBoss サーバーを停止し、$JBOSS_HOME/bin/run.conf を編集してから、JBoss サーバーを再起動します。JAVA_OPTS の行を次のように変更できます。

JAVA_OPTS="-server -Xms128m -Xmx128m"

EclipseでJavaヒープサイズを設定するには? 2 つのオプションがあります。 1. eclipse-home/eclipse.ini を次のように編集し、Eclipse を再起動します。

-vmargs-Xms64m-Xmx256m2. または、最後に追加オプションを指定して eclipse コマンドを実行することもできます。-vmargs より後のものはすべて JVM オプションとして扱われ、JVM に直接渡されます。このようにコマンド ラインで指定された JVM オプションは、常に eclipse.ini のオプションをオーバーライドします。例えば、

日食 -vmargs -Xms64m -Xmx256m

NetBeansでJavaヒープサイズを設定するには? NetBeans を終了し、ファイル netbeans-install/etc/netbeans.conf を編集します。例えば、

netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none

疑問がある場合は、以下のリンクを参照してください。詳細を提供してくれてありがとう。

ここにリンクの説明を入力

于 2012-07-05T05:37:37.217 に答える