diff agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents c18cbe5936b8
children
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java	Fri Aug 31 16:39:35 2012 -0700
+++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2012, 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
@@ -149,9 +149,9 @@
                 // treat it as address
                 VM vm = VM.getVM();
                 Address addr = vm.getDebugger().parseAddress(name);
-                Oop oop = vm.getObjectHeap().newOop(addr.addOffsetToAsOopHandle(0));
-                if (oop instanceof InstanceKlass) {
-                    ik = (InstanceKlass) oop;
+                Metadata metadata = Metadata.instantiateWrapperFor(addr.addOffsetTo(0));
+                if (metadata instanceof InstanceKlass) {
+                    ik = (InstanceKlass) metadata;
                 } else {
                     return Boolean.FALSE;
                 }
@@ -264,23 +264,28 @@
     */
     public Object mirror(Object[] args) {
         Object o = args[0];
-        if (o != null && o instanceof JSJavaObject) {
+        Object res = UNDEFINED;
+        if (o != null) {
+            if (o instanceof JSJavaObject) {
             Oop oop = ((JSJavaObject)o).getOop();
-            Object res = null;
             try {
-                if (oop instanceof InstanceKlass) {
-                    res = getObjectReader().readClass((InstanceKlass) oop);
-                } else {
                     res = getObjectReader().readObject(oop);
+                } catch (Exception e) {
+                    if (debug) e.printStackTrace(getErrorStream());
+                }
+            } else if (o instanceof JSMetadata) {
+                Metadata metadata = ((JSMetadata)o).getMetadata();
+                try {
+                    if (metadata instanceof InstanceKlass) {
+                        res = getObjectReader().readClass((InstanceKlass) metadata);
                 }
             } catch (Exception e) {
                 if (debug) e.printStackTrace(getErrorStream());
             }
-            return (res != null)? res : UNDEFINED;
-        } else {
-            return UNDEFINED;
         }
     }
+        return res;
+    }
 
     /**
        owner function gets owning thread of given JSJavaObjec, if any, else