Ответ
В Dart Garbage Collector (GC) — это механизм автоматического управления памятью, который освобождает память, занятую объектами, ставшими недостижимыми. Dart использует generational garbage collection с двумя основными поколениями:
- Молодое поколение (Young Generation): Использует быстрый алгоритм scavenger для очистки короткоживущих объектов (например, временных переменных в методе
build). Сборка мусора здесь происходит часто и быстро. - Старое поколение (Old Generation): Для долгоживущих объектов используется более медленный алгоритм (mark-sweep или mark-compact).
Практическое влияние на Flutter:
- Микрофризы (jank): Длительная сборка мусора в основном потоке может вызвать пропуск кадров. Это критично для анимаций и скроллинга.
- Оптимизации:
- Избегайте создания лишних объектов в часто вызываемых методах (
build,didUpdateWidget, анимационных листенерах). Используйтеconstконструкторы для виджетов. - Для отложенной инициализации тяжёлых объектов используйте
late final. - Управляйте подписками (
StreamSubscription,Listenable) и явно отменяйте их вdispose, чтобы объекты стали недостижимыми раньше.
- Избегайте создания лишних объектов в часто вызываемых методах (
Пример плохой и хорошей практики:
// Плохо: Создаёт новый список на каждом вызове build
Widget build(BuildContext context) {
List<Widget> items = []; // Новый объект каждый кадр
for (var i = 0; i < 100; i++) {
items.add(Text('Item $i'));
}
return ListView(children: items);
}
// Лучше: Кэширование списка (если данные статичны)
class MyWidget extends StatelessWidget {
final List<Widget> _cachedItems = List.generate(
100,
(i) => Text('Item $i'),
);
@override
Widget build(BuildContext context) {
return ListView(children: _cachedItems);
}
} Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