Javaでヒープサイズを増やす


276

8 GBのRAMを搭載したWindows 2003サーバー(64ビット)で作業しています。ヒープメモリの最大値を増やすにはどうすればよいですか?-Xmx1500mフラグを使用して、ヒープサイズを1500 Mbに増やしています。ヒープメモリを物理メモリの75%(6 GBヒープ)に増やすことはできますか?


2
試しました-Xmx6gか?これはうまくいきませんでしたか?何を観察しましたか?
oxbow_lakes

2
ヒープの増加を試みたが失敗したと思いますか?64ビットJVMを使用していますか?
Bart Kiers、2009年

コメントありがとうございますが、これは機能していません
Sunil

まあ-それが機能していないことをどうやって知っていますか?JVMが起動しませんか?
oxbow_lakes

回答:


327

32ビットシステムでは4GBに増やすことができます。64ビットシステムを使用している場合は、さらに高くすることができます。誤って選択した場合でも心配する必要はありません。32ビットシステムで5gを要求した場合、Javaは無効な値について文句を言って終了します。

他のユーザーが投稿したように、cmd-lineフラグを使用します-例

java -Xmx6g myprogram

java -Xと入力すると、完全なリスト(または、ほぼ完全なリスト)を取得できます。


16
私の経験では、Javaが32b VMを使用して受け入れる実際のヒープサイズ(32bまたは64bシステムでは、VMはここで重要な部分です)は約2Gです。また、驚いアスカーはまず検索して見つけることができませんでした:stackoverflow.com/questions/1596009/... と: stackoverflow.com/questions/37335/...
wsorenson

2
ああ、もちろんそうです-32ビットシステムでは、2 GBのメモリしかアドレス指定できません。
スティーブB.

最大ヒープサイズと最小ヒープサイズを同じにする必要はありますか?
user1747935 2014

1
いいえ。しかし、JVMがサイズ変更に時間を浪費することは決してないため、一般的にそれが行われます。TBH、それが大事なことは間違いない。
スティーブB.

1
@PhilipRegoは、JVMが対処できる限界まで、好きなように設定します。-Xmx2Gはメモリを2Gに設定します(-Xmsも参照)。これは、メモリがどれだけ必要になるかについては何も言っていません。
スティーブB.

155

コマンドラインオプションを使用して、JVMによって割り当てられたヒープサイズを増やすことができます。ここには3つのオプションがあります。

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

上記の行では、最小ヒープを16MBに、最大ヒープを64MBに設定できます。


28

32ビットJVMでは、理論的に設定できる最大ヒープサイズは4GBです。より大きなヒープサイズを使用するには、64ビットのJVMを使用する必要があります。以下を試してください:

java -Xmx6144M -d64

-d64フラグは、JVMに64ビットモードで実行するように指示するため、重要です。


上司に感謝しますが、私のシステムでは機能していません。他に何か欠けていることがあります
Sunil

4
「機能しない」と定義します。起動せず、エラーが発生しませんか?起動しますが、異なるヒープサイズを使用しますか?
ケビン

11

日食で直接JVMによって割り当てられたヒープサイズを増やすことが可能です日食IDEでgoto

実行---->実行構成---->引数

-Xmx1gを入力します(Xmx256mまたはXmx1gのような最大サイズを設定するために使用されます...... m-> mb g ---> gb)


3
これを追加するには、VM引数を指定する必要があります(Eclipseには2つのオプションがあります)。
マットボイル

11

java -d64 -Xms512m -Xmx4g HelloWorld

-d64:64ビットJVMを有効にします-Xms512m:初期ヒープサイズを512 MBに設定します-Xmx4g:最大ヒープサイズを4 GBに設定します(ここでのJavaファイル名はHelloWorld.javaです)


9

以下のようにJVMパラメータ-Xmsおよび-Xmxを渡すことにより、ヒープサイズを増やすことができます。

JARファイルの場合:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Javaファイルの場合:

 java -Xms4096M -Xmx6144M ClassName

上記のパラメーターは、InitialHeapSize(-Xms)を4GB(4096 MB)に、MaxHeapSize(-Xmx)を6GB(6144 MB)に増やします。

