25

Java ヒープ メモリに問題が 1 つあります。512MB 以上のメモリを必要とする Windows サービスとして実行される Java で 1 つのクライアント サーバー アプリケーションを開発しました。2GB の RAM がありますが、アプリケーションを実行すると例外がスローされます

メモリ不足エラー:Java ヒープ領域

Java コントロール パネルですでにヒープ サイズ (最大 512MB) を設定していますが、それでも同じエラーが発生します。アプリケーションが Windows サービスとして実行されているため、コマンド ラインからヒープ サイズを設定できません。デフォルトのヒープ サイズを増やすにはどうすればよいですか?

4

5 に答える 5

41

Java 仮想マシンは、初期ヒープ サイズと最大ヒープ サイズを設定する 2 つのコマンド ライン引数 (-Xms と -Xmx) を取ります。_JAVA_OPTIONS という名前のシステム環境変数を追加し、そこにヒープ サイズの値を設定できます。
たとえば、512Mb の初期ヒープ サイズと 1024Mb の最大ヒープ サイズが必要な場合は、次のように使用できます。

Windows の場合:

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m

Linux では:

export _JAVA_OPTIONS="-Xms512m -Xmx1024m"

デフォルトの JVM ヒープ サイズは、Runtime クラスの totalMemory() メソッドを使用してプログラムで読み取ることができます。次のコードを使用して、JVM ヒープ サイズを読み取ります。

public class GetHeapSize {
    public static void main(String[]args){

        //Get the jvm heap size.
        long heapSize = Runtime.getRuntime().totalMemory();

        //Print the jvm heap size.
        System.out.println("Heap Size = " + heapSize);
    }
}
于 2012-07-20T11:17:34.980 に答える
3

予約済みメモリを増やす必要がある場合は、VM パラメータ -Xms および -Xmx があり、使用方法は -Xms512m -Xmx512m です。パラメータ -XX:MaxPermSize=256m もあります。これは、永続的な生成用に予約されたメモリを変更

します

于 2012-07-20T11:15:50.450 に答える
1

また、これを以下で使用してメモリを拡張します

export _JAVA_OPTIONS="-Xms512m -Xmx1024m -Xss512m -XX:MaxPermSize=1024m"

XmxJava 仮想マシン (JVM) の最大メモリ割り当てプールを指定します

Xms初期メモリ割り当てプールを指定します。

Xssスレッドスタックのメモリサイズの設定

XX:MaxPermSize: 永久世代の最大サイズ

于 2020-02-20T09:14:43.370 に答える