java - 垃圾收集器与池

标签 java android memory-management garbage-collection tree

我正在运行涉及创建树的模拟。 我的树的分支因子从 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/

相关文章:

java - 如何绕过 Maven 中的编译?

java - 使用 Guice 的 Projekt 在 Eclipse 中运行,但在终端上则不然

java - Maven Gwt 原型(prototype)错误

android - 更改布局以使用 ImageView 或 2 个 ImageView

c++ - 在内存中的预定位置构造的对象 - SEGFAULT

c++ - uBLAS 矩阵清除内存

javascript - 有没有办法找到有关使用 chrome 开发工具释放的对象的任何信息

java - 如何在网络浏览器中查看 post json 数据?

python - android中带有opencv的kivy相机应用程序显示黑屏

javascript - 如何添加带有下一个、上一个和关闭按钮的搜索栏来搜索 html 主页面中的文本