Praktek buruk
Ini praktek-praktek buruk harus dihindari, karena mereka dapat menyebabkan kebocoran memori (kerusakanmemoriluar), ketinggalan atau inkonsistensi.
Menyimpan referensi
Beberapa contoh seperti
- dan wadah yang MUNGKIN mengandung salah satu unsur di atas, termasuk
' ' Koleksi ' '
' ' Peta ' '
harus tidak PERNAH disimpan atau di-cache dalam plugin.
Inilah alasan utama untuk ini:
Referensi mencegah penggumpulan sampah yang tepat
Contohnya mungkin tidak lagi berlaku
Hal ini dapat dengan mudah dihindari dengan menggunakan foto yang sesuai ataupun menyimpan UUID dari contoh yang diberikan dan meminta secara langsung saat anda memerlukannya.
IO di thread utama
Melaksanakan beberapa operasi IO seperti loading config/data file atau memeriksa pembaruan/menghubungkan ke website membutuhkan banyak waktu dan sangat mempengaruhi TPS di server. Seperti tugas-tugas yang harus dilakukan baik dalam benang mereka sendiri, atau menggunakan built-in scheduler ini async fitur. Namun, itu baik-baik saja untuk memuat file yang dibutuhkan/config di thread utama saat server startup/inisialisasi plugin.
this.game.getScheduler().createAsyncExecutor(this).execute(this::checkForUpdates);
Untuk rincian lebih lanjut lihat scheduler dokumen.
Jika ini dilakukan dengan tidak benar, anda mungkin melihat waktu klien habis, atau pengawas mungkin membunuh server.
Mengakses objek permainan diluar berkas utama
Mengakses permainan benda-benda di luar thread utama dapat menyebabkan crash, inkonsistensi dan berbagai masalah lainnya dan harus dihindari. Jika anda memiliki panjang operasi pada thread yang berbeda menggunakan scheduler untuk membuat perubahan pada permainan seperti benda-benda di thread utama. Jika anda ingin menggunakan permainan objek di thread yang berbeda menggunakan snapshot dari contoh atau terpisah wadah data.
Peringatan
If this is done wrong, you can get a ConcurrentModificationException
with or without a server crash at best and
a corrupted player/world/server at worst.