2012-06-04 42 views
9

Mac OS X上でJava用の最大メモリサイズ "heap"を変更しようとしています。 "-XX:MaxPermSize"を変更する場所はたくさんありますが、ファイルを検索し、その設定をどこで変更するかを知らない。Mac OS XでJava用の最大メモリヒープを変更する

+0

鍬あなたは、javaを実行していますか? – Mark

+3

なぜ「スカラ」タグがありますか? Scalaを実行している場合、答えはJavaとまったく同じではありません(java -cp /.../ scala-library.jar:...ではなく 'scala'を使用している場合)。 –

+0

私が過去にやったことは、 ''/bin/java'''を ''/bin/realjava'''に移動してシェルスクリプト ''/bin/java''を作成し、特定のデフォルト設定の実際のもの。しかし、私はこれに反対することを勧めます。個々のJVMを正確な要件に調整する方がずっと優れています。 – opyate

答えて

1

最大ヒープサイズは-Xmxスイッチで設定します。

-XX:MaxPermSizeをはあなたがこのパラメータを使用してJava VMが使用できるメモリを設定することができ、合計ヒープ

+0

-Xmxスイッチはメモリサイズをグローバルに変更しません。一度に1つのクラスでのみ動作します。私はどのようにすべてのスクリプトのメモリ割り当てをグローバルに変更するのだろうかと思います。 – user1435853

+2

@ user1435853ここで、-Xmxはグローバルではないことを読んだことがありますか?これは、JVM全体に適用されます。 –

+0

「-XX:MaxPermSize」を設定するためにどのファイルを編集しますか?私がクラスを指定しない限り、 "java -Xmx"コマンドは私のためには機能しません。ヒープメモリの設定はグローバルに変更されません。 – user1435853

10

のサブセットであるパー​​マ世代の最大サイズを指定するために使用されます。

-Xms64m -Xmx200m 

-Xmsは最小メモリを指定します。 -Xmxは最大値です。

アプリを実行するときに指定する必要があります。あなたはapp.jarという名前のjarファイルは、あなたが

java -Xms64m -Xmx512m -jar app.jar 

を入力し、それを実行することができますたとえば、私は、32ビットマシン上で使用すると、JVMに1GBのより多くを与えることができないと思います。

+1

IDEを使用している場合は、おそらくこれらのパラメータをプロジェクトの設定に設定できます。 eclipseでは、例えば、Run-> Run Configurationsをクリックするとできます。 –

+0

なぜ1Gだけですか?それは理論では3Gか4Gではないのですか? –

+0

32ビットアーキテクチャでは最大4GBの物理メモリを使用できますが、アプリケーション、プロセスなどが使用できるメモリは多くの要因によって異なります。 例えば、OSにはシステムプロセスなどを処理するためのメモリ量が必要です。 VMメモリの制限がどこから来るのか分かりません。残念です。とにかく、私はそれがまたあなたが現在使っているOSに依存すると思います。 Windowsでは、1GB以上のVMをVMに与えることはできません –

1

ターミナルからアプリケーションを起動している場合は、コマンドラインで引数を指定したい:

java -XX:MaxPermSize=128m ... 

これは、他のプラットフォーム上と同じです。

これをアプリケーションバンドル(つまり、ダブルクリック可能な通常のMacアプリケーションのようなJavaアプリケーション)に設定する必要がある場合は、バンドル内にあるinfo.plistファイルを編集する必要があります通常は見えません。

This pageにはIntelliJでこれを行う方法が記載されていますが、他のバンドルされているMac Javaアプリケーションにも適用されます。

5

私はWEKAを使用していましたが、同じ問題がありました。 ここで、私は解決策を見つけました、そして、それは簡単でした。

Goアプリケーションへ==>(ウェカのような)特定のアプリケーションに 左クリック==>ショーパッケージ内容==>内容==> Info.plistの==> Javaの==> VMOptions ==>増加(私のMacではデフォルトで1Gbでしたが、私は6Gbに増えました)

+0

私はこの答えを好む、それは簡単でシンプルで永久的な修正を提供するからです。 –

1

私は端末で非常に大きな配列を持つJavaプログラムを実行しようとしていました。これは、メモリが不足して保管が、私は、スレッドごとに許可増加メモリで問題を修正:

$ java -Xss12G name 

ここ-Xss12Gは、スレッドごとに12GBを割り当て、その後nameを実行するためにJavaランタイムに指示します。同様に-Xss4Gはスレッドごとに4Gbを使用します。 $Terminalコンソールプロンプトであり、フォルダーとあなたの名前を持つことができます。ターミナルでコマンドjava -Xを書くことによって、あなたは、ヒープとスレッドのメモリを割り当てる方法の詳細を取得します

$ java -X