2016-12-02 10 views
1

Windows 7のラップトップと16GBのRAMがあります。ただし、複数のJavaサーバーを実行するとOutOfMemoryエラーが表示されますが、Windowsタスクマネージャーには6GBの空き物理メモリが残っていることが表示されます。私のJVMは実行中のすべてのJavaアプリケーションに対して〜2GBのヒープしか割り当てられないようです。 64ビットJVMオブジェクトヒープに十分なスペースを確保できませんでした。

は、だから私はいくつかの非常に単純なJavaコードを書いた:

public class HelloWorld { 
    public static void main(String[] args) { 
     for(;;) System.out.println("Hello, World"); 
    } 
} 

マイ-jvmバージョン:

$ java -version 
java version "1.8.0_111" 
Java(TM) SE Runtime Environment (build 1.8.0_111-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) 

JAVA_HOME "C:\プログラムファイル\のJava \ jdk1.8.0_111は"

JRE_HOME "C:¥Program Files¥Java¥jre1.8.0_111"

私はシンプルにしましたjava -Xmx256m -Xms256m HelloWorldとwor予想通りヒツジシラミバエ私はjava -Xmx2048m -Xms2048m HelloWorldに切り替えたときに、しかし、私は、次を得る:

Error occurred during initialization of VM 
Could not reserve enough space for object heap 

私は複数のJDKを試みたが、それらのどれも機能していません。ウィンドウとJVMはどちらも64ビットです。

この問題を解決するにはどうすればよいですか?

+0

["VMの初期化中にエラーが発生しました。 -Xmx3Gを使用してオブジェクトヒープのための十分な領域を確保できませんでした(http://stackoverflow.com/questions/9303889/error-occurred-during-initialization-of-vm-could-not-reserve-enough-space-for) 。特に、この回答を参照してくださいhttp://stackoverflow.com/a/9304270/529630 – Dunes

+0

スワップを有効にしていますか? Windowsのメモリアカウンティングはlinuxとは異なります。 – the8472

答えて

1

私のJVMは、実行中のすべてのJavaアプリケーションに対して〜2GBのヒープしか割り当てられないようです。

これは間違っています。 JVMは、> 2GBのヒープを要求して使用することができます。

Windowsは、Javaプロセスが要求できるものを制限している必要があります。また、Windowsが複数のJavaプロセス用にメモリを予約している可能性もありますが、JVMが使用していないためメモリは空きとして表示されています。

FWIWでは、実際に必要なメモリよりも多くのメモリを使用しているJVMを実行することはお勧めできません。

修正しますか?

  1. しないでください。あなたのラップトップで2GBのJavaサーバーをたくさん稼働させたり、ヒープサイズをより合理的なものに減らしたりしないでください。 JVMが割り当てたすべてのメモリーをJVMが使い始めるまで、メモリーのオーバーコミットは魅力的なアイデアです。その後、あなたのシステムは...

  2. どうやってやりますか? 1つのJVMで複数のサーバーを実行できます。

  3. メモリを増やす。

0

-Xms2048mを使用しないでください。 JVMは2Gbの連続したメモリブロックを一度に要求します。 JVMがヒープの必要性のために追加のmemをいつ取得するかを決定させます。 Windowsの場合は、proc仮想メモリ(アンチウイルス、ファイアウォール、ルートキット、ウィルスなど)にマップされたdllが不正に整列された結果、仮想メモリが断片化する可能性があります。 ideからJavaを実行して、エージェント(ネイティブインプリメンテーションを使用)を使用すると、隠しコンテンツを追加して仮想メモリを処理することもできます。プロセスの仮想メモリを観察する素晴らしいツールは、vmmapです。Microsoft Sysinternals suite