メモリモデルとランタイムデータ領域
主なデータは、ヒープおよびメソッド領域に格納されます。仮想マシンのスタックの場合、ネイティブメソッドスタック、プログラムカウンタは、スレッドプライベートです。
分割ヒープ、非ヒープ領域
原子炉は、二つのブロック、1つの古い地域に分け、地域は若いです
若者は、同じ大きさのような2つのブロック、1サバイバー(S0 + S1)に分割し、またから参照することができます
図は次のとおりです。
特にその領域に割り当てられ、作成一般的なオブジェクトと配列は、ヒープメモリ空間に割り当てられますが、いくつかの領域は、ヒープにあるのですか?
オブジェクトが作成されたエリア
新しいオブジェクトはメモリが臨界値に達した場合、その後、エデンのメモリ空間に要する時間はそう、いわゆるガベージコレクション(収集ごみ)をクリーンアップするために、エデンエリアに一般的に限られたメモリ空間エデンエリアのために割り当てられていますマイナーGCと呼ばれるGCは、マイナーGCはGCヤングエリアです。
GC後、いくつかのオブジェクトが離れてクリアされ、いくつかのオブジェクトにも、あなたはエデンのオブジェクトを一掃そして、その生存のためにサバイバー領域にオブジェクトをコピーして生きている必要があるかもしれません。
サバイバーエリア
サバイバー領域を分けることができます:S0 + S1(+へ)
同時点で、S0またはS1は、一つのデータ領域の存在であり、他方は空です。
アナログGC:
- 例えば、エデンの面積と面積だけ、この時間は、Toが空であるから、目的としています。
- GCのためのこの時間は、地域内のオブジェクトの年齢から、私たちはすべてのエデンエリアのライブオブジェクトは二つのオブジェクトの場所があるだろう生き残ることができるゾーンから、へのフィールドにコピーされている知っている、1になります。
- 対象年齢が予め設定された臨界値に達すると、オブジェクトは古い地区に移動されます場合は、重要な値が領域にコピーされます達していません
- この時からエデン地区やエリアがクリアされた(確かに、自分の場所を持っていなかったオブジェクトがGCによってGCオブジェクト)
- からなるために前から、スイッチの役割には、この時間は前から、なるには
- サバイバーを確保するために呼ばれる領域が空でどのような場合であること
- マイナーGCはに領域が満たされて、このプロセスを繰り返しますが、すべてのオブジェクトは、古い時代にコピーされます。
旧地区
一般的な古い時代の面積が比較的大きなオブジェクトであるか、またはこのしきい値を超え、旧地区、旧主要GCと呼ばれるGC領域にGCの操作があるでしょう。
メジャー/マイナー/フルGCを理解する方法
マイナーGC:新世代
主なGC:歳
フルGC:歳新生代+
ごみ収集
オブジェクトの場合、唯一それがガベージコレクトされていることを確認します。Javaが実行する自動メモリ管理とガベージコレクションで、自動ガベージコレクション機構は、Javaヒープオブジェクトを見つけることで、オブジェクトの分類や差別、使用されているオブジェクトとオブジェクトを探して使用されていない場合、これらのオブジェクトをクリアするために使用されていません。
オブジェクトがガベージであるかどうかを確認する方法
- 参照カウント
オブジェクトの場合、単にアプリケーションで参照されたオブジェクトを保持し、それが逆説明がゴミである、オブジェクトがガベージないことを意味します。
- 到達可能性解析
GCルートによってオブジェクト、およびオブジェクトが到達可能であるかどうかを確認するために先に探し始めます。
(としてGCルート:クラスローダ、スレッド、ローカル変数テーブルの仮想マシン・スタック、静的メンバ、ローカル変数のメソッドスタックへの定数参照)
VMスタック(ローカル変数テーブル・スタック・フレーム)参照オブジェクト
メソッド静的プロパティクラスオブジェクトは、領域によって参照します
一定の基準物体領域の方法
ネイティブメソッドスタックJNI(すなわち、一般によると、ネイティブメソッド)参照オブジェクト
ガベージコレクションのアルゴリズム
クリアマーク(マークスイープ)
- タグ:リカバリするメモリが必要なオブジェクトを検索し、それらをマーク
このヒープでは、すべてのオブジェクトが再度スキャンし、このようにして回収するオブジェクトの必要性を決定することができる、時間がかかります
- クリア:削除されたオブジェクトは、対応するメモリ空間を解放し、回復をマークする必要があります
短所:クリアラベルは、メモリスペースデブリに多くのスペースを生成します、スペースデブリプログラムに大きなオブジェクトを割り当てるために、将来の必要性であまりにも多くの時間が実行されて発生する可能性があり、十分な連続したメモリを見つけることができないと、他のゴミのために早く出発しなければなりませんでしたコレクション・アクション。
マークとスイープ2つのプロセスは時間がかかり、非効率的です。
これは、スペースデブリを大量に生成されます。
複製(コピー)
メモリは、二つの等しい領域に分割され、それぞれの一方のみ
前記メモリ使用量が終わったらまた別のものにライブオブジェクトをコピーします、そしてメモリを取り外す4明確一度使用されています。
短所:低空間利用
复制收集算法在对象存活率较高时就要进行较多的复制操作,效率会变低。更关键的是,还要浪费50%的空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有的对象都有100%存活的极端情况,所以老年代一般不能直接选用这种算法。
标记-整理(Mark-Compact)
标记整理:标记过程任然与“标记-清除”算法一样,但是不是直接将可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
让所有的存活对象都向一端移动,清理掉边界以外的存在
分代收集算法
在堆内存中使用的算法
Young区:复制算法(对象在被分配之后,可能生命周期比较短,Young区复制效率高)
Old区:标记清除或标记整理(Old区对象存活时间较长,来回复制是没有必要的)