How to mark an object for garbage collection by the GC (Garbage Collector)?

后端 未结 4 1629
清歌不尽
清歌不尽 2021-02-08 06:26

In Java, is there a way to mark an object for garbage collection by the GC, during its next clean up cycle?

I\'ve heard that setting an object to

4条回答
  •  误落风尘
    2021-02-08 06:42

    I know this question has been answered, but there are ways you can manipulate the way that the Java Garbage collector looks at your references. You can do this through Soft References, Weak References, and Phantom References. Take a look at the java.lang.ref package for a better explanation.

    Also here's a nice sample to determine when a PhantomReference is about to be garbage collected:

    A phantom reference is used to determine when an object is just about to be reclaimed. Phantom references are safer to use than finalization because once an object is phantom reachable, it cannot be resurrected.

    // Create the phantom reference.
    ReferenceQueue rq = new ReferenceQueue();
    PhantomReference pr = new PhantomReference(object, rq);
    
    // Wait until the object is about to be reclaimed.
    try {
        while (true) {
            Reference r = rq.remove();
            if (r == pr) {
                // The object is about to be reclaimed.
                // Clear the referent so that it can be reclaimed.
                r.clear();
            }
        }
    } catch (InterruptedException e) {
    }
    

提交回复
热议问题