Unity's managed memory system adalah lingkungan skrip C# berdasarkan Mesin Virtual Mono atau IL2CPP (VMs). Manfaat dari sistem memori yang dikelola adalah mengelola pelepasan memori, sehingga Anda tidak perlu meminta rilis memori melalui kode Anda.
Sistem memori yang dikelola Unity menggunakan kolektor sampah dan managed heap untuk secara otomatis alokasi memori gratis ketika scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary Anda tidak lagi memegang referensi ke alokasi tersebut. Ini membantu menjaga kebocoran memori. Kebocoran memori terjadi ketika memori dialokasikan, referensi untuk hilang, dan kemudian memori tidak pernah dibebas karena perlu reference untuk bebas itu.
Sistem manajemen memori ini juga menjaga akses memori, yang berarti bahwa Anda tidak dapat mengakses memori yang telah dibebaskan, atau itu tidak pernah berlaku untuk kode Anda untuk mengakses. Namun, proses manajemen memori ini mempengaruhi kinerja runtime, karena mengalokasikan memori yang berhasil memakan waktu untuk CPU. Photogallery mungkin juga menghentikan CPU dari melakukan pekerjaan lain sampai selesai.
Ketika metode disebut, scripting back end menyalin nilai-nilai parameternya ke area memori yang disediakan untuk panggilan tertentu, dalam struktur data yang disebut call stack. Ujung belakang scripting dapat dengan cepat menyalin jenis data yang menempati beberapa byte. Namun, itu umum untuk objek, string, dan array menjadi jauh lebih besar, dan tidak efisien untuk scripting kembali berakhir untuk menyalin jenis data secara teratur.
Semua objek tipe referensi non-null dan semua objek berjenis nilai kotak dalam kode yang dikelola harus dialokasikan pada heap yang dikelola.
Penting bahwa Anda akrab dengan jenis nilai dan referensi, sehingga Anda dapat secara efektif mengelola kode Anda. Untuk informasi lebih lanjut, lihat dokumentasi Microsoft pada jenis nilai, dan jenis referensi.
Ketika sebuah objek diciptakan, mengalokasikan memori yang diperlukan untuk menyimpannya dari kolam pusat yang disebut the heap, yang merupakan bagian dari memori bahwa runtime scripting proyek Unity (Mono atau IL2CPP) secara otomatis mengelola. Ketika sebuah objek tidak lagi digunakan, memori itu pernah diduduki dapat direkrut kembali dan digunakan untuk sesuatu yang lain.
Ujung belakang skrip Unity menggunakan kolektor sampah untuk secara otomatis mengelola memori aplikasi Anda, sehingga Anda tidak perlu mengalokasikan dan melepaskan blok memori ini dengan panggilan metode eksplisit. Manajemen memori otomatis memerlukan upaya pengkodean kurang dari alokasi eksplisit / rilis dan mengurangi potensi kebocoran memori.
managed heap adalah bagian memori yang dipilih oleh proyek Unity runtime (Mono atau IL2CPP) secara otomatis mengelola.
Dalam diagram di atas, kotak biru mewakili jumlah memori yang disatukan untuk heap yang dikelola. Kotak putih di dalamnya mewakili nilai data yang disatukan toko dalam ruang memori heap yang dikelola. Ketika nilai data tambahan diperlukan, Unity mengalokasikan mereka ruang gratis dari heap yang dikelola (disebut A).
Diagram di atas menunjukkan contoh fragmentasi memori. Ketika Unity melepaskan objek, memori bahwa objek yang ditempati dibebaskan. Namun, ruang gratis tidak menjadi bagian dari satu kolam besar memori bebas. Sitemap
Objek di kedua sisi objek yang dirilis mungkin masih digunakan. Karena ini, ruang gratis adalah "gap" antara segmen memori lainnya. Unity hanya dapat menggunakan celah ini untuk menyimpan data ukuran identik atau kurang dari objek yang dirilis.
situasi ini disebut memory fragmentation. Hal ini terjadi ketika ada sejumlah besar memori yang tersedia di heap, tetapi hanya tersedia di "gaps" antara benda. Ini berarti bahwa meskipun ada ruang total yang cukup untuk alokasi memori yang besar, heap yang berhasil tidak dapat menemukan blok tunggal yang cukup besar memori terus-menerus untuk menetapkan alokasi.
Jika objek besar dialokasikan dan tidak ada ruang bebas yang terus-menerus untuk mengakomodasinya, seperti yang diilustrasikan di atas, manajer memori Unity melakukan dua operasi:
Ekspansi tak terduga dari tuap dapat bermasalah. Strategi pengumpulan garbage Unity cenderung menyebabkan memori fragmen lebih sering. Anda harus menyadari hal berikut: