Maison > Java > JavaBase > Quelle est la fonction de la méthode finalize en Java

Quelle est la fonction de la méthode finalize en Java

hzc
Libérer: 2020-07-03 15:34:34
original
4665 Les gens l'ont consulté

La méthode finalize en Java est une méthode fournie dans la classe Object. Avant que le GC ne soit prêt à libérer l'espace mémoire occupé par l'objet, il appellera d'abord la méthode finalize().

Quelle est la fonction de la méthode finalize en Java

La méthode finalize() est une méthode fournie dans la classe Object avant que le GC ne soit prêt à libérer l'espace mémoire occupé par l'objet, il le fera d'abord. appelez la méthode finalize(). Il est défini dans Object comme suit :

protected void finalize() throws Throwable { }
Copier après la connexion

1 Le timing de l'appel finalize()

et le destructeur de C++ ( objet (Le destructeur sera appelé avant l'effacement). En Java, en raison du mécanisme de recyclage automatique de GC, il n'y a aucune garantie que la méthode finalize sera exécutée à temps (le moment du recyclage des objets indésirables est incertain), et ils ne le peuvent pas non plus. sera garanti. sera exécuté (le programme ne déclenche pas le garbage collection du début à la fin).

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;
	}
}
//无输出
Copier après la connexion
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()
Copier après la connexion

2 Quand faut-il l'utiliser

La méthode finalize() est généralement utilisée pour libérer des ressources non Java (telles que des ressources de fichiers ouverts, des connexions à une base de données, etc.) ou de la mémoire allouée lors de l'appel de méthodes non Java (méthodes natives) (telles que les fonctions de la série malloc() du langage C).

3 Pourquoi vous devriez éviter de l'utiliser

Tout d'abord, en raison de l'incertitude quant au moment d'appeler la méthode finalize(), d'un objet à Le temps qu'il faut entre le début de l'inaccessibilité et l'exécution de la méthode finalize() est arbitrairement long. Nous ne pouvons pas compter sur la méthode finalize() pour recycler les ressources occupées en temps opportun. La situation possible est que le gc n'a pas été déclenché avant d'épuiser les ressources. Par conséquent, l'approche habituelle consiste à fournir une méthode close() explicite. pour que le client appelle manuellement.
De plus, remplacer la méthode finalize() signifie que davantage d'opérations sont nécessaires lors du recyclage des objets, prolongeant ainsi le temps de recyclage des objets.

4 Laissez l'objet vivre à nouveau

Grâce à la fonctionnalité selon laquelle la méthode finalize() ne sera appelée qu'une seule fois au maximum, nous pouvons prolonger le cycle de vie de l'objet .

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
	}
}
Copier après la connexion

Tutoriel recommandé : "tutoriel Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal