When your map is randomly-generated, then you can use the fact that the Java Random class can be initialized with a seed value. When you call new Random(seed) with the same seed, you get the same sequence of random numbers from it. So when you use a new Random object for each chunk you generate, then all you need to save about a chunk is the seed value and any changes to the chunk which happened over the course of the game.