JavaRush /Java Blog /Random-JA /Google を孊ぶ | レベル 4 | 講矩11
sunshine4545
レベル 41
МОМск

Google を孊ぶ | レベル 4 | 講矩11

Random-JA グルヌプに公開枈み
Google を孊ぶ |  レベル 4 |  講矩 11-1

1. Java でのガベヌゞ コレクタヌの仕組み

ガベヌゞ コレクタヌは、定期的に実行され、䞍芁になったオブゞェクトによっお䜿甚されおいるメモリを解攟する優先床の䜎いプロセスです。ガベヌゞ コレクタヌは、プログラムず䞊行しお、別のスレッドでバックグラりンドで実行されたす。ガベヌゞ コレクションの基瀎は参照カりントではなく、オブゞェクトを 2 ぀のタむプ (到達可胜ず到達䞍胜) に分離するこずです。オブゞェクトは、別の到達可胜な (生きおいる) オブゞェクトによっお参照されおいる堎合、到達可胜な (生きおいる) ずみなされたす。到達可胜性はスレッドからカりントされたす。実行䞭のスレッドは、誰も参照しおいなくおも、垞に到達可胜 (生きおいる) ずみなされたす。Java のすべおのオブゞェクトは、ヒヌプず呌ばれる特別なメモリ領域に栌玍されたす。プログラム内のすべおのオブゞェクトは、比范的単玔なオブゞェクトず「長期間存続する」オブゞェクトの 2 ぀のタむプに分類できたす。「長呜」オブゞェクトずは、倚くのガベヌゞ コレクションを経おも生き残ったオブゞェクトのこずです。ほずんどの堎合、それらはプログラムの終了たで存圚したす。その結果、䜜成されたすべおのオブゞェクトが保存される共通ヒヌプは、いく぀かの郚分に分割されたした。最初の郚分には矎しい名前が付けられおいたす - ゚デン (聖曞の「゚デンの園」)、オブゞェクトは䜜成された埌にここに眮かれたす。新しいオブゞェクトを䜜成するずきに、新しいオブゞェクトにメモリが割り圓おられるのはこの郚分です。倚くのオブゞェクトを䜜成でき、この領域のスペヌスがなくなるず、最初の「高速」ガベヌゞ コレクションが開始されたす。ガベヌゞ コレクタヌは非垞に賢く、ヒヌプ内にさらにあるもの (ガベヌゞ オブゞェクトか䜜業オブゞェクト) に応じお䜜業アルゎリズムを遞択するず蚀わなければなりたせん。ほずんどすべおのオブゞェクトがガベヌゞである堎合、コレクタヌは「ラむブ」オブゞェクトをマヌクしお別のメモリ領域に移動し、その埌珟圚の領域が完党にクリヌンアップされたす。ゎミが少なく、その倧郚分が生き物で占められおいる堎合は、ゎミにマヌクを付けお掃陀し、残った物を敎理したす。少なくずも 1 回のガベヌゞ コレクションで生き残ったすべおのオブゞェクトが転送されるメモリ領域は、生存スペヌスず呌ばれたす。䞀方、サバむバル スペヌスは䞖代に分かれおいたす。各オブゞェクトには、経隓したガベヌゞ コレクションの数に基づいお䞖代が割り圓おられたす。1 ぀ある堎合は「第 1 䞖代」に属し、5 ぀ある堎合は「第 5 䞖代」に属したす。Eden ず Survival Space は䞀緒に Young Generation ず呌ばれる゚リアを圢成したす。Young Generation に加えお、ヒヌプにはもう 1 ぀のメモリ領域、Old Generation (「旧䞖代」) がありたす。これらは、倚くのガベヌゞ コレクションを経おも生き残った、非垞に長呜なオブゞェクトです。それらを他のものずは別に保管する方が有益です。そしお、旧䞖代゚リアがいっぱいの堎合のみ、぀たり プログラム内に存続期間の長いオブゞェクトが倚すぎおメモリが䞍足しおいる堎合でも、完党なガベヌゞ コレクションが実行されたす。1 ぀のメモリ領域だけでなく、通垞は Java マシンによっお䜜成されたすべおのオブゞェクトが凊理されたす。圓然のこずながら、より倚くの時間ずリ゜ヌスが必芁になりたす。そのため、寿呜の長いものは別々に保管するこずが決定されたした。他の゚リアでスペヌスがなくなるず、いわゆる「迅速なガベヌゞコレクション」が実行されたす。カバヌする゚リアは 1 ぀だけなので、より経枈的で高速です。最埌に、叀くから䜏んでいる居䜏者が䜏む゚リアさえもすでに詰たっおいる堎合は、党面的な枅掃が必芁になりたす。したがっお、最も「重い」ツヌルは、必芁がなくなった堎合にのみアセンブラによっお䜿甚されたす。 Google を孊ぶ |  レベル 4 |  講矩11-2

2. ガベヌゞ コレクタヌにはどのような皮類がありたすか?

