The finalize method in java is a method provided in the Object class. Before the GC is ready to release the memory space occupied by the object, it will first call the finalize() method.
The finalize() method is a method provided in the Object class. Before the GC is ready to release the memory space occupied by the object, it will first call finalize() method. It is defined in Object as follows:
protected void finalize() throws Throwable { }
1 The timing of finalize() call
is related to the destructor of C (object (The destructor will be called before clearing). In Java, due to the automatic recycling mechanism of GC, there is no guarantee that the finalize method will be executed in time (the timing of recycling garbage objects is uncertain), nor can they be guaranteed. will be executed (the program does not trigger garbage collection from beginning to end).
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 When should it be used
The finalize() method is generally used to release non- Resources (such as open file resources, database connections, etc.), or memory allocated when calling non-Java methods (native methods) (such as the malloc() series functions of C language).
3 Why you should avoid using it
First of all, due to the uncertainty in the timing of calling the finalize() method, it changes from an object to The time it takes from the beginning of unreachability to the execution of the finalize() method is arbitrarily long. We cannot rely on the finalize() method to recycle the occupied resources in a timely manner. The possible situation is that the gc has not been triggered before we exhaust the resources. Therefore, the usual approach is to provide an explicit close() method for the client to manually transfer.
In addition, overriding the finalize() method means that more operations are required when recycling objects, thereby prolonging the time for object recycling.
4 Let the object live again
Using the feature that the finalize() method will only be called once at most, we can extend the life cycle of the object.
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 } }
Recommended tutorial: "java tutorial"
The above is the detailed content of What is the function of finalize method in java. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Zend Studio 13.0.1
Powerful PHP integrated development environment

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6
Visual web development tools