src/java.base/share/classes/jdk/internal/perf/Perf.java
Print this page
@@ -20,17 +20,18 @@
*
* 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;
+package jdk.internal.perf;
import java.nio.ByteBuffer;
import java.security.Permission;
import java.security.PrivilegedAction;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import jdk.internal.ref.CleanerFactory;
/**
* The Perf class provides the ability to attach to an instrumentation
* buffer maintained by a Java virtual machine. The instrumentation
* buffer may be for the Java virtual machine running the methods of
@@ -44,11 +45,11 @@
* stamp and interval measurement purposes.
*
* @author Brian Doherty
* @since 1.4.2
* @see #getPerf
- * @see sun.misc.Perf$GetPerfAction
+ * @see jdk.internal.perf.Perf.GetPerfAction
* @see java.nio.ByteBuffer
*/
public final class Perf {
private static Perf instance;
@@ -122,21 +123,21 @@
* <p>
* Please note that the <em>"sun.misc.Perf.getPerf"</em> permission
* is not a JDK specified permission.
*
* @return A reference to the singleton Perf instance.
- * @throws AccessControlException if a security manager exists and
- * its <code>checkPermission</code> method doesn't allow
- * access to the <em>"sun.misc.Perf.getPerf"</em> target.
+ * @throws SecurityException if a security manager exists and its
+ * <code>checkPermission</code> method doesn't allow access
+ * to the <em>"jdk.internal.perf.Perf.getPerf""</em> target.
* @see java.lang.RuntimePermission
* @see #attach
*/
public static Perf getPerf()
{
SecurityManager security = System.getSecurityManager();
if (security != null) {
- Permission perm = new RuntimePermission("sun.misc.Perf.getPerf");
+ Permission perm = new RuntimePermission("jdk.internal.perf.Perf.getPerf");
security.checkPermission(perm);
}
return instance;
}
@@ -275,29 +276,37 @@
}
else {
// This is an instrumentation buffer for another Java virtual
// machine with native resources that need to be managed. We
// create a duplicate of the native ByteBuffer and manage it
- // with a Cleaner object (PhantomReference). When the duplicate
- // becomes only phantomly reachable, the native resources will
- // be released.
+ // with a Cleaner. When the duplicate becomes phantom reachable,
+ // the native resources will be released.
final ByteBuffer dup = b.duplicate();
- Cleaner.create(dup, new Runnable() {
+
+ CleanerFactory.cleaner()
+ .register(dup, new CleanerAction(instance, b));
+ return dup;
+ }
+ }
+
+ private static class CleanerAction implements Runnable {
+ private final ByteBuffer bb;
+ private final Perf perf;
+ CleanerAction(Perf perf, ByteBuffer bb) {
+ this.perf = perf;
+ this.bb = bb;
+ }
public void run() {
try {
- instance.detach(b);
- }
- catch (Throwable th) {
+ perf.detach(bb);
+ } catch (Throwable th) {
// avoid crashing the reference handler thread,
// but provide for some diagnosability
assert false : th.toString();
}
}
- });
- return dup;
- }
}
/**
* Native method to perform the implementation specific attach mechanism.
* <p>
@@ -339,11 +348,11 @@
* If this method is passed a <code>ByteBuffer</code> object created
* by the <code>attach</code> method with a lvmid for the Java virtual
* machine running this method (lvmid=0, for example), then the detach
* request is silently ignored.
*
- * @param ByteBuffer A direct allocated byte buffer created by the
+ * @param bb A direct allocated byte buffer created by the
* <code>attach</code> method.
* @see java.nio.ByteBuffer
* @see #attach
*/
private native void detach(ByteBuffer bb);