In my opinion, you should reuse Screen s, which are often used and position and recreate Screen , which are often not used.
In your example, all GameScreen , GameScreen , and MainMenuScreen must be reused, as they are directly related to each other:
As soon as the player starts the game, it is possible that he is dying. Then, GameOverScreen displayed, and immediately after that, MainMenuScreen displayed. Therefore, the user does not need to switch to these Screen manually.
Instead, OptionsScreen could be disposed of and recreated every time, because usually you open OptionScreen only a few times. It is also not directly related to other Screen , but the user needs to "force" the game to open OptionScreen . But while there are not many Screen s, reuse should not be a problem.
In the second example, Screen used more often, so they need to be reused.
EDIT:
As mentioned in @EssEllDee, you should also use hide() and show() . These methods are called by Libgdx when you switch Screen , and they can be used to delete / recreate heavy resources. For example, you can use the Texture used for the game when you switch to GameOverScreen and reload them when you switch to GameScreen .
source share