diff agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadAddressTreeNodeAdapter.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/ui/tree/BadAddressTreeNodeAdapter.java	Fri Aug 31 16:39:35 2012 -0700
+++ b/agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadAddressTreeNodeAdapter.java	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 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
@@ -27,36 +27,38 @@
 import java.io.*;
 import sun.jvm.hotspot.debugger.*;
 import sun.jvm.hotspot.oops.*;
+import sun.jvm.hotspot.runtime.VM;
 
 /** Simple wrapper for displaying bad addresses in the Inspector */
 
 public class BadAddressTreeNodeAdapter extends FieldTreeNodeAdapter {
-  private boolean usingAddress;
-  private Address addr;
-  private long    addrValue;
+  private String message;
+
+  private static String generateMessage(long addr, String kind) {
+    return "** BAD " + kind + " " + Long.toHexString(addr) + " **";
+  }
 
-  public BadAddressTreeNodeAdapter(Address addr, FieldIdentifier id) {
-    this(addr, id, false);
+  public BadAddressTreeNodeAdapter(Address addr, MetadataField field, boolean treeTableMode) {
+    super(field.getID(), treeTableMode);
+    message = generateMessage(addr.minus(null), "METADATA");
+  }
+
+  public BadAddressTreeNodeAdapter(Address addr, OopField field, boolean treeTableMode) {
+    super(field.getID(), treeTableMode);
+    message = generateMessage(addr.minus(null), "OOP");
+  }
+
+  public BadAddressTreeNodeAdapter(OopHandle addr, FieldIdentifier id, boolean treeTableMode) {
+    super(id, treeTableMode);
+    message = generateMessage(addr.minus(null), "OOP");
   }
 
   /** The address may be null (for address fields of structures which
       are null); the FieldIdentifier may also be null (for the root
       node). */
-  public BadAddressTreeNodeAdapter(Address addr, FieldIdentifier id, boolean treeTableMode) {
+  public BadAddressTreeNodeAdapter(long addr, FieldIdentifier id, boolean treeTableMode) {
     super(id, treeTableMode);
-    this.addr = addr;
-    usingAddress = true;
-  }
-
-  public BadAddressTreeNodeAdapter(long addr, FieldIdentifier id) {
-    this(addr, id, false);
-  }
-
-  /** He FieldIdentifier may be null (for the root node). */
-  public BadAddressTreeNodeAdapter(long addrValue, FieldIdentifier id, boolean treeTableMode) {
-    super(id, treeTableMode);
-    this.addrValue = addrValue;
-    usingAddress = false;
+    message = generateMessage(addr, "ADDRESS");
   }
 
   public int getChildCount() {
@@ -76,17 +78,6 @@
   }
 
   public String getValue() {
-    // FIXME: should have this better factored to not have to replicate this code
-    String addrString = null;
-    if (usingAddress) {
-      if (addr == null) {
-        addrString = "0x0";
-      } else {
-        addrString = addr.toString();
+    return message;
       }
-    } else {
-      addrString = "0x" + Long.toHexString(addrValue);
     }
-    return "** BAD ADDRESS " + addrString + " **";
-  }
-}