[jboss-cvs] jboss-profiler/jvmti-lib/java-src/org/jboss/profiler/jvmti ...
Clebert Suconic
csuconic at jboss.com
Wed Sep 12 18:40:47 EDT 2007
User: csuconic
Date: 07/09/12 18:40:47
Modified: jvmti-lib/java-src/org/jboss/profiler/jvmti
JVMTIInterface.java
Log:
Improvements on report
Revision Changes Path
1.42 +46 -30 jboss-profiler/jvmti-lib/java-src/org/jboss/profiler/jvmti/JVMTIInterface.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: JVMTIInterface.java
===================================================================
RCS file: /cvsroot/jboss/jboss-profiler/jvmti-lib/java-src/org/jboss/profiler/jvmti/JVMTIInterface.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- JVMTIInterface.java 26 Jun 2007 01:52:22 -0000 1.41
+++ JVMTIInterface.java 12 Sep 2007 22:40:47 -0000 1.42
@@ -48,8 +48,6 @@
import java.util.TreeSet;
import java.util.WeakHashMap;
-import org.jboss.logging.Logger;
-
/**
@@ -57,8 +55,6 @@
*/
public class JVMTIInterface implements JVMTIInterfaceMBean
{
- private static final Logger log = Logger.getLogger(JVMTIInterface.class);
-
private static boolean isLoaded=true;
static {
try {
@@ -66,7 +62,7 @@
}
catch (Throwable e) {
isLoaded=false;
- log.error("The DLL couldn't be loaded, you won't be able to use any JVMTIInterface feature",e);
+ System.out.println("The DLL couldn't be loaded, you won't be able to use any JVMTIInterface feature");
}
}
@@ -298,17 +294,17 @@
{
if (callToString)
{
- returnValue = obj.toString();
+ returnValue = "TOSTRING(" + obj.toString() +"), class=" + obj.getClass().getName();
}
else
{
if (obj instanceof Class)
{
- returnValue = obj.toString();
+ returnValue = "CLASS(" + obj.toString() + "), identifyHashCode=" + System.identityHashCode(obj);
}
else
{
- returnValue = obj.getClass().getName() + "@" + System.identityHashCode(obj);
+ returnValue = "OBJ(" + obj.getClass().getName() + "@" + System.identityHashCode(obj) + ")";
}
}
}
@@ -320,7 +316,7 @@
if (returnValue.length() > 200)
{
- return obj.getClass().getName() + "@" + System.identityHashCode(obj);
+ return "OBJ(" + obj.getClass().getName() + "@" + System.identityHashCode(obj) + ")";
}
else
{
@@ -330,7 +326,7 @@
/** Explore references recursevely */
private void exploreObject(PrintWriter out, Object source, int currentLevel, final int maxLevel,boolean useToString, boolean weakAndSoft,
- HashMap mapDataPoints,
+ Map mapDataPoints,
HashSet alreadyExplored)
{
String level = null;
@@ -365,16 +361,13 @@
alreadyExplored.add(index);
- log.info("resolving references of " + callToString(source,useToString) + "...");
Long sourceTag = new Long(this.getTagOnObject(source));
ArrayList listPoints = (ArrayList)mapDataPoints.get(sourceTag);
if (listPoints ==null)
{
- log.info("didn't find references");
return;
}
- log.info("References found");
Iterator iter = listPoints.iterator();
@@ -518,7 +511,7 @@
nextReference = null;
break;
default:
- log.warn("unexpected reference " + point);
+ System.out.println("unexpected reference " + point);
}
return nextReference;
}
@@ -527,7 +520,7 @@
* This method can't be exposed through JMX as it would serialize a huge amount of data.
* @return HashMap<Long objectId,ArrayList<ReferenceDataPoint> referencees>
* */
- public HashMap createIndexMatrix() throws IOException
+ public Map createIndexMatrix() throws IOException
{
final HashMap referencesMap = new HashMap();
File tmpFile = File.createTempFile("tmpRefs",".tmp");
@@ -538,12 +531,12 @@
{
if (count==0)
{
- log.info("started receiving references");
+ System.out.println("started receiving references");
}
count++;
if (count%1000==0)
{
- log.info(count + " references received");
+ System.out.println(count + " references received");
}
ReferenceDataPoint dataPoint = new ReferenceDataPoint(referenceHolder, referencedObject, classTag, index, method, referenceType);
Long indexLong = new Long(referencedObject);
@@ -585,7 +578,7 @@
return "<b> you have to select at least solveReferences || solveClassLoaders || printObjects </b>";
}
- HashMap referencesMap = null;
+ Map referencesMap = null;
try
{
referencesMap = createIndexMatrix();
@@ -601,7 +594,38 @@
try
{
- return exploreClassReferences(className, maxLevel, solveReferencesOnClasses, solveReferencesOnClassLoaders, useToString, weakAndSoft, printObjects, referencesMap);
+ CharArrayWriter charArray = new CharArrayWriter();
+ PrintWriter out = new PrintWriter(charArray);
+
+ out.println(exploreClassReferences(className, maxLevel, solveReferencesOnClasses, solveReferencesOnClassLoaders, useToString, weakAndSoft, referencesMap));
+
+ if (printObjects)
+ {
+ this.releaseTags();
+ Class classes[] = this.getLoadedClasses();
+
+ for (int countClazz = 0; countClazz<classes.length; countClazz++)
+ {
+ Class clazz = classes[countClazz];
+ if (clazz.getName().equals(className))
+ {
+ Object[] objs = this.getAllObjects(clazz);
+
+ if (objs.length != 0)
+ {
+ out.println("<br> Instances of:" + clazz.getName() + " ClassLoader=" + clazz.getClassLoader());
+ for (int countOBJ=0; countOBJ<objs.length; countOBJ++)
+ {
+ out.println("<br>" + clazz.getName() + "[" + countOBJ + "]=" + objs[countOBJ]);
+ }
+ }
+ }
+ }
+ }
+
+ out.flush();
+
+ return charArray.toString();
}
finally
{
@@ -611,7 +635,7 @@
}
/** This is an overload to reuse the matrix index in case you already have indexed the JVM */
- public String exploreClassReferences(String className, int maxLevel, boolean solveReferencesOnClasses, boolean solveReferencesOnClassLoaders, boolean useToString, boolean weakAndSoft, boolean printObjects, HashMap referencesMap) {
+ public String exploreClassReferences(String className, int maxLevel, boolean solveReferencesOnClasses, boolean solveReferencesOnClassLoaders, boolean useToString, boolean weakAndSoft, Map referencesMap) {
CharArrayWriter charArray = new CharArrayWriter();
PrintWriter out = new PrintWriter(charArray);
@@ -636,15 +660,7 @@
}
out.println("<br>");
- if (printObjects)
- {
- Object objects[] = this.getAllObjects(loadClasses[i]);
- for (int j=0;j<objects.length;j++)
- {
- out.println("obj[" + j + "]=" + objects[j]);
- }
- }
}
}
@@ -670,7 +686,7 @@
Object obj[] = this.getAllObjects(className);
- HashMap referencesMap = null;
+ Map referencesMap = null;
try
{
referencesMap = createIndexMatrix();
@@ -710,7 +726,7 @@
/**
* Show the reference holders tree of an object. This returns a report you can visualize through MBean.
*/
- public String exploreObjectReferences(HashMap referencesMap, Object thatObject, int maxLevel, boolean useToString)
+ public String exploreObjectReferences(Map referencesMap, Object thatObject, int maxLevel, boolean useToString)
{
CharArrayWriter charArray = new CharArrayWriter();
PrintWriter out = new PrintWriter(charArray);
More information about the jboss-cvs-commits
mailing list