Javaヒープメモリに問題があります。Java 512MB以上のメモリを必要とするWindowsサービスとして実行されるクライアントサーバーアプリケーションを1つ開発しました。 2GBのRAMがありますが、アプリケーションを実行すると例外がスローされます
メモリ不足エラー:Javaヒープスペース
ただし、すでにJavaコントロールパネルでヒープサイズ(最大512MB)を設定しているのに、同じエラーが表示されます。アプリケーションがアプリケーションとして実行されるため、コマンドラインからヒープサイズを設定できませんWindowsサービスので、デフォルトのヒープサイズを増やすにはどうすればよいですか?
Java仮想マシンは、初期および最大ヒープサイズを設定する2つのコマンドライン引数:-Xmsおよび-Xmxを受け取ります。_Java_OPTIONSという名前のシステム環境変数を追加し、ヒープサイズ値を設定できます。
たとえば、512Mbの初期サイズと1024Mbの最大ヒープサイズが必要な場合は、次のように使用できます。
windowsの場合:
SET _Java_OPTIONS = -Xms512m -Xmx1024m
linuxの場合:
export _Java_OPTIONS="-Xms512m -Xmx1024m"
RuntimeクラスのtotalMemory()メソッドを使用して、プログラムでデフォルトのJVMヒープサイズを読み取ることができます。次のコードを使用して、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);
}
}
予約済みのメモリを増やす必要がある場合は、VMパラメータ-Xmsおよび-Xmx、使用法-Xms512m -Xmx512mなどがあります。パラメータ-XX:MaxPermSize = 256mもあります。世代
アプリケーションがWindowsサービスとして実行されている場合、[コントロールパネル]-> [管理ツール]-> [サービス]で、サービスに実行パラメーターを追加できます。
これは私のために働いた:
export _Java_OPTIONS = "-Xmx1g"
私にとっては機能しなかったので、スペースがないことが重要です。コピーして貼り付けることをお勧めします。それから私は走った:
Java -XshowSettings:vm
そしてそれはあなたに言うでしょう:
_Java_OPTIONSをピックアップ:-Xmx1g