mirror of git://gcc.gnu.org/git/gcc.git
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();
|
|
}
|
|
}
|
|
}
|
|
}
|