【问题标题】:Very busy garbage collection (95%) with a lots of free memory非常繁忙的垃圾收集 (95%),有大量可用内存
【发布时间】:2013-07-19 01:40:52
【问题描述】:

我们的应用现在表现不佳。当我们查看性能时,我们发现垃圾收集时间是执行时间的 95%。但与此同时,我们的总体内存使用率非常低 - 正如 TaskManager 所示,我们有大量可用内存。这是为什么?我以为垃圾收集器只有在内存压力高的时候才会忙。

【问题讨论】:

  • 这与Android有关吗?如果是,请添加Android标签。
  • 哪种语言或平台?

标签: .net garbage-collection


【解决方案1】:

任务管理器内存读数可能与分配给特定虚拟机的实际内存完全无关。

【讨论】:

  • 对不起,这是一个 .net 应用程序。
  • clr也是虚拟机
【解决方案2】:

可能您分配了很多并且可以释放很多对象。使用Allocation Tracker 跟踪内存分配并尝试尽可能少地分配。您甚至可以在应用程序开始时分配所有内容,然后再不分配任何内容。这样你就不会“引诱” GC 被调用。

【讨论】:

    【解决方案3】:

    来自维基:Garbage collection

    Garbage Collection (GC) 是一种自动内存管理形式。垃圾收集器,或只是收集器,尝试回收垃圾,或由程序不再使用的对象占用的内存。

    如果您正在分配内存但未能释放它,垃圾收集器就会出现。检查您的代码并确保您分配的内存在超出范围时被释放。

    【讨论】:

    • 我也是这么想的。只是不容易确认它并找到该地点。有没有办法扩大堆大小,这样我就可以看到 GC 的出现频率降低了? - 我知道这不是解决方案,只是想确认这是问题所在。
    • 抱歉,我认为该链接是关于 Java 的。我的是一个 .net 应用程序。
    • 你的风格是什么?(我是说语言)
    • @TheJoker 在类似 java 的系统中,Pythono 垃圾收集器会定期释放内存。我们可以(显式地)调用垃圾来执行内存清理操作(我知道我们可以在 Java 中这样做)。所以你的线 If we are failing to deallocate it 是关键点。
    【解决方案4】:

    不要查看任务管理器。尝试使用任何与 .net 相关的内存查看器,这样您就可以了解垃圾收集器何时何地起作用。我认为这可能是因为您可能有内存泄漏,尝试使用一些工具为了更好地了解您的应用是否存在泄漏。

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2019-02-08
      • 2017-03-15
      • 1970-01-01
      • 2021-04-30
      • 2012-06-12
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多