Mauvaises Pratiques

Ces mauvaises pratiques devraient être évitées, puisqu’elles peuvent mener à des fuites mémoire (OutOfMemoryError), des lags ou des inconsistances.

Stocker les Références

Quelques instances comme

ne devraient JAMAIS être stockées ou être mises en cache dans des plugins.

En voici les principales raisons:

  • Les références empêchent un garbage collection propre

  • L’instance peut ne plus être valide

Ce peut être facilement évité en utilisant les snapshots correspondantes ou en sauvegardant le UUID de l’instance données et en demandant un instance en vie quand vous en avez besoin.

IO sur le thread principal

Exécuter des opérations IO comme charger une configuration/donnée ou chercher pour des mises à jour/connexions à un site web prennent du temps et peuvent grandement affecter le TPS du serveur. De telles tâches devraient être effectuées sur leur propre thread, ou utiliser la fonction de scheduler async intégrée à Sponge. Cependant, il est parfaitement valide de charger les fichiers/configurations sur le thread principal lors du démarrage/de l’initialisation du plugin.

Sponge.asyncScheduler().submit(Task.builder().execute(this::checkForUpdates).build());

Pour plus de détails, vous pouvez vous référer à la documentation sur le scheduler.

Si cela est fait incorrectement, vous pouvez voir des clients se faire time out, ou le watchdog peut même tuer le serveur.

Accéder aux objets du jeu en dehors du thread principal

Accéder aux objets du jeu en dehors du thread principal peut mener à des crashs, inconsistances et d’autres problèmes et devrait être évité. Si vous effectuez des opérations longues sur un thread différent, utilisez les scheduler pour faire des changements aux objets du jeu sur le thread principal. Si vous voulez utiliser un objet du jeu sur un thread différent, utilisez une snapshot de l’instance ou un data container détaché.

Avertissement

Si cela est mal fait, vous pourrez rencontrer une ConcurrentModificationException avec ou sans crash du serveur au mieux, et un joueur/monde/serveur corrompu au pire.