Well this is my collision code:
public void checkCollision(){
/*
* -> get Blocks in question
* -> check Collision for every block
* -> if true set pos to oldPos
*
*/
if(currentChunk == null)
return;
//Get the player coordinates
int x = (int)Math.floor(this.position.x);
int y = (int)Math.floor(this.position.y);
int z = (int)Math.floor(this.position.z);
y--;
// Get the blocks
surrounding.add(currentChunk.getBlock(x-1, y+1, z-1));
surrounding.add(currentChunk.getBlock(x-1, y+1, z));
surrounding.add(currentChunk.getBlock(x-1, y+1, z+1));
surrounding.add(currentChunk.getBlock(x, y+1, z-1));
surrounding.add(currentChunk.getBlock(x, y+1, z));
surrounding.add(currentChunk.getBlock(x, y+1, z+1));
surrounding.add(currentChunk.getBlock(x+1, y+1, z-1));
surrounding.add(currentChunk.getBlock(x+1, y+1, z));
surrounding.add(currentChunk.getBlock(x+1, y+1, z+1));
surrounding.add(currentChunk.getBlock(x-1, y+2, z-1));
surrounding.add(currentChunk.getBlock(x-1, y+2, z));
surrounding.add(currentChunk.getBlock(x-1, y+2, z+1));
surrounding.add(currentChunk.getBlock(x, y+2, z-1));
surrounding.add(currentChunk.getBlock(x, y+2, z));
surrounding.add(currentChunk.getBlock(x, y+2, z+1));
surrounding.add(currentChunk.getBlock(x+1, y+2, z-1));
surrounding.add(currentChunk.getBlock(x+1, y+2, z));
surrounding.add(currentChunk.getBlock(x+1, y+2, z+1));
//Check collision for every block
boolean collision = false;
for(Block b : surrounding){
if(b != null && this.getBounds().intersects(b.getBounds())){
collision = true;
break;
}
}
surrounding.clear();
//Reset position
if(collision){
this.position.x = oldPos.x;
this.position.z = oldPos.z;
}
}
surrounding is a HashSet, so there are at most 18 checks every cycle (I know that this isn’t optimal. I just did this to brute force a basic collision). I clear the Set afterwards so no growth here.
I never intentionally save any data for a longer period so there should be no growth especially no exponential 
It has to be internally or I oversee something…
EDIT: I just found the source of the huge amount of char[]'s. It’s because I set the title of my window to the current player position every update cycle. I removed it, but it’s still the same problem.
Also the execution time profiling told me that most of the time goes into glCallList. That’s reasonable because I call one list for every chunk, which is 64 lists every update. I probably should find an algorithm for that too. Still I don’t think that this is the reason for the growth. The lists are generated only once in the beginning and then kept in the memory and never touched.