Kötü Pratikler

Bellek sızıntılarına (“OutOfMemoryError”), gecikme veya tutarsızlıklara yol açabileceğinden, bu kötü uygulamalardan kaçınılmalıdır.

Referanslar Depolanıyor

Gibi bazı örnekler

ASLA eklentilerde saklanmamalı veya eklentilerde önbelleğe alınmamalı.

Bunlar bunun için ana sebeplerdir:

  • Referanslar uygun çöp koleksiyonlarını önler

  • Örnekler daha fazla geçerli olmayabilir

Buna karşılık gelen anlık görüntüleri kullanarak veya belirli örneklerin UUID’lerini kaydederek ve gerektiğinde canlı bir örnek isteyerek bu kolaylıkla önlenebilir.

Ana sayfa üzerindeki IO

Bir yapılandırma / veri dosyası yükleme veya güncellemeleri kontrol etme / bir web sitesine bağlanma gibi bazı GÇ işlemlerini yürütmek çok zaman alır ve sunucuda TPS’yi büyük ölçüde etkiler. Bu tür görevler kendi konularında yapılmalı veya dahili zamanlayıcı asenk özelliğini kullanmalıdır. Ancak, sunucu başlatma / eklenti başlatma işlemi sırasında ana iş parçacıklarında gerekli dosyaları / yapılandırma yüklemek mükemmel bir işlemdir.

this.game.getScheduler().createAsyncExecutor(this).execute(this::checkForUpdates);

Daha fazla detay için scheduler belgelerine başvurun.

Bu hatalı olarak tamamlandıysa, istemcilerin zaman aşımını görebilirsiniz, veya hatta gözlemci sunucuyu mahvedebilir.

Oyun nesnelerine ana iş parçacığının dışından erişme

Ana nesnenin dışındaki oyun nesnelerine erişmek çökmelere, tutarsızlıklara ve diğer çeşitli sorunlara neden olabilir ve kaçınılmalıdır. Farklı bir iş parçacığı üzerinde uzun süren bir işleminiz varsa :doc: scheduler <../ scheduler> komutunu kullanarak ana iş parçacığında böyle oyun nesneleri üzerinde değişiklikler yapın. Farklı bir iş parçacığında bir oyun nesnesi kullanmak isterseniz örneğe ait bir anlık görüntü veya ayrılmış bir veri kabını kullanın.

Uyarı

Eğer bu yanlış yapılırsa, en iyi durumda bir sunucu çöküşü olsun olmasın, en kötü ihtimalle bozulmuş bir oyuncu / dünya / sunucu olsun veya olmasın bir `` ConcurrentModificationException`` alabilirsiniz.