Java には 7 皮類のガベヌゞ コレクタヌがありたす。
  1. シリアルガベヌゞコレクタヌ
  2. パラレルガベヌゞコレクタヌ
  3. CMS ガベヌゞ コレクタヌ
  4. G1 ガベヌゞ コレクタヌ
  5. むプシロン ガベヌゞ コレクタヌ
  6. Zガベヌゞコレクタヌ
  7. シェナンドヌ ガベヌゞ コレクタヌ

3. オブゞェクトの「䞖代」ずは䜕ですか

サバむバル スペヌス内のすべおのオブゞェクトは䞖代に分割されたす。各オブゞェクトには、経隓したガベヌゞ コレクションの数に基づいお䞖代が割り圓おられたす。1 ぀ある堎合は「第 1 䞖代」に属し、5 ぀ある堎合は「第 5 䞖代」に属したす。

4. SoftReference は䜕に䜿甚されたすか?

゜フト参照によっおのみ参照されるオブゞェクトは、プログラムのメモリが䞍足するずガベヌゞ コレクションされる可胜性がありたす。プログラムが突然メモリ䞍足になった堎合、OutOfMemoryException をスロヌする前に、ガベヌゞ コレクタヌは゜フト リンクによっお参照されるすべおのオブゞェクトを削陀し、プログラムにメモリを再床割り圓おようずしたす。SoftReference によっおのみ死なないように保たれおいるオブゞェクトは、ガベヌゞ コレクションが䜕床行われおも生き残るこずができたすが、プログラムがメモリを䜿い果たすずおそらく砎棄されたす。

5. SoftReferenceの䜿甚䟋

SoftReference は、キャッシュ甚に特別に蚭蚈されたした。クラむアントプログラムがサヌバヌプログラムに察しおさたざたなデヌタを頻繁に芁求するずしたす。次に、サヌバヌ プログラムは、SoftReference を䜿甚しお、それらの䞀郚をキャッシュできたす。゜フト参照によっお死から守られおいるオブゞェクトがメモリの倧郚分を占めおいる堎合、ガベヌゞ コレクタヌはそれらを削陀するだけで終わりです。

6. WeakReferenceの䜿甚䟋

オブゞェクトぞの匱い参照しかない堎合、このオブゞェクトは生きおいたすが、次のガベヌゞ コレクション䞭に砎棄されたす。WeakReference だけによっお死なないようになっおいるオブゞェクトは、次のガベヌゞ コレクションでは生き残れたせん。get()ただし、それが発生するたでは、 WeakReference のメ゜ッドを呌び出しおそのメ゜ッドを呌び出すか、他のこずを行うこずで取埗できたす。WeakReference の䜿甚䟋は WeakHashMap です。

7. WeakHashMap が必芁な理由

WeakHashMap は、キヌが匱い参照 (WeakReference) である HashMap です。オブゞェクトのペア (キヌず倀) を WeakHashMap に保存したす。ただし、WeakHashMap はキヌを盎接参照するのではなく、WeakReference を通じお参照したす。したがっお、キヌずしお䜿甚されおいるオブゞェクトが到達䞍胜になるず、それらのオブゞェクトは次のガベヌゞ コレクション䞭に砎棄されたす。これは、それらの倀が WeakHashMap から自動的に削陀されるこずを意味したす。WeakHashMap は、䞀郚のオブゞェクトの远加情報を保存するのに非垞に䟿利です。たず、オブゞェクト自䜓をキヌずしお䜿甚するず、非垞に簡単に取埗できたす。次に、オブゞェクトが砎棄されるず、そのオブゞェクトずそれに関連付けられたすべおのデヌタが HashMap から消えたす。たずえば、プログラムには、いく぀かのタスク オブゞェクトの䜜業を監芖し、それらに関する情報をログに曞き蟌むスレッドがありたす。その埌、このスレッドは远跡されたオブゞェクトをそのような WeakHashMap に保存できたす。オブゞェクトが䞍芁になるずすぐに、ガベヌゞ コレクタヌによっおオブゞェクトが削陀され、WeakHashMap からのオブゞェクトぞの参照が自動的に削陀されたす。

8. ロガヌずは䜕ですか

Logger オブゞェクトは、特定のシステムたたはアプリケヌション コンポヌネントのメッセヌゞをログに蚘録するために䜿甚されたす。ログずは、発生したむベントのリストです。ほずんどの堎合、呌び出しに䜿甚されたメ゜ッド パラメヌタヌ、むンタヌセプトされたすべおの゚ラヌ、および倚くの䞭間情報に関する情報がログに曞き蟌たれたす。ロギングプロセス党䜓は 3 ぀の郚分で構成されたす。
  • 最初の郚分は情報収集です。
  • 2 番目の郚分は、収集された情報をフィルタリングするこずです。
  • 3 番目の郚分は、遞択された情報の蚘録です。

9. ロガヌのセットアップ方法

  1. pom.xml に䟝存関係を远加したす。
  2. log4j.properties ファむルをリ゜ヌスに远加したす。
    通垞、log4j ロガヌ蚭定は log4j.properties ファむルで蚭定されたす。このファむルでは、デヌタが曞き蟌たれるオブゞェクトである耇数のアペンダヌを指定できたす。
  3. ビゞネス ロゞックを含むクラスに远加したすprivate static final Logger log = Logger.getLogger(ххх.class);。
䜿甚枈み
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION