7f40378f06
gcc/java: 2007-02-15 David Daney <ddaney@avtrex.com> * Make-lang.in (JAVA_MANFILES): Add doc/gc-analyze.1. (java.maintainer-clean):Add gc-analyze.1. (.INTERMEDIATE): Add gc-analyze.pod. (gc-analyze.pod): New rule. (java.install-man): Install gc-analyze.1 * gcj.texi: Add new section for the gc-analyze program. libjava: 2007-02-15 Johannes Schmidt <jschmidt@avtrex.com> David Daney <ddaney@avtrex.com> * configure.ac: Create vm-tools-packages file. Add gnu/gcj/tools/gc_analyze to standard.omit and vm-tools-packages. Check for /proc/self/maps. * Makefile.am (bin_PROGRAMS): Added gc-analyze. (gc_analyze_SOURCES): New. (gc_analyze_LDFLAGS): New. (gc_analyze_LINK): New. (gc_analyze_LDADD): New. (gc_analyze_DEPENDENCIES): New. (nat_source_files): Add gnu/gcj/util/natGCInfo.cc. * Makefile.in: Regenerated. * configure: Regenerated. * include/config.h.in: Regenerated. * sources.am: Regenerated. * scripts/makemake.tcl: Don't include gc-analyze classes in libgcj. * gnu/gcj/tools/gc_analyze/SymbolLookup.java: New. * gnu/gcj/tools/gc_analyze/ObjectMap.java: New. * gnu/gcj/tools/gc_analyze/MemoryMap.java: New. * gnu/gcj/tools/gc_analyze/SymbolTable.java: New. * gnu/gcj/tools/gc_analyze/BlockMap.java: New. * gnu/gcj/tools/gc_analyze/BytePtr.java: New. * gnu/gcj/tools/gc_analyze/ItemList.java: New. * gnu/gcj/tools/gc_analyze/ToolPrefix.java: New. * gnu/gcj/tools/gc_analyze/MemoryAnalyze.java: New. * gnu/gcj/util/GCInfo.java: New. * gnu/gcj/util/GCInfo.h: New. * gnu/gcj/util/natGCInfo.cc: New. * gnu/gcj/util/UtilPermission.java: New. * gnu/gcj/util/UtilPermission.h: New. * classpath/tools/gnu/gcj/tools/gc_analyze/SymbolTable.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/ObjectMap$ObjectItem.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryMap$RangeComparator.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/BlockMap$PtrMarks.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryMap$Range.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/BlockMap.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/BytePtr.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$SubstringComparator.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/ItemList.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/ToolPrefix.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$1$Info.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$1.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$2.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$3.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$4.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryAnalyze$OptionParser.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/BlockMap$SizeKind.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/SymbolLookup.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/ObjectMap.class: New. * classpath/tools/gnu/gcj/tools/gc_analyze/MemoryMap.class: New. * classpath/lib/gnu/gcj/util/GCInfo.class: New. * classpath/lib/gnu/gcj/util/UtilPermission.class: New. libjava/classpath: 2007-02-15 David Daney <ddaney@avtrex.com> * tools/Makefile.am (TOOLS_ZIP): Add classes from vm-tools-packages. * tools/Makefile.in: Regenerated. From-SVN: r122007
73 lines
2.0 KiB
Java
73 lines
2.0 KiB
Java
/* ItemList.java -- Maps all objects keyed by their addresses.
|
|
Copyright (C) 2007 Free Software Foundation
|
|
|
|
This file is part of libgcj.
|
|
|
|
This software is copyrighted work licensed under the terms of the
|
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
|
details. */
|
|
|
|
package gnu.gcj.tools.gc_analyze;
|
|
|
|
import java.io.IOException;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.TreeMap;
|
|
|
|
class ItemList
|
|
{
|
|
public ItemList()
|
|
{
|
|
}
|
|
|
|
private TreeMap<Long, HashMap<ObjectMap.ObjectItem, Integer>> map;
|
|
|
|
public void add(ObjectMap.ObjectItem item)
|
|
{
|
|
if (map == null)
|
|
map = new TreeMap<Long, HashMap<ObjectMap.ObjectItem, Integer>>();
|
|
Long x = new Long(item.klass);
|
|
HashMap<ObjectMap.ObjectItem, Integer> list = map.get(x);
|
|
if (list == null)
|
|
{
|
|
list = new HashMap<ObjectMap.ObjectItem, Integer>();
|
|
map.put(x, list);
|
|
}
|
|
Integer count = list.get(item);
|
|
if (count == null)
|
|
list.put(item, new Integer(1));
|
|
else
|
|
list.put(item, new Integer(count.intValue() + 1));
|
|
}
|
|
|
|
void dump(String title, SymbolLookup lookup) throws IOException
|
|
{
|
|
if (map == null)
|
|
return;
|
|
System.out.println(title);
|
|
for (Map.Entry<Long, HashMap<ObjectMap.ObjectItem, Integer>> me :
|
|
map.entrySet())
|
|
{
|
|
HashMap<ObjectMap.ObjectItem, Integer> list = me.getValue();
|
|
boolean first = true;
|
|
|
|
for (Map.Entry<ObjectMap.ObjectItem, Integer> me2 : list.entrySet())
|
|
{
|
|
ObjectMap.ObjectItem item = me2.getKey();
|
|
Integer count = me2.getValue();
|
|
if (first)
|
|
{
|
|
String name =
|
|
MemoryAnalyze.getSymbolPretty(lookup, item, false);
|
|
System.out.println(" " + name + ":");
|
|
first = false;
|
|
}
|
|
System.out.print(" 0x" + Long.toHexString(item.ptr));
|
|
if (count.intValue() != 1)
|
|
System.out.print(" * " + count);
|
|
System.out.println();
|
|
}
|
|
}
|
|
}
|
|
}
|