如何清除flutter web中的堆内存?

Posted

技术标签:

【中文标题】如何清除flutter web中的堆内存?【英文标题】:How to clear heap memory in flutter web? 【发布时间】:2021-05-07 14:32:11 【问题描述】:

我正在研究flutter web。我需要知道如何清除flutter web中的堆内存。 我使用了简单的文本小部件,但它需要 144mb 作为堆。 我不知道它是从哪里来的。 我的代码:

import 'package:flutter/material.dart';

void main() 
  runApp(MaterialApp(
    title: 'Demo',
    home: Text('hi'),
  ));

我已附上图片供参考

请告诉我如何清除这段记忆。

【问题讨论】:

【参考方案1】:

如果您要问的是如何在 web 上运行 Flutter 以使其一开始消耗更少的内存,那么答案可能是使用 html 渲染器而不是画布渲染器在发布模式下运行它。 (有关渲染器的更多信息:https://flutter.dev/docs/development/tools/web-renderers)

flutter run -d chrome --web-renderer html --release

这对我有用。运行一个简单的 hello world 应用程序,即使在发布模式下,我的堆也测量到 ~150mb。然后,我切换到 html 渲染器。现在,在调试模式下,堆约为 60mb。在发布模式下约为 7mb。

【讨论】:

虽然这可行,但画布不应该占用这么多内存。我在颤振的 github 上添加了一个问题:github.com/flutter/flutter/issues/81790。我的猜测是它可能与我们的环境设置有关,否则这已经是一个问题了。 不是环境设置。这是正在处理的 Flutter Web 的一个已知问题。【参考方案2】:

这里有两点:

    我的假设是您正在调试模式下运行应用程序。在调试模式下,应用程序包含许多用于调试目的的内容,这些内容不会包含在您的发布应用程序中。例如,我正在开发的应用程序从登录屏幕开始在调试模式下需要 ~100Mb,而在发布模式下只需要 ~20Mb。所以试着在发布模式下编译你的应用看看。

    我不认为你可以清除记忆。 Dart 有 GC(垃圾收集器)为你做这件事。作为开发人员,您需要做的就是确保您没有无法被垃圾回收的对象,因此不会随着时间的推移留在 VM 堆中导致内存泄漏。

【讨论】:

我在配置文件模式下运行。我已经正确处理了变量。但是找不到这个 144mb 堆内存的根本原因。 您的设置有问题。我只是在运行你提供的同一个“嗨”应用程序,我正在拍摄 7.7MB 的快照。你的 Flutter 版本是多少? @AlexRadzishevsky,我遇到了与 Sarath 基本相同的问题,一个简单的 hello world 应用程序大约需要 150mb 的内存。以释放模式运行。 Flutter 2.0.5版

以上是关于如何清除flutter web中的堆内存?的主要内容,如果未能解决你的问题,请参考以下文章

如何减少 JVM 中的已提交堆内存

关于内存类型中的堆

有没有办法处理 AVR/Arduino 微控制器中的堆内存碎片?

java中的堆内存和栈内存

Java中的堆内存和栈内存

java堆溢出