Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: Allocator/ObjectLayout.java


1   // ObjectLayout.java, created Mon Feb  5 23:23:19 2001 by joewhaley
2   // Copyright (C) 2001-3 John Whaley <jwhaley@alum.mit.edu>
3   // Licensed under the terms of the GNU LGPL; see COPYING for details.
4   package Allocator;
5   
6   /** This interface contains constants that define the joeq object layout.
7    *  You can play with these constants to experiment with different object layouts.
8    *
9    * @author  John Whaley <jwhaley@alum.mit.edu>
10   * @version $Id: ObjectLayout.java,v 1.10 2003/05/12 10:04:52 joewhaley Exp $
11   */
12  public abstract class ObjectLayout {
13  
14      /**** OFFSETS ****/
15      
16      /** Offset of array length word, in bytes. */
17      public static final int ARRAY_LENGTH_OFFSET = -12;
18      /** Offset of status word, in bytes. */
19      public static final int STATUS_WORD_OFFSET = -8;
20      /** Offset of vtable, in bytes. */
21      public static final int VTABLE_OFFSET = -4;
22      /** Offset of array element 0, in bytes. */
23      public static final int ARRAY_ELEMENT_OFFSET = 0;
24  
25      
26      /**** HEADER SIZES ****/
27      
28      /** Size of (non-array) object header, in bytes. */
29      public static final int OBJ_HEADER_SIZE = 8;
30      /** Size of array header, in bytes. */
31      public static final int ARRAY_HEADER_SIZE = 12;
32  
33      
34      /**** STATUS BITS ****/
35      
36      /** Object has been hashed.  If it moves, we need to store the old address. */
37      public static final int HASHED       = 0x00000001;
38      /** Object has been hashed and later moved.  The hash code is stored just past the object. */
39      public static final int HASHED_MOVED = 0x00000002;
40      /** Bit in object header for use by GC. */
41      public static final int GC_BIT       = 0x00000004;
42      /** Mask for status flags. */
43      public static final int STATUS_FLAGS_MASK = 0x00000007;
44  
45      
46      /**** LOCKING ****/
47      
48      /** Bit location of thread id in the status word. */
49      public static final int THREAD_ID_SHIFT   = 9;
50      /** Mask of the thread id in the status word. */
51      public static final int THREAD_ID_MASK    = 0x7FFFFE00;
52      /** Mask of the lock count in the status word. */
53      public static final int LOCK_COUNT_MASK   = 0x000001F0;
54      /** Value to add to status word to increment lock count by one. */
55      public static final int LOCK_COUNT_INC    = 0x00000010;
56      /** Bit location of lock count in the status word. */
57      public static final int LOCK_COUNT_SHIFT  = 4;
58      /** Lock has been expanded.
59       *  Masking out this value and the status flags mask gives the address of the expanded lock structure. */
60      public static final int LOCK_EXPANDED     = 0x80000000;
61     
62  }