1. Look at Share and MemoryConstrained in the documentation. Perhaps you can use them.
2. Perhaps you can save needed intermediate results and free up unneeded results along the way.
3. In general one cannot tell even if a calculation will ever stop. (Look up "Halting Problem.") For some calculations, one might be able to determine how long it will take, but it might be hard to do.