< prev index next >

src/java.base/share/classes/java/lang/ref/Finalizer.java

Print this page

  1 /*
  2  * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any
 23  * questions.
 24  */
 25 
 26 package java.lang.ref;
 27 
 28 import java.security.PrivilegedAction;
 29 import java.security.AccessController;
 30 import jdk.internal.access.JavaLangAccess;
 31 import jdk.internal.access.SharedSecrets;
 32 import jdk.internal.misc.VM;
 33 
 34 final class Finalizer extends FinalReference<Object> { /* Package-private; must be in
 35                                                           same package as the Reference
 36                                                           class */
 37 
 38     private static ReferenceQueue<Object> queue = new NativeReferenceQueue<>();
 39 
 40     /** Head of doubly linked list of Finalizers awaiting finalization. */
 41     private static Finalizer unfinalized = null;
 42 
 43     /** Lock guarding access to unfinalized list. */
 44     private static final Object lock = new Object();
 45 
 46     private Finalizer next, prev;
 47 
 48     private Finalizer(Object finalizee) {
 49         super(finalizee, queue);
 50         // push onto unfinalized
 51         synchronized (lock) {
 52             if (unfinalized != null) {
 53                 this.next = unfinalized;
 54                 unfinalized.prev = this;
 55             }
 56             unfinalized = this;
 57         }
 58     }

  1 /*
  2  * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any
 23  * questions.
 24  */
 25 
 26 package java.lang.ref;
 27 
 28 import java.security.PrivilegedAction;
 29 import java.security.AccessController;
 30 import jdk.internal.access.JavaLangAccess;
 31 import jdk.internal.access.SharedSecrets;
 32 import jdk.internal.misc.VM;
 33 
 34 final class Finalizer extends FinalReference<Object> { /* Package-private; must be in
 35                                                           same package as the Reference
 36                                                           class */
 37 
 38     private static ReferenceQueue<Object> queue = new ReferenceQueue<>();
 39 
 40     /** Head of doubly linked list of Finalizers awaiting finalization. */
 41     private static Finalizer unfinalized = null;
 42 
 43     /** Lock guarding access to unfinalized list. */
 44     private static final Object lock = new Object();
 45 
 46     private Finalizer next, prev;
 47 
 48     private Finalizer(Object finalizee) {
 49         super(finalizee, queue);
 50         // push onto unfinalized
 51         synchronized (lock) {
 52             if (unfinalized != null) {
 53                 this.next = unfinalized;
 54                 unfinalized.prev = this;
 55             }
 56             unfinalized = this;
 57         }
 58     }
< prev index next >