Javaのメモリ管理の注意事項

メモリモデル

1. PCプログラムカウンタ登録する登録します

厳密には、時に割り込みのみが実行を継続できることを保証するために、プログラムの現在の通常の実行のメモリアドレスを保持するデータ構造です。

JVM仕様よると、この地域でのメモリ例外をOutOfMemoryErrorがスローされません。 


2. JavaのスタックJavaスタック

各スレッドローカル変数テーブル方式、スタック操作、動的に記憶するため、それらはスタックフレーム(フレーム)を作成することは、方法を実行するために、この領域は、メモリ領域は、異常に最も傾向がある各スレッドが生成するスレッドのスタックに対応します接続は、この方法は、情報値等を返します。

JVM仕様は、メモリ例外のOutOfMemoryError、にStackOverflowErrorの2つの領域を定義します。 

コマンド設定:

-Xss


3.ネイティブメソッドは、ネイティブメソッドスタックスタック

そして、同じVMスタック、違いはJava仮想マシンのバイトコードを処理するスタック、同じオブジェクトの処理ではなく、地元のネイティブメソッドスタックが処理されます。契約の他の側面。

コマンド設定:

-XX:PermSizeを= 2M

-XX:MaxPermSizeを= 2M

 

4.ヒープヒープ

ヒープは、すべてのスレッドがインスタンス化されるので、オブジェクトが各インタフェースクラスニーズ、各タイプのため、この領域に格納され、この大きな領域は、仮想マシンが存在するの開始と、すべてのスレッドによってアクセスすることができますメモリは、メソッド内の同じ、複数のブランチではないメモリを必要と同じではありません、我々は、アドレス空間を割り当てる必要がどのくらい、作成するオブジェクトの数を知るためには、実行時にのみです。

GCの懸念はそれほど頻繁にも、GCヒープのヒープと呼ばれ、これの一部です。

ヒープは確かに例外にStackOverflowErrorタイプなので、唯一の関連型のOutOfMemoryError例外をスローしません。 

コマンド設定:

-Xms(最小ヒープ) 

-Xmx(最大ヒープ)


メソッドエリア方式エリア

使用済みストアクラスへの情報であっても、コンパイルされたコードの後に​​、仮想マシン、定数、静的メソッドでロードされています。

同じことは、例外のOutOfMemoryErrorの関連する型を投げることができます。


メモリの問題

メモリのうち1メモリオーバーフロー

定義:アプリケーションメモリの時にプログラムを指し、その使用のための十分なメモリ空間がない、メモリの外に表示されますが、例えば、整数に適用されますが、いくつかの長い間の十分なを節約するためにそれを保存するために、それはメモリが不足しています。

理由:

  • データベースから抽出されたようなメモリにロードされたデータの量が多すぎる、あまりにも多くのデータです。
  • クラスは、使用後に空になっていないオブジェクトへの参照のコレクションを持っているJVMようにリサイクルすることができません。
  • 無限ループまたはサイクルは、オブジェクトコードの過度の物理的存在を繰り返します。
  • BUGで使用されるサードパーティのソフトウェア;
  • スタートアップパラメータメモリの値が低すぎる設定されています。


2.メモリリークメモリリーク

メモリ領域を解放するためのアプリケーションのメモリがメモリリークの危険性を無視することができ、提出されたが、いくらメモリのメモリリークが非常に深刻な結果の蓄積が、遅かれ早かれ光を占領された後、それはプログラムを指します。


参考:

波を作ることを約束1.の「Java Web技術のインサイダーの詳細な分析」

2.王Wenjun「Javaプログラミングは、高い同時実行を説明します」

3.「メモリオーバーフローソリューション」  www.cnblogs.com/200911/p/39 ...





おすすめ

転載: juejin.im/post/5dc145916fb9a04a5d5864cb