ただし、若い世代のヒープサイズは同じままで、追加のHeapSizeが古い世代のヒープサイズに追加されます。Young Gen HeapとOld Gen Heapのサイズ等しくするには-XX:NewRatio = 1 -XX:-UseAdaptiveSizePolicy paramsを使用します。

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX:NewRatio = Old Gen Heap Size:Young Gen HeapSize(この比率でプレイして目的の比率を得ることができます)。


7

ヒープメモリを物理メモリの75%に増やすことはできますか(6GBヒープ)。

はい、できます。実際、必要に応じて、物理メモリの量以上に増やすことができます。

これを行うのが適切かどうかは、システムで他にどれだけ実行されているかによって異なります。特に、現在実行中のアプリケーションとサービスの「ワーキングセット」が使用可能な物理メモリを大幅に超える場合、システムは「スラッシュ」を起こしやすくなり、仮想メモリページのディスクへの移動やディスクからの移動に多くの時間を費やします。正味の影響は、システムがひどく遅くなることです。


コメントありがとうございますしかし、どうすれば増やすことができますか?
サニル

-Xmx6000mを試してください。64ビットバージョンのJavaを使用している場合は動作するはずです。
スティーブンC

3
64ビットバージョンのJavaを実行していますか?64ビットオペレーティングシステムでは?
スティーブンC

4

以下のコマンドを使用して、ヒープサイズを6GBに変更してください

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

システムに8Gメモリがあり、タスクマネージャーから常に70%が使用されていることがわかります。これは6GメモリをJavaヒープサイズに割り当てることが可能ですか?
Reihan_amn

1
@Reihan_amnはい、いいえ。メモリを超えると、ページングに移行します。ページングは​​ディスク上にあり、非常に低速です。あなたがページファイルを超えると、あなたは悪い時間にいます。
CodeMonkey

2

数人が-Xms、およびのjvmオプションを使用して、ヒープサイズに関する具体的な回答を指摘しました-Xms。これは、jvmのメモリオプションの唯一のタイプではないことを指摘しておきます。特に、スタックオーバーフローを取得している場合は、などの追加オプションを追加してスタックのサイズを大きくする必要があります-Xss8m

この問題の場合、のようなjvmオプションが-Xms2g -Xmx6g -Xss8m解決策になります。

私がこの情報を共有しているのは、jvmメモリを増やす方法についてグーグルで検索したところ、このソリューションにたどり着いたためで、大量のメモリ割り当てではソリューションが機能しませんでした。特定の設定が何であるかがわかれば、スタックサイズを増やす方法をグーグルで調べて、不足しているパラメータを見つけることができました。:)これにより他の時間を節約できれば幸いです。:)


2

これは64ビットバージョンのJavaでのみ機能します。コントロールパネルに移動し、Javaアイコンをクリックします。Javaコントロールパネルの小さなウィンドウで、Javaメニューバーをクリックし、viewボタンをクリックします。

Javaプラットフォームが2つある場合は、以前のバージョンのJavaを無効にしてから、[ ランタイムパラメータ ] テキストフィールドをクリックして-Xmx1024m、RAMサイズ以下を入力します。ヒープサイズをRAMと同じにしないでください。システムがクラッシュします。


ヒープサイズをRAMと同じにしても、システムはクラッシュしません。代わりに、システムはページングを開始し、速度が遅くなります。
DaveTheMinion

0

はい。あなたはできる。

ヒープメモリを物理メモリの75%(6 GBヒープ)以上に増やすことができます。

64ビットを使用しているため、ヒープサイズを必要な量まで増やすことができます。32ビットを使用している場合は4GBに制限されています。

$ java -Xms512m -Xmx6144m JavaApplication

初期ヒープサイズを512 MBに、最大ヒープサイズを6 GBに設定します。

それが役に立てば幸い.. :)


これは、数年前に投稿された2つの上位投票の回答と非常に似ています。
Bernhard Barker

0

Javaコードでeclipse / STSを使用してpyファイルを実行すると問題が発生します。jvmヒープメモリが不足しているためにPyExceptionが発生します。下記の変更を行いましたが、この問題を解決することができました。以下は私のシステム構成です。

ここに画像の説明を入力してください

そして、これらは私が自分のワークスペースで行った変更であり、今や完璧に動作します。

ここに画像の説明を入力してください ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.