Garbage collection loop in Game of Life
I would advise you to count neighbours from alive points, not for cells to be checked. Null a 100x100 int array Neighbours. For every alive cell add +1 into every neighbouring cell in Neighbours. After the pass you have number of neighbours for the every cell, but time used is about 1/4 at most, because you saved the time not counting neighbours for zero cells.
You are taking left neighbours for utmost left cells, for example. Out of boundaries! You are blocking this by taking a function and modulo and thus making the toroid out of plane, but thus you are counting much longer - division or modulo are slow, functions even more slow. Simply count neighbours normally for the field except boundaries, otherwards for the four sides and four corners. More to write, but less to count later.  
If you want a shorter code, you could use a help arrays ( I have invented them for myself in 1978)

// neighbor-vectors in xy coordinates clockwise from algebraic x axis.
int [8] dx={1,1,0,-1,-1,-1,0,1};
int [8] dy={0,-1,-1,-1,0,1,1,1};


and in counting neighbours for a cell do:

if(cell[x,y]&gt;0)
for(i=0;i&lt;8;i++){
   x1=x+dx[i];
   y1=y+dy[i];
   if(x1&gt;=0 &amp; x1&lt;100 &amp; y1&gt;=0 &amp; y1&lt;100){
       neighbours[x1,y1]++;
   }
}

Count the time spent for different activities, for not to waste time on optimizing part that takes 0.1% of time.

So you can throw off many objects, not to create them at all. Only hold 2 desk in 2x100x100 array - each time one will be active, the other will be old.  You can even count neighbours and later make living/dead cells on the same desk. No garbage collection.