在我的 Flutter 日志中,我不断收到以下消息(只是有一些不同的数字):
Background concurrent copying GC freed 153040(3MB) AllocSpace objects, 12(4MB) LOS objects, 49% free, 4MB/8MB, paused 819us total 173.633ms
我最近实现了块模式,但我对流不太熟悉,也许我在那里做错了什么......
我有大约 5000 行代码,所以我无法将其全部发布在这里,只是想知道您是否知道这个问题,也许这是一个常见错误。
编辑:哦,是的,顺便说一句,我正在 Android 模拟器、Android Pie 上进行测试。我的平台是Windows。
这不是一个错误,它只是一条 Android 日志消息,通知您垃圾收集何时发生。一切都很正常。
日志消息不会损害您的应用程序,请参阅这个问题涉及原生 Android 上的同一主题 https://stackoverflow.com/questions/42381474/background-sticky-concurrent-mark-sweep-gc-freed。
只有当内存不足或者由于垃圾收集而出现性能问题时,这才会成为问题。
唷。
话虽这么说,让我们看看如何才能减少收到这些消息。
通常,模拟器的资源是有限的。
因此,最简单的方法是增加模拟器的 RAM 大小或使用实际手机而不是模拟器。
其次,确保你的逻辑无法处理大量数据,或者如果确实如此,则尽快将其处理掉。
-
Also, 不要自己“缓存”小部件将它们存储在这样的状态中:
class _MyWidgetState extends State<MyWidget> {
Widget button;
@override
void initState() {
super.initState();
button = RaisedButton(...);
}
@override
Widget build() => button;
}
要获取有关为什么不这样做的更多信息,请查看我对一个有点相关的问题的回答 https://stackoverflow.com/questions/52856438/defining-widgets-inside-initstate-or-class-constructors-rather-than-build/52857036#52857036。
基本上,Dart 使用两种类型的垃圾收集器,年轻的太空拾荒者对于短命对象和标记扫描GC对于长寿者。
通过手动缓存您的小部件,您将依赖于后者,后者速度较慢,并且实际上可能会通知 Android 有关已释放内存的信息,从而导致您的日志。
最后,你可以随时过滤或忽略日志. :D
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)