|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.mmtk.utility.gcspy.drivers.AbstractDriver
public abstract class AbstractDriver
Abstract GCspy driver for MMTk collectors.
This class implements for the MMTk a base driver for a GCspy space. All drivers for GCspy spaces should inherit from this class.
Field Summary | |
---|---|
protected int |
blockSize
The GCspy space's block size |
protected boolean |
changed
Has this space changed? |
protected byte[] |
control
control values for tiles in this space |
protected static byte |
CONTROL_BACKGROUND
The tile is a background tile |
protected static byte |
CONTROL_LINK
The tile is a link |
protected static byte |
CONTROL_SEPARATOR
The tile is a separator |
protected static byte |
CONTROL_UNUSED
The tile is unused |
protected static byte |
CONTROL_USED
The tile is used |
private static boolean |
DEBUG
|
private static int |
MAX_STREAMS
|
protected int |
maxTileNum
The maximum number of tiles in this GCspy space |
protected Space |
mmtkSpace
The MMTK space |
protected String |
myClass
|
protected String |
name
The name of the GCspy space driver |
protected ServerInterpreter |
server
The owning GCspy server |
protected ServerSpace |
serverSpace
The GCspy space abstraction |
protected Stream[] |
streams
This space's streams |
Constructor Summary | |
---|---|
AbstractDriver(ServerInterpreter server,
String name,
Space mmtkSpace,
int blockSize,
boolean mainSpace)
Create a new driver for this collector. |
Method Summary | |
---|---|
protected void |
addControl(int index,
byte value)
Add a control to the tile |
void |
addStream(Stream stream)
Add a stream to the driver. |
protected static boolean |
controlIsBackground(byte val)
Is a tile a background pseudo-tile? |
protected static boolean |
controlIsSeparator(byte val)
Is this a separator? |
protected static boolean |
controlIsUnused(byte val)
Is a tile unused? |
protected static boolean |
controlIsUsed(byte val)
Is a tile used? |
protected void |
controlValues(byte tag,
int start,
int len)
Set the control value in each tile in a region. |
protected int |
countTileNum(Address start,
Address end,
int tileSize)
Count number of tiles in an address range. |
protected int |
countTileNum(Extent extent,
int tileSize)
Count number of tiles in an address range. |
private int |
countTileNum(int diff,
int tileSize)
|
protected ServerSpace |
createServerSpace(ServerInterpreter server,
String spaceName,
int maxTileNum,
boolean mainSpace)
Create a new GCspy ServerSpace and add it to the ServerInterpreter. |
protected Subspace |
createSubspace(Space mmtkSpace)
Create a subspace for this space. |
byte |
getControl(int index)
Get the controls for a tile. |
protected abstract String |
getDriverName()
Get the name of this driver type. |
int |
getMaxTileNum()
Get the maximum number of tiles in this space. |
ServerSpace |
getServerSpace()
The GCspy space managed by this driver. |
boolean |
handleReferenceFromImmortalSpace(Address addr)
Handle a direct reference from the immortal space. |
protected void |
initControl(int index,
byte value)
Initialise the value of a control. |
protected void |
initControls()
Initialise control values in all tiles |
boolean |
isConnected(int event)
Is the server connected to a GCspy client? |
int |
maxObjectsPerBlock(int blockSize)
The "typical" maximum number of objects in each tile. |
protected void |
resetData()
Reset the statistics for a space. |
void |
scan(Address obj)
Scan an object found at a location. |
void |
scan(Address obj,
boolean total)
Scan an object found at a location. |
void |
scan(ObjectReference obj)
Scan an object found at a location. |
void |
scan(ObjectReference obj,
boolean total)
Scan an object found at a location. |
protected void |
send(int event,
int numTiles)
Send all the streams for this space if it has changed. |
protected void |
setControl(int index,
byte value)
Set the control |
void |
setRange(Address start,
Address end)
Indicate the limits of a space. |
void |
setRange(Address start,
Extent extent)
Indicate the limits of a space. |
protected void |
setSpaceInfo(Offset size)
Set space info. |
protected void |
setTilenames(Subspace subspace,
int numTiles)
Setup the tile names in a subspace. |
abstract void |
transmit(int event)
Transmit the streams for this space. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final byte CONTROL_USED
protected static final byte CONTROL_BACKGROUND
protected static final byte CONTROL_UNUSED
protected static final byte CONTROL_SEPARATOR
protected static final byte CONTROL_LINK
private static final int MAX_STREAMS
private static final boolean DEBUG
protected String myClass
protected final ServerInterpreter server
protected final String name
protected final ServerSpace serverSpace
protected final Space mmtkSpace
protected int blockSize
protected int maxTileNum
protected Stream[] streams
protected byte[] control
protected boolean changed
Constructor Detail |
---|
public AbstractDriver(ServerInterpreter server, String name, Space mmtkSpace, int blockSize, boolean mainSpace)
server
- The ServerInterpreter that owns this GCspy space.name
- The name of this driver.mmtkSpace
- The MMTk space represented by this driver.blockSize
- The tile size.mainSpace
- Is this the main space?Method Detail |
---|
protected Subspace createSubspace(Space mmtkSpace)
mmtkSpace
- The MMTk spaceprotected ServerSpace createServerSpace(ServerInterpreter server, String spaceName, int maxTileNum, boolean mainSpace)
server
- the GCspy ServerInterpreter.spaceName
- The name of this driver.maxTileNum
- the maximum number of tiles in this space.mainSpace
- Is this the main space?protected abstract String getDriverName()
public int getMaxTileNum()
public ServerSpace getServerSpace()
public void addStream(Stream stream)
stream
- The stream
IndexOutOfBoundsException
- if more than MAX_STREAMS are addedprotected int countTileNum(Address start, Address end, int tileSize)
start
- The start of the range.end
- The end of the range.tileSize
- The size of each tile.
protected int countTileNum(Extent extent, int tileSize)
extent
- The extent of the range.tileSize
- The size of each tile.
private int countTileNum(int diff, int tileSize)
public void setRange(Address start, Address end)
start
- the Address of the start of the space.end
- the Address of the end of the space.public void setRange(Address start, Extent extent)
start
- the Address of the start of the space.extent
- the extent of the space.protected void setTilenames(Subspace subspace, int numTiles)
subspace
- the SubspacenumTiles
- the number of tiles to namepublic int maxObjectsPerBlock(int blockSize)
blockSize
- The size of a tile
public boolean isConnected(int event)
event
- The current eventprotected void resetData()
public void scan(ObjectReference obj, boolean total)
obj
- the reference to the object foundtotal
- Whether to total the statisticspublic void scan(ObjectReference obj)
obj
- the reference to the object foundpublic void scan(Address obj, boolean total)
obj
- the reference to the object foundtotal
- Whether to total the statisticspublic void scan(Address obj)
obj
- the reference to the object foundpublic boolean handleReferenceFromImmortalSpace(Address addr)
This is an empty implementation. Subclasses may override this method
to increment their refFromImmortal
Stream.
addr
- The Address
true
if the given Address is in this subspace. Always false
here.protected void setSpaceInfo(Offset size)
size
- the size of the spaceprotected static boolean controlIsUsed(byte val)
val
- the control value.
true
if the tile is usedprotected static boolean controlIsBackground(byte val)
val
- the control value.
true
if the tile is a background tileprotected static boolean controlIsUnused(byte val)
val
- the control value.
true
if the tile is unusedprotected static boolean controlIsSeparator(byte val)
val
- the control value.
true
if this is a separatorprotected void initControl(int index, byte value)
index
- The index of the tile.value
- The new value of the controlprotected void addControl(int index, byte value)
index
- The index of the tile.value
- The control to add.protected void setControl(int index, byte value)
value
- The value to setpublic byte getControl(int index)
index
- The index of the tile.
protected void initControls()
protected void controlValues(byte tag, int start, int len)
tag
- The control tag.start
- The start index of the region.len
- The number of tiles in the region.public abstract void transmit(int event)
server.isConnected(event)
stream.setSummary(values...);
controlValues(CONTROL_USED, start, numBlocks);
controlValues(CONTROL_UNUSED, end, remainingBlocks);
setSpace(info);
send(event, numTiles);Note that AbstractDriver.send takes care of sending the information for all streams (including control data).
event
- The eventprotected void send(int event, int numTiles)
event
- the eventnumTiles
- the number of blocks in this space
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |