java - 如果我在循环内以编程方式运行垃圾收集器。它会影响我的 Android 应用程序吗?

标签 java android kotlin garbage-collection

最大限度地减少内存泄漏问题并优化我的应用程序。我想确保我的应用程序的稳定性,为此我正在研究内存分配和释放的问题。

我在循环内创建一个数据类对象并将其添加到列表中,之后我不需要该数据类对象,因此我想从内存中删除该对象而不关闭屏幕或 Activity 。

为此,在将对象添加到列表后,我调用 System.gc()。

是否会因为垃圾回收调用过多而影响应用程序?

最佳答案

垃圾收集器仅收集代码中不再引用的对象。通过将其添加到列表,引用将存储在列表中,并且只要该列表仍然被引用,该引用就会被保留。如果您希望 GC 收集您的对象,则必须发生以下情况之一(假设该对象和列表都没有在其他任何地方被引用):

  • 该对象已从列表中删除
  • 列表超出范围
  • 列表变量设置为 null

在这种情况下,GC 将收集该对象。一般来说,系统会很智能地判断何时调用 GC,因此手动调用 GC 会增加程序的复杂性,同时降低程序的性能(因为 GC 也需要 CPU 时间),因此不建议这样做。

如果您希望避免内存泄漏:

  • 确保您的对象没有过时的引用
  • 使用弱引用

关于java - 如果我在循环内以编程方式运行垃圾收集器。它会影响我的 Android 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59064678/

相关文章:

java - Eclipse内容辅助,创建新对象时没有帮助

java - 如何根据负载因子对 ConcurrentHashMap 中的元素进行分组

java - 在循环内创建对象与在循环之前创建一个临时对象

android - 如何创建乐谱?

Android数据库(SQLite)从空表返回非空游标

android - 为什么我的 Android Kotlin 应用程序不请求用户的许可来打开位置?

java - 结果集 getDate() 返回了错误的日期值

java - 启动 Activity 时 Google map API key 错误

list - 基于kotlin中的另一个ArrayList对ArrayList进行排序

kotlin - Int::class.javaPrimitiveType.kotlin引用不等于Int::class.javaObjectType.kotlin