agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java	Thu May 29 11:13:48 2008
--- new/agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java	Thu May 29 11:13:47 2008

*** 26,35 **** --- 26,36 ---- import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.runtime.*; + import sun.jvm.hotspot.oops.*; public class FreeChunk extends VMObject { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) {
*** 40,56 **** --- 41,57 ---- private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("FreeChunk"); nextField = type.getAddressField("_next"); prevField = type.getAddressField("_prev"); ! sizeField = type.getCIntegerField("_size"); ! sizeField = type.getAddressField("_size"); } // Fields private static AddressField nextField; private static AddressField prevField; ! private static CIntegerField sizeField; ! private static AddressField sizeField; // Accessors public FreeChunk next() { return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, nextField.getValue(addr)); }
*** 59,80 **** --- 60,95 ---- Address prev = prevField.getValue(addr).andWithMask(~0x3); return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, prev); } public long size() { return sizeField.getValue(addr); + if (VM.getVM().isCompressedOopsEnabled()) { + Mark mark = new Mark(sizeField.getValue(addr)); + return mark.getSize(); + } else { + Address size = sizeField.getValue(addr); + Debugger dbg = VM.getVM().getDebugger(); + return dbg.getAddressValue(size); } + } public FreeChunk(Address addr) { super(addr); } ! public static boolean secondWordIndicatesFreeChunk(long word) { ! return (word & 0x1L) == 0x1L; ! public static boolean indicatesFreeChunk(Address cur) { ! FreeChunk f = new FreeChunk(cur); + return f.isFree(); } public boolean isFree() { Debugger dbg = VM.getVM().getDebugger(); + if (VM.getVM().isCompressedOopsEnabled()) { + Mark mark = new Mark(sizeField.getValue(addr)); + return mark.isCmsFreeChunk(); + } else { Address prev = prevField.getValue(addr); ! return secondWordIndicatesFreeChunk(dbg.getAddressValue(prev)); ! Debugger dbg = VM.getVM().getDebugger(); + long word = dbg.getAddressValue(prev); + return (word & 0x1L) == 0x1L; } + } }

agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File