为什么这个内存泄漏?

sha*_*ais 6 flutter

在这个例子中,每次我按下“Click”,都会分配 50M 的内存。它永远不会被回收,我可以推送 30 个页面并占用 1.5GB,尽管导航堆栈上只有 1 个页面。GC 永远不会启动。这是怎么回事?

Flutter (Channel master, 2.1.0-11.0.pre.122, on Microsoft Windows [Version 10.0.18363.1440], locale en-US)

void main() {
  runApp(MaterialApp(
    home: MemoryTest(),
  ));
}

class MemoryTest extends StatelessWidget {
  final List<EdgeInsets> insets = List.generate(
    1000000,
    (index) => EdgeInsets.all(0),
  );
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(
        children: [
          OutlinedButton(
            child: Text("CLICK"),
            onPressed: () {
              Navigator.of(context).pushReplacement(MaterialPageRoute(
                builder: (_) => MemoryTest(),
              ));
            },
          ),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 -1

你应该将 ListItem 移动到函数构建中

class MemoryTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
  final insets = List.generate(
    1000000,
    (index) => EdgeInsets.all(0),
  );
    return Container(
      color: Colors.white,
      child: Column(
        children: [
          OutlinedButton(
            child: Text("CLICK"),
            onPressed: () {
              Navigator.of(context).pushReplacement(MaterialPageRoute(
                builder: (_) => MemoryTest(),
              ));
            },
          ),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)