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

agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java

Print this page




  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20  * CA 95054 USA or visit www.sun.com if you need additional information or
  21  * have any questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.memory;
  26 
  27 import java.util.*;
  28 import sun.jvm.hotspot.debugger.*;
  29 import sun.jvm.hotspot.types.*;
  30 import sun.jvm.hotspot.runtime.*;

  31 
  32 public class FreeChunk extends VMObject {
  33    static {
  34       VM.registerVMInitializedObserver(new Observer() {
  35          public void update(Observable o, Object data) {
  36             initialize(VM.getVM().getTypeDataBase());
  37          }
  38       });
  39    }
  40 
  41    private static synchronized void initialize(TypeDataBase db) {
  42       Type type = db.lookupType("FreeChunk");
  43       nextField = type.getAddressField("_next");
  44       prevField = type.getAddressField("_prev");
  45       sizeField = type.getCIntegerField("_size");
  46    }
  47 
  48    // Fields
  49    private static AddressField nextField;
  50    private static AddressField prevField;
  51    private static CIntegerField sizeField;
  52 
  53    // Accessors
  54    public FreeChunk next() {
  55       return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, nextField.getValue(addr));
  56    }
  57 
  58    public FreeChunk prev() {
  59       Address prev = prevField.getValue(addr).andWithMask(~0x3);
  60       return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, prev);
  61    }
  62 
  63    public long size() {
  64       return sizeField.getValue(addr);






  65    }

  66 
  67    public FreeChunk(Address addr) {
  68       super(addr);
  69    }
  70 
  71    public static boolean secondWordIndicatesFreeChunk(long word) {
  72       return (word & 0x1L) == 0x1L;

  73    }
  74 
  75    public boolean isFree() {
  76       Debugger dbg = VM.getVM().getDebugger();



  77       Address prev = prevField.getValue(addr);
  78       return secondWordIndicatesFreeChunk(dbg.getAddressValue(prev));


  79    }

  80 }


  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20  * CA 95054 USA or visit www.sun.com if you need additional information or
  21  * have any questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.memory;
  26 
  27 import java.util.*;
  28 import sun.jvm.hotspot.debugger.*;
  29 import sun.jvm.hotspot.types.*;
  30 import sun.jvm.hotspot.runtime.*;
  31 import sun.jvm.hotspot.oops.*;
  32 
  33 public class FreeChunk extends VMObject {
  34    static {
  35       VM.registerVMInitializedObserver(new Observer() {
  36          public void update(Observable o, Object data) {
  37             initialize(VM.getVM().getTypeDataBase());
  38          }
  39       });
  40    }
  41 
  42    private static synchronized void initialize(TypeDataBase db) {
  43       Type type = db.lookupType("FreeChunk");
  44       nextField = type.getAddressField("_next");
  45       prevField = type.getAddressField("_prev");
  46       sizeField = type.getAddressField("_size");
  47    }
  48 
  49    // Fields
  50    private static AddressField nextField;
  51    private static AddressField prevField;
  52    private static AddressField sizeField;
  53 
  54    // Accessors
  55    public FreeChunk next() {
  56       return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, nextField.getValue(addr));
  57    }
  58 
  59    public FreeChunk prev() {
  60       Address prev = prevField.getValue(addr).andWithMask(~0x3);
  61       return (FreeChunk) VMObjectFactory.newObject(FreeChunk.class, prev);
  62    }
  63 
  64    public long size() {
  65       if (VM.getVM().isCompressedOopsEnabled()) {
  66         Mark mark = new Mark(sizeField.getValue(addr));
  67         return mark.getSize();
  68       } else {
  69         Address size = sizeField.getValue(addr);
  70         Debugger dbg = VM.getVM().getDebugger();
  71         return dbg.getAddressValue(size);
  72       }
  73    }
  74 
  75    public FreeChunk(Address addr) {
  76       super(addr);
  77    }
  78 
  79    public static boolean indicatesFreeChunk(Address cur) {
  80       FreeChunk f = new FreeChunk(cur);
  81       return f.isFree();
  82    }
  83 
  84    public boolean isFree() {
  85       if (VM.getVM().isCompressedOopsEnabled()) {
  86         Mark mark = new Mark(sizeField.getValue(addr));
  87         return mark.isCmsFreeChunk();
  88       } else {
  89         Address prev = prevField.getValue(addr);
  90         Debugger dbg = VM.getVM().getDebugger();
  91         long word = dbg.getAddressValue(prev);
  92         return (word & 0x1L) == 0x1L;
  93       }
  94    }
  95 }
agent/src/share/classes/sun/jvm/hotspot/memory/FreeChunk.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File