gpt4 book ai didi

java - 垃圾收集器与池

转载 作者:行者123 更新时间:2023-11-30 04:21:16 25 4
gpt4 key购买 nike

我正在运行涉及创建树的模拟。我的树的分支因子从 2/3 到 7/8。

每次我需要扩展它时,我都会为 child 分配一个数组。我经常将一个分支作为新树(通过将根的一个子节点设置为根),所以树的其余部分都变成了垃圾。

我想知道让垃圾收集器完成他的工作是否更好(我“建议”他在我更改树根时开始使用 System.gc() 收集)或为 TreeNodes 实现我自己的池,并且当我更改根时,回收所有现在无用的节点。

答案可以理解为:android 垃圾收集器是否经过优化,或者它是否比限制对象的创建/销毁更可取,即使这非常耗时?(我需要遍历所有树,并附加每个无用的节点到我的池的堆栈)

我读到 android GC 并没有那么“进化”(它基本上在内存不足时运行。)此外,我不知道是否只是删除对树根的每个引用都会让 gc 垃圾收集所有一次遍历树,或者它只会 gc 节点,然后是下一次遍历该节点的子节点,依此类推。

最佳答案

首先,您需要了解 GC 是否让您担心。因此,使用 -verbosegc 运行您的应用程序。如果您的 GC 报告性能问题或内存增加,您可以担心。否则将其从您的待办事项等式中删除。

GC 分代工作。基本上,您的分配分为几代。当您的应用程序加载时,所有分配都属于第 0 代。随着应用程序的进行,您的分配会被放入第 1 代和第 2 代。运行时的 GC 在第 0 代上不像在第 1 代上那样经常工作。同样,它不会运行在第 1 代上比在第 2 代上更频繁。这是假设您在加载时分配的对象不需要像稍后创建的对象那样频繁地被释放。

来自 http://chaoticjava.com/posts/how-does-garbage-collection-work/ 的有趣引述

  • 在任何应用程序中,对象都可以根据它们的分类生命线。
  • 有些对象是短暂的,例如大多数本地对象变量,有些是长期存在的,例如应用。
  • 关于分代垃圾收集的想法是在应用程序的理解下成为可能生命周期,大多数实例化的对象都是短暂的,并且有生命周期长的对象与生命周期短的对象之间几乎没有联系对象。

关于java - 垃圾收集器与池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com