1

「正しい」ヒープ サイズがないことはわかっていますが、アプリケーション (アプリケーション タイプ、jdk、os) で使用するヒープ サイズはどれですか?

JVM オプション-Xms(初期/最小) および-Xmx(最大) により、ヒープ サイズを制御できます。どのような状況でどのような設定が意味を成すか? デフォルトが適切なのはいつですか?

4

8 に答える 8

5

アプリケーションを試して、そのパフォーマンスを確認する必要があります。たとえば、私はこの巨大なモノリシック プロジェクトに取り組む新しい仕事に就くまで、常に IDEA を箱から出して実行していました。プロジェクト全体をコンパイルすると、IDEA の実行速度が非常に遅くなり、定期的にメモリ不足エラーが発生していました。

私が最初にしたことは、ヒープを 1 ギガに増やすことです。これにより、メモリ不足の問題は解消されましたが、それでも低速でした。また、IDEA が定期的に 10 秒程度フリーズした後、使用メモリが半分に減り、再び増加することにも気付きました。それがガベージ コレクションのアイデアのきっかけとなりました。-Xms512m、-Xmx768m と共に使用するようになりましたが、増分ガベージ コレクションを有効にするために -Xincgc も追加しました。

その結果、以前の IDEA を取り戻しました。スムーズに動作し、フリーズすることもなく、600m を超えるヒープを使用することもありません。

アプリケーションでは、同様のアプローチを使用する必要があります。典型的なメモリ使用量を特定し、アプリケーションがそれらの条件で適切に実行されるようにヒープを調整してみてください。ただし、上級ユーザーが設定を調整して、通常のデータ負荷から対処することもできます。

于 2008-09-17T13:41:06.670 に答える
3

アプリケーションの種類によって異なります。デスクトップ アプリケーションは、Web アプリケーションとは大きく異なります。アプリケーション サーバーは、スタンドアロン アプリケーションとは大きく異なります。

また、使用している JVM にも依存します。JDK5 以降の 6 には、アプリケーションのチューニング方法を理解するのに役立つ拡張機能が含まれています。

ヒープ サイズは重要ですが、それがガベージ コレクターでどのように機能するかを知ることも重要です。

JDK1.4 ガベージ コレクタのチューニング

JDK5 ガベージ コレクタのチューニング

JDK6 ガベージ コレクタのチューニング

于 2008-09-17T13:57:19.203 に答える
2

実際、Java がヒープ サイズを制限していることは非常に奇妙だと常に考えていました。通常、ネイティブ アプリケーションは、仮想アドレス空間がなくなるまで、必要なだけヒープを使用できます。Java でヒープを制限する唯一の理由は、ガベージ コレクターのようです。ガベージ コレクターにはある種の「怠惰」があり、必要がない限り、オブジェクトをガベージ コレクションしない場合があります。つまり、大きすぎるヒープを選択すると、アプリは常に必要以上のメモリを使用します。

ただし、Sun は何年にもわたって GC を大幅に改善しており、ネイティブ C アプリケーションの動作をエミュレートするために、初期ヒープ サイズを 32 MB (小さなプログラムの場合) または 64 MB (大きなプログラムの場合) に設定し、最大を1〜2 GBの何か。アプリが実際に 1 GB を超えるメモリを必要とする場合、(それほど大きなデータ オブジェクトを処理しない限り) 破損している可能性が高いですが、特定のヒープ サイズを超えるという理由だけでアプリを強制終了する理由はわかりません。

もちろん、これは通常の PC を指しています。携帯電話やその他の制限付きデバイス用の Java コードを作成する場合は、そのデバイスの制限に合わせて初期ヒープ サイズと最大ヒープ サイズを採用する必要があります。

于 2008-09-17T13:33:21.290 に答える
1

負荷の高い GUI アプリケーションの場合は 1.3Gb。

残念ながら、Linux では、JVM はその状況で 1.3G の仮想メモリを事前に要求しているようです。これは、必要がなくても見栄えが悪くなります (そして、ユーザーから多くの混乱した不満を引き起こします)。

于 2009-10-02T10:12:23.830 に答える
1

私の最もメモリ集約的なアプリでは:

-Xms250M -Xmx1500M -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 
于 2009-10-02T10:18:39.327 に答える
1

プラトーのメモリ使用量を明確に把握するには、JConsole または visualvm でかなりの時間を費やす必要があります。すべてが安定し、ヒープ メモリ使用量の特徴的なノコギリ曲線が表示されるまで待ちます。使用するガベージ コレクタに応じて、ピークは 70 ~ 80% のヒープになるはずです。

ほとんどのガベージ コレクターは、ヒープの使用率が特定の割合に達すると、フル GC をトリガーします。このパーセンテージは、関係する戦略に応じて、最大ヒープの 60% から 80% です。

于 2008-09-17T14:18:00.683 に答える
1

通常、1GB を超えるヒープは使用しないようにしています。主要なガベージ コレクションにコストがかかります。

アプリケーションを同じマシン上のいくつかの JVM に分割し、ヒープ サイズを大きくしない方がよい場合があります。

ヒープ サイズが大きいメジャー コレクションには、10 分以上かかる場合があります (最適化されていない GC アプリケーションの場合)。

于 2008-09-17T13:29:50.673 に答える
1

これは、アプリケーションとハードウェアの制限に完全に依存します。すべての人に合うサイズはありません。

jmap を使用すると、実際に使用しているヒープを確認でき、ヒープのサイズを適切に設定するための出発点として適しています。

于 2008-09-17T13:33:48.810 に答える