Malas Prácticas
Estas malas prácticas deberían ser evitadas, ya que ellas pueden llevar a pérdidas de memoria (OutOfMemoryError
), retraso o inconsistencias.
Almacenamiento de Referencias
Algunas instancias tales como
- y contenedores que PODRÍAN contener cualquiera de los elementos de arriba, incluso
Collections
Maps
NUNCA debería ser almacenado en caché en complementos.
Estas son las razones principales para esto:
Las referencias previenen la apropiada recolección de la basura
Las instancias podrían no ser validas ya
Esto puede fácilmente ser evitado utilizando las instantáneas correspondientes o guardando el UUID de las instancias dadas y solicitando una instancia en tiempo real cuando lo necesite.
IO en el hilo principal
Ejecutando algunas operaciones IO tales como cargar un archivo de configuración/datos o verificar actualizaciones/conectándose a un sitio web, lleva mucho tiempo y afecta mucho al TPS en el servidor. Tales tareas deberían ser realizadas o en sus propios hilos o utilizando la característica asincrónica del programador incorporado. Sin embargo, está perfectamente bien cargar archivos requeridos/configurando en el hilo principal durante la puesta en marcha del servidor/inicicializacion del complemento.
Sponge.asyncScheduler().submit(Task.builder().execute(this::checkForUpdates).build());
Para mas detalles remitirse a scheduler docs.
Si esto esta hecho incorrectamente, es posible que veas a los clientes agotar el tiempo, o watchdog podría incluso matar el servidor.
Accediendo a los objetos del juego fuera del hilo principal
El acceso a objetos del juego fuera del hilo principal puede llevar a bloqueos, inconsistencias y otros problemas varios, y deben ser evitados. Si Ud. tiene una operación larga en un hilo diferente, use scheduler para realizar los cambios en tales objetos del juego en el hilo principal. Si Ud desea usar un objeto del juego en un hilo diferente, utilice una instantánea de la instancia o un contenedor de datos separado.
Advertencia
Si esto es realizado mal, Ud puede obtener una ``ConcurrentModificationException``con o sin una caída del servidor en el mejor de los casos y un jugador/mundo/servidor dañado en el peor.