As this is Java, note that what you described is something Java is particularly poor at handling.
Every object you create is going to need to be constructed, and eventually garbage collected.
Each of your map segments is going to have all those objects, and the net result is going to be what? Around 50,000 constructors called? Also String is a special beast, are you sure you want to use those instead of byte arrays?
Even worse, if your memory pools are already dirty this could require some serious work. Doing 50,000 individual allocations for a single zone might trigger the GC to run several times or even cause the VM to grow the memory pool. Trust me, the player is going to notice that as they are blissfully moving along and suddenly the app stalls.
Much worse if you attempt the full 150MB collection of stuff, you are looking at millions of constructor calls. I can only guess at the state of your memory pools, especially as these are long-term allocations that will slowly be moved over into the older generation pools, and (shudder) get garbage collected. There is nothing speedy about that.
I can imagine wanting to warn your users about that: "Please wait. The JVM is now cross-checking over 20,000,000 allocations to see if any of them are dead. In the mean time, please go make a sandwich."
Coalesce your data. Make a small number of very large objects rather than millions of tiny objects.