Javaのコア技術第四章疑問点

1、Javaのファイナライズ()メソッド

オブジェクトによって占有されていたメモリを再利用する準備ができて、ガベージコレクタが時にメモリ解放されると、それは本当にオブジェクトを回復する必要があるときに最初のオブジェクトのメソッドを確定呼び出し、その後、再び次のガベージコレクションされます:Javaはファイナライズは次のように動作を想定しました。役割のファイナライズ():ファイナライズは、アプリケーションでJNI呼び出しを再利用するための特別なメモリを呼び出す前に、前にGCに発生し、次回のGCは、オブジェクトのすべてのメモリが解放されることを保証するためにGC後に発生します。

そして、疑問があるでしょう。それ自体がJavaは、ガベージコレクションがあります。なぜそれはまだ()メソッドを確定する必要がありません。その理由はあります。ヒープ内のゴミオブジェクトに対してのみ再利用するためのJavaのガベージコレクション。つまり、ヒープメモリブロックの私たちの新しいアウトのための唯一の責任JVMです。ジャワの非実現と呼ばれる方法(通常はC / C ++)と非ヒープメモリーを呼び出すに出たときに新しいものではありませんが、JNIメソッドを通じて人のために。JVMガベージコレクションプロセスは、それを行うことはできません。このメモリの消費量は、したがって、回収されません。従ってJavaはファイナライズ()メソッドを導入しました。

だから今、私たちは明らかに知ることができます。生まれ少ないメモリ消費量管理JVMに対処するために()メソッドを確定。特殊なメモリのための一般的なリリース(メモリJVMが処理することはできません)。したがって、このクラスは、ネイティブ・メソッドを定義している場合。これは、いくつかの非ヒープメモリの消費量を生産しました。このとき、前に非ヒープメモリを解放するために()メソッドを確定考えます。

 

()別のファイナライズデストラクタ付き

  -java GCメカニズムので、デストラクタの概念はありません!

  C ++デストラクタでない-finalize:デストラクタは間違いなくオブジェクトを破壊するが、GCは、それが実行されるので、メカニズムは、頻繁に発生しませんので、確定することは不確実であるだろう。GCが発生しない場合には、確定()メソッドが呼び出されません。でも、GCが発生したクラスは、ガベージオブジェクトでない場合は、確定()メソッドが呼び出されません。

GC収集メカニズム

  ガベージコレクタは、新たな「特別なメモリ」で作られていない私たちのヒープブロックすることにより、新しいをリリースする予定-java、ガベージコレクタは管理ではありません。
  -いわゆる特殊なメモリは、C / C ++でJNIを介してシステムにメモリ割り当てを参照し、手動で削除する必要がない場合は、これらのメモリは、メモリに占領されていたであろう。
  -また、ガベージコレクションのコスト自体、仮想マシンは常にGCではないので、メモリはJVMが不足しているときにだけはGCをトリガします。

2、クラスパス

https://www.cnblogs.com/hejing-swust/p/8514251.html

おすすめ

転載: www.cnblogs.com/exceptionblog/p/10984443.html