検索
ホームページJava&#&ベースJavaのfinalizeメソッドの機能は何ですか

Java の Finalize メソッドは、Object クラスで提供されるメソッドであり、GC がオブジェクトによって占有されているメモリ領域を解放する準備ができる前に、最初に Finalize() メソッドを呼び出します。

Javaのfinalizeメソッドの機能は何ですか

finalize() メソッドは、Object クラスで提供されるメソッドです。GC がオブジェクトによって占有されているメモリ領域を解放する準備ができる前に、最初にFinalize() メソッドを呼び出します。 Object では次のように定義されています。

protected void finalize() throws Throwable { }

1 Finalize() 呼び出しのタイミング

は、次のようにデストラクタに関係します。 C (オブジェクト (クリアする前にデストラクタが呼び出されます)。Java では、GC の自動リサイクル機構により、finalize メソッドが時間内に実行されるという保証はありません (ガベージ オブジェクトのリサイクルのタイミングは不確実です)。それらは保証されますか? が実行されます (プログラムは最初から最後までガベージ コレクションをトリガーしません)。

public class Finalizer {
	@Override
	protected void finalize() throws Throwable {
		System.out.println("Finalizer-->finalize()");
	}

	public static void main(String[] args) {
		Finalizer f = new Finalizer();
		f = null;
	}
}
//无输出
public class Finalizer {

	@Override
	protected void finalize() throws Throwable {
		System.out.println("Finalizer-->finalize()");
	}

	public static void main(String[] args) {
		Finalizer f = new Finalizer();
		f = null;
		
		System.gc();//手动请求gc
	}
}
//输出 Finalizer-->finalize()

2 いつ使用するか

finalize() メソッドは通常、リリースに使用されます。非リソース (オープン ファイル リソース、データベース接続など)、または非 Java メソッド (ネイティブ メソッド) (C 言語の malloc() シリーズ関数など) を呼び出すときに割り当てられるメモリ。

3 使用を避けるべき理由

まず第一に、finalize() メソッドを呼び出すタイミングが不確実であるため、オブジェクトから に変わります。 到達不能になってから Finalize() メソッドが実行されるまでにかかる時間は任意に長くなります。占有されているリソースをタイムリーにリサイクルするために、finalize() メソッドに依存することはできません。リソースを使い果たす前に gc がトリガーされていないという状況が考えられます。そのため、通常のアプローチは、明示的に close() メソッドを提供することです。クライアントが手動で転送するため。
さらに、finalize() メソッドをオーバーライドすると、オブジェクトをリサイクルするときにさらに多くの操作が必要になり、オブジェクトのリサイクルにかかる時間が長くなります。

4 オブジェクトを再度存続させる

finalize() メソッドが最大 1 回しか呼び出されないという機能を利用して、オブジェクトのライフサイクルを延長できます。 。

class User{
	
	public static User user = null;

	@Override
	protected void finalize() throws Throwable {
		System.out.println("User-->finalize()");
		user = this;
	}
	
}

public class FinalizerTest {
	public static void main(String[] args) throws InterruptedException {
		User user = new User();
		user = null;
		System.gc();
		Thread.sleep(1000);
		
		user = User.user;
		System.out.println(user != null);//true
		
		user = null;
		System.gc();
		Thread.sleep(1000);
		System.out.println(user != null);//false
	}
}

推奨チュートリアル: "java チュートリアル"

以上がJavaのfinalizeメソッドの機能は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター