--- a/jdk/src/share/classes/sun/applet/AppletImageRef.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/src/share/classes/sun/applet/AppletImageRef.java Wed Jan 22 11:03:44 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,27 +27,71 @@
import java.awt.Toolkit;
import java.awt.Image;
+import java.lang.ref.SoftReference;
import sun.awt.image.URLImageSource;
import java.net.URL;
-class AppletImageRef extends sun.misc.Ref {
+class AppletImageRef {
+ private SoftReference<Image> soft = null;
+
URL url;
/**
+ * Returns a pointer to the object referenced by this Ref. If the object
+ * has been thrown away by the garbage collector, it will be
+ * reconstituted. This method does everything necessary to ensure that the garbage
+ * collector throws things away in Least Recently Used(LRU) order. Applications should
+ * never override this method. The get() method effectively caches calls to
+ * reconstitute().
+ */
+ public synchronized Image get() {
+ Image t = check();
+ if (t == null) {
+ t = reconstitute();
+ setThing(t);
+ }
+ return t;
+ }
+
+ /**
* Create the Ref
*/
AppletImageRef(URL url) {
this.url = url;
}
- public void flush() {
- super.flush();
+ /**
+ * Flushes the cached object. Forces the next invocation of get() to
+ * invoke reconstitute().
+ */
+ public synchronized void flush() {
+ SoftReference s = soft;
+ if (s != null) s.clear();
+ soft = null;
+ }
+
+ /**
+ * Sets the thing to the specified object.
+ * @param thing the specified object
+ */
+ public synchronized void setThing(Object thing) {
+ flush();
+ soft = new SoftReference(thing);
+ }
+
+ /**
+ * Checks to see what object is being pointed at by this Ref and returns it.
+ */
+ public synchronized Image check() {
+ SoftReference<Image> s = soft;
+ if (s == null) return null;
+ return s.get();
}
/**
* Reconsitute the image. Only called when the ref has been flushed.
*/
- public Object reconstitute() {
+ public Image reconstitute() {
Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url));
return img;
}
--- a/jdk/src/share/classes/sun/applet/AppletResourceLoader.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/src/share/classes/sun/applet/AppletResourceLoader.java Wed Jan 22 11:03:44 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,21 +27,17 @@
import java.net.URL;
import java.awt.Image;
-import sun.misc.Ref;
/**
* Part of this class still remains only to support legacy, 100%-impure
* applications such as HotJava 1.0.1.
*/
+@Deprecated
public class AppletResourceLoader {
public static Image getImage(URL url) {
return AppletViewer.getCachedImage(url);
}
- public static Ref getImageRef(URL url) {
- return AppletViewer.getCachedImageRef(url);
- }
-
public static void flushImages() {
AppletViewer.flushImageCache();
}
--- a/jdk/src/share/classes/sun/applet/AppletViewer.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/src/share/classes/sun/applet/AppletViewer.java Wed Jan 22 11:03:44 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,6 @@
import java.net.URL;
import java.net.MalformedURLException;
import java.net.SocketPermission;
-import sun.misc.Ref;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.lang.reflect.InvocationTargetException;
@@ -390,22 +389,18 @@
return getCachedImage(url);
}
+ /**
+ * Get an image.
+ */
static Image getCachedImage(URL url) {
// System.getSecurityManager().checkConnection(url.getHost(), url.getPort());
- return (Image)getCachedImageRef(url).get();
- }
-
- /**
- * Get an image ref.
- */
- static Ref getCachedImageRef(URL url) {
synchronized (imageRefs) {
AppletImageRef ref = (AppletImageRef)imageRefs.get(url);
if (ref == null) {
ref = new AppletImageRef(url);
imageRefs.put(url, ref);
}
- return ref;
+ return ref.get();
}
}
--- a/jdk/src/share/classes/sun/misc/Cache.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/src/share/classes/sun/misc/Cache.java Wed Jan 22 11:03:44 2014 -0800
@@ -25,6 +25,7 @@
package sun.misc;
+import java.lang.ref.SoftReference;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.NoSuchElementException;
@@ -32,12 +33,26 @@
/**
* Caches the collision list.
*/
-class CacheEntry extends Ref {
+class CacheEntry {
int hash;
Object key;
CacheEntry next;
- public Object reconstitute() {
- return null;
+ SoftReference<Object> value;
+
+ public CacheEntry() {
+ value = null;
+ }
+
+ public CacheEntry(Object o) {
+ value = new SoftReference<>(o);
+ }
+
+ public Object get() {
+ return value.get();
+ }
+
+ public void setThing(Object thing) {
+ value = new SoftReference<>(thing);
}
}
@@ -72,7 +87,6 @@
*
* @see java.lang.Object#hashCode
* @see java.lang.Object#equals
- * @see sun.misc.Ref
* @deprecated Consider {@link java.util.LinkedHashMap} for LRU caches.
*/
@Deprecated
@@ -192,7 +206,7 @@
int index = (hash & 0x7FFFFFFF) % tab.length;
for (CacheEntry e = tab[index]; e != null; e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
- return e.check();
+ return e.get();
}
}
return null;
@@ -220,7 +234,7 @@
for (CacheEntry old = oldTable[i]; old != null;) {
CacheEntry e = old;
old = old.next;
- if (e.check() != null) {
+ if (e.get() != null) {
int index = (e.hash & 0x7FFFFFFF) % newCapacity;
e.next = newTable[index];
newTable[index] = e;
@@ -253,10 +267,10 @@
CacheEntry ne = null;
for (CacheEntry e = tab[index]; e != null; e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
- Object old = e.check();
+ Object old = e.get();
e.setThing(value);
return old;
- } else if (e.check() == null)
+ } else if (e.get() == null)
ne = e; /* reuse old flushed value */
}
@@ -296,7 +310,7 @@
tab[index] = e.next;
}
count--;
- return e.check();
+ return e.get();
}
}
return null;
@@ -322,7 +336,7 @@
public boolean hasMoreElements() {
while (index >= 0) {
while (entry != null)
- if (entry.check() != null)
+ if (entry.get() != null)
return true;
else
entry = entry.next;
@@ -338,8 +352,8 @@
if (entry != null) {
CacheEntry e = entry;
entry = e.next;
- if (e.check() != null)
- return keys ? e.key : e.check();
+ if (e.get() != null)
+ return keys ? e.key : e.get();
}
}
throw new NoSuchElementException("CacheEnumerator");
--- a/jdk/src/share/classes/sun/misc/Ref.java Wed Jan 22 10:27:08 2014 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-import java.lang.ref.SoftReference;
-
-
-/**
- * A "Ref" is an indirect reference to an object that the garbage collector
- * knows about. An application should override the reconstitute() method with one
- * that will construct the object based on information in the Ref, often by
- * reading from a file. The get() method retains a cache of the result of the last call to
- * reconstitute() in the Ref. When space gets tight, the garbage collector
- * will clear old Ref cache entries when there are no other pointers to the
- * object. In normal usage, Ref will always be subclassed. The subclass will add the
- * instance variables necessary for the reconstitute() method to work. It will also add a
- * constructor to set them up, and write a version of reconstitute().
- *
- * @deprecated This class has been replaced by
- * <code>java.util.SoftReference</code>.
- *
- * @see java.util.SoftReference
- *
- */
-@Deprecated
-
-public abstract class Ref {
-
- private SoftReference soft = null;
-
- /**
- * Returns a pointer to the object referenced by this Ref. If the object
- * has been thrown away by the garbage collector, it will be
- * reconstituted. This method does everything necessary to ensure that the garbage
- * collector throws things away in Least Recently Used(LRU) order. Applications should
- * never override this method. The get() method effectively caches calls to
- * reconstitute().
- */
- public synchronized Object get() {
- Object t = check();
- if (t == null) {
- t = reconstitute();
- setThing(t);
- }
- return t;
- }
-
- /**
- * Returns a pointer to the object referenced by this Ref by
- * reconstituting it from some external source (such as a file). This method should not
- * bother with caching since the method get() will deal with that.
- * <p>
- * In normal usage, Ref will always be subclassed. The subclass will add
- * the instance variables necessary for reconstitute() to work. It will
- * also add a constructor to set them up, and write a version of
- * reconstitute().
- */
- public abstract Object reconstitute();
-
- /**
- * Flushes the cached object. Forces the next invocation of get() to
- * invoke reconstitute().
- */
- public synchronized void flush() {
- SoftReference s = soft;
- if (s != null) s.clear();
- soft = null;
- }
-
- /**
- * Sets the thing to the specified object.
- * @param thing the specified object
- */
- public synchronized void setThing(Object thing) {
- flush();
- soft = new SoftReference(thing);
- }
-
- /**
- * Checks to see what object is being pointed at by this Ref and returns it.
- */
- public synchronized Object check() {
- SoftReference s = soft;
- if (s == null) return null;
- return s.get();
- }
-
- /**
- * Constructs a new Ref.
- */
- public Ref() { }
-
- /**
- * Constructs a new Ref that initially points to thing.
- */
- public Ref(Object thing) {
- setThing(thing);
- }
-
-}
--- a/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/test/java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java Wed Jan 22 11:03:44 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
* access to classes in the sun.* hierarchy, which is what is specified
* in the JDK's default java.security file.
*/
- private final static String restrictedClassName = "sun.misc.Ref";
+ private final static String restrictedClassName = "sun.misc.Cache";
public static void main(String[] args) {
--- a/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java Wed Jan 22 10:27:08 2014 -0500
+++ b/jdk/test/java/rmi/server/RemoteObject/notExtending/NotExtending.java Wed Jan 22 11:03:44 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -123,7 +123,7 @@
}
/**
- * Force desparate garbage collection so that all sun.misc.Ref instances
+ * Force desperate garbage collection so that soft references
* will be cleared.
*
* This method is required with the JDK 1.1.x RMI runtime so that the