Pengumpulan sampah server dan stasiun kerja

Pengumpul sampah dapat melakukan penyetelan mandiri dan dapat bekerja dalam berbagai skenario. Namun, Anda dapat menyetel jenis pengumpulan sampah berdasarkan karakteristik beban kerja. Runtime bahasa umum menyediakan jenis pengumpulan sampah berikut:

  • Pengumpulan sampah (GC) stasiun kerja, yang dirancang untuk aplikasi klien. Ini adalah jenis pengumpulan sampah default untuk aplikasi mandiri. Untuk aplikasi yang dihosting, misalnya, yang dihosting oleh ASP.NET, host menentukan jenis pengumpulan sampah default.

    Pengumpulan sampah stasiun kerja dapat dilakukan secara serentak atau tidak serentak. Pengumpulan sampah serentak (atau latar belakang) memungkinkan utas terkelola untuk melanjutkan operasi selama pengumpulan sampah. Pengumpulan sampah latar belakang menggantikan pengumpulan sampah serentak di .NET Framework 4 dan versi yang lebih baru.

  • Pengumpulan sampah server, yang ditujukan untuk aplikasi server yang membutuhkan throughput dan skalabilitas tinggi.

    • Di .NET Core, pengumpulan sampah server dapat berupa tidak serentak atau latar belakang.

    • Di .NET Framework 4.5 dan versi yang lebih baru, pengumpulan sampah server dapat berupa tidak serentak atau latar belakang. Di .NET Framework 4 dan versi sebelumnya, pengumpulan sampah server berupa tidak serentak.

Ilustrasi berikut memperlihatkan utas khusus yang melakukan pengumpulan sampah di server:

Server Garbage Collection Threads

Pertimbangan performa

Pengumpulan sampah stasiun kerja

Berikut ini adalah pertimbangan threading dan performa untuk pengumpulan sampah stasiun kerja:

  • Pengumpulan terjadi pada utas pengguna yang memicu pengumpulan sampah dan tetap pada prioritas yang sama. Karena utas pengguna biasanya berjalan pada prioritas normal, pengumpul sampah (yang berjalan pada utas prioritas normal) harus bersaing dengan utas lain untuk waktu CPU. (Utas yang menjalankan kode native tidak ditangguhkan pada pengumpulan sampah server atau stasiun kerja.)

  • Pengumpulan sampah stasiun kerja selalu digunakan pada komputer yang hanya memiliki satu CPU logis, terlepas dari pengaturan konfigurasinya.

Server pengumpulan sampah

Berikut ini adalah pertimbangan threading dan performa untuk pengumpulan sampah server:

  • Koleksi terjadi pada beberapa utas khusus. Pada Windows, utas ini berjalan pada THREAD_PRIORITY_HIGHEST tingkat prioritas.

  • Tumpukan dan utas khusus untuk melakukan pengumpulan sampah disediakan untuk setiap CPU logis, dan tumpukan dikumpulkan pada saat yang sama. Setiap tumpukan berisi tumpukan objek kecil dan tumpukan objek besar, dan semua tumpukan dapat diakses dengan kode pengguna. Objek di tumpukan yang berbeda dapat merujuk satu sama lain.

  • Karena beberapa utas pengumpulan sampah bekerja bersama, pengumpulan sampah server lebih cepat daripada pengumpulan sampah stasiun kerja pada tumpukan ukuran yang sama.

  • Pengumpulan sampah server sering kali memiliki segmen ukuran yang lebih besar. Namun, ini hanya generalisasi: ukuran segmen sifatnya khusus untuk implementasi dan dapat berubah. Jangan membuat asumsi tentang ukuran segmen yang dialokasikan oleh pengumpul sampah saat menyetel aplikasi Anda.

  • Pengumpulan sampah server bisa memakan banyak sumber daya. Misalnya, bayangkan ada 12 proses yang menggunakan server pengumpulan sampah yang berjalan di komputer yang memiliki empat CPU logis. Jika semua proses mengumpulkan sampah pada saat yang sama, mereka akan saling mengganggu, karena akan ada 12 utas yang dijadwalkan pada CPU logis yang sama. Jika prosesnya aktif, ada baiknya semuanya menggunakan pengumpulan sampah server.

Jika Anda menjalankan ratusan instans aplikasi, pertimbangkan untuk menggunakan pengumpulan sampah stasiun kerja dengan pengumpulan sampah serentak yang dinonaktifkan. Ini akan menghasilkan lebih sedikit pengalihan konteks, yang dapat meningkatkan performa.

Lihat juga