An easy way to do so is to generate the upcoming path at regular time intervalls, if you have sections of the same length at least and the player moves at a constant speed. However, I'd generally go for a condition based on the distance of the player relative to the start position section he's currently on -> given that your pivot points are placed at the start of your sections, and that you know about how far the player can see, you can safely place your next section before he sees it.
Also, the character is the one who'll move on a 3d engine. On a 2d, sprite-based engine, we have had the strange case where we had better performances when the background was moving instead of the camera though.
Data/object pooling is a matter of having your engine create and keep a certain amount of objects/instances at runtime instead of deleting them and creating new instances from scratch. It just means that you want to make the way your code handles objects as efficient as possible (at least I think ).