ホームページ  >  記事  >  Java  >  Java リファレンス

Java リファレンス

PHPz
PHPzオリジナル
2024-08-30 15:17:41925ブラウズ

Java 言語の利点の 1 つは、自動的にメモリを管理するため、プログラマはメモリ管理の負担を負う必要がなく、オブジェクトが不要になったときにオブジェクトのメモリを解放することを心配する必要もありません。 Java ガベージ コレクター スレッドはプログラマに代わってこれを行います。 JVM の制御下で不要なオブジェクトを一掃し、メモリを解放します。プログラマは、java.lang.ref クラスを使用して、必要に応じてオブジェクトをいつガベージ コレクションするかを制御することもできます。 Java には、ガベージ コレクションの方法、または参照に対するガベージ コレクターの動作に基づいて、4 つのタイプの参照があります。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java リファレンスの種類と例

Java 参照には、参照に対するガベージ コレクターの動作に基づいて 4 つのタイプがあります。

  • 強い参照: これは Java のデフォルトの参照です。オブジェクトを定期的に定義すると、強参照を作成できます。
  • 弱い参照: この参照は明示的に指定されます。弱参照は、java.lang.ref.WeakReference クラスを使用して作成できます。
  • ソフト参照: ソフト参照は、lang.ref.SoftReference クラスを使用して作成できます。
  • ファントム参照: ファントム参照は、lang.ref.PhantomReference クラスを使用して作成できます。

1.強力な参照

強参照は通常、Java コードを作成するとき、またはオブジェクトを作成するときに使用します。強参照を持ち、メモリ内でアクティブなオブジェクトはガベージ コレクションの対象にはなりませんが、null を指す強参照を持つオブジェクトはガベージ コレクションの対象になります。たとえば、以下のコード スニペットでは、変数 ob が ClassA 型のオブジェクトです。

ClassA ob = new ClassA();

「ob」オブジェクトにはクラス ClassA を指す強い参照があります。 ob はアクティブなオブジェクトであるため、このオブジェクトはガベージ コレクションできません。

以下のように参照「ob」が null を指している場合 –

ob = null;

現在、オブジェクトはクラス ClassA を参照していません。オブジェクトはガベージ コレクションの対象になりました。

コード:

package p1;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA(); // default reference or Strong Reference
System.out.println(ob);
ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection
System.out.println(ob);
}
}

出力:

Java リファレンス

2.弱い参照

弱い参照はガベージ コレクションの対象となります。 JVM が弱い参照を持つオブジェクトを検出すると、このオブジェクトはマークされ、JVM によってガベージ コレクター スレッドが実行されるときにガベージが収集されます。これらのタイプの参照は、オブジェクトのエントリに対して WeakHashMap で使用されます。弱参照は、lang.ref.WeakReference クラスによって作成できます。アプリケーションで使用できる弱参照は、DBConnection を確立し、データベースが閉じられるとガベージ コレクターによって接続が解放されます。たとえば、以下のコード スニペットでは、変数 ob が ClassA 型のオブジェクトです。

ClassA ob = new ClassA();

「ob」オブジェクトはガベージ コレクション可能にするための強参照であり、以下のようにその参照を弱参照に変換する必要があります –

WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);

これで、オブジェクトはクラス ClassA を弱参照し、オブジェクトはガベージ コレクションに使用できるようになり、JVM がガベージ コレクション スレッドを実行するとガベージ コレクションが行われます。

コード:

package p1;
import java.lang.ref.WeakReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now create Weak Reference object to which <u>ob</u> object is pointing
WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob);
// Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory
ob = null;
System.out.println(ob);
// weakly referenced <u>ob</u> object can get back
ob = weakob.get();
System.out.println(ob);
}
}

出力:

Java リファレンス

3.ソフトリファレンス

ソフト参照のオブジェクトは、JVM がメモリを使い果たすか、JVM が非常にメモリを必要とするまで、ガベージ コレクションの対象になりません。弱参照は、lang.ref.SoftReference クラスによって作成できます。たとえば、ソフト参照は弱参照と同様に作成できます。

SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);

コード:

package p1;
import java.lang.ref.SoftReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();// default reference or Strong Reference
System.out.println(ob);
// now create soft Reference object which ob object is pointing
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
// Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory
ob = null;
System.out.println(ob);
// the soft referenced, ob object can get back
ob = softob.get();
System.out.println(ob);
}
}

出力:

Java リファレンス

4.ファントム参照

ファントム参照のオブジェクトはガベージ コレクションに使用できますが、ガベージ コレクションの前に、オブジェクトは JVM によって「参照キュー」という名前の参照キューに入れられます。オブジェクトに対する Finalize() 関数呼び出しの後。弱参照は、lang.ref クラスによって作成できます。ファントムリファレンス

コード:

package p1;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.PhantomReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now Create Reference queue object
ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>();
// Create Phantom Reference object to which <u>ob</u> object is pointing
PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq);
// Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing
ob = null;
System.out.println(ob);
// to get back object which has been Phantom referenced returns null
ob = phantomob.get();
System.out.println(ob);
}
}

出力:

Java リファレンス

以上がJava リファレンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。