MonotoneVMResource immVM, int blockSize, VM_Address start, VM_Address end, int size, boolean mainSpace) {  this.immVM = immVM;   this.blockSize = blockSize; maxAddr = start; int maxTileNum = countTileNum(start, end, blockSize); tiles = new Tile[maxTileNum];  for(int i = 0; i < maxTileNum; i++) tiles[i] = new Tile();  subspace = new Subspace(start, start, 0, blockSize, 0); allTileNum = 0;   String tmp = (blockSize < 1024) ? "Block Size: " + blockSize + " bytes\n": "Block Size: " + (blockSize / 1024) + " bytes\n";    space = new ServerSpace( Plan.getNextServerSpaceId(),  name,                        "JMTk Immortal Space", 	 "Block ",                    tmp,                   	 size,			 "UNUSED",                    mainSpace                    ); setTilenames(0);    usedSpaceStream = new Stream( space, 					 IMMORTAL_USED_SPACE_STREAM,		 StreamConstants.INT_TYPE,			 "Used Space stream",			 0, 					 blockSize,					 0, 					 0,						 "Space used: ", 				 " bytes",					 StreamConstants.PRESENTATION_PERCENT,	 StreamConstants.PAINT_STYLE_ZERO, 		 0,						 Color.Red);				   zero(); }
MonotoneVMResource immVM, int blockSize, VM_Address start, VM_Address end, int size, boolean mainSpace) {}
  public ImmortalSpaceDriver(String name,                             MonotoneVMResource immVM,                             int blockSize,                             VM_Address start,                              VM_Address end,                             int size,                             boolean mainSpace) {        this.immVM = immVM;    // Set up array of tiles for max possible use    //TODO blocksize should be a multiple of treadmill granularity    this.blockSize = blockSize;    maxAddr = start;    int maxTileNum = countTileNum(start, end, blockSize);    tiles = new Tile[maxTileNum];    //Log.writeln("ImmortalDriver: no of tiles=", maxTileNum);    for(int i = 0; i < maxTileNum; i++)      tiles[i] = new Tile();    subspace = new Subspace(start, start, 0, blockSize, 0);     allTileNum = 0;        // Set the block label    String tmp = (blockSize < 1024) ?                   "Block Size: " + blockSize + " bytes\n":                   "Block Size: " + (blockSize / 1024) + " bytes\n";        // Create a single GCspy Space    space = new ServerSpace(		    Plan.getNextServerSpaceId(), /* space id */		    name,                       /* server name */		    "JMTk Immortal Space", 	/* driver (space) name */		    "Block ",                   /* space title */		    tmp,                   	/* block info */		    size,			/* number of tiles */		    "UNUSED",                   /* the label for unused blocks */		    mainSpace                   /* main space */ );    setTilenames(0);       // Initialise the Space's 1 Stream1    usedSpaceStream            = new Stream(	             space, 					/* the space */		     IMMORTAL_USED_SPACE_STREAM,		/* space ID */		     StreamConstants.INT_TYPE,			/* stream data type */		     "Used Space stream",			/* stream name */		     0, 					/* min. data value */		     blockSize,					/* max. data value */		     0, 					/* zero value */		     0,						/* default value */		    "Space used: ", 				/* value prefix */		    " bytes",					/* value suffix */		     StreamConstants.PRESENTATION_PERCENT,	/* presentation style */		     StreamConstants.PAINT_STYLE_ZERO, 		/* paint style */		     0,						/* max stream index */		     Color.Red);				/* tile colour */    // Initialise the statistics    zero();  }