【问题标题】:System.gc will work in android(Andengine)System.gc 将在 android(Andengine) 中工作
【发布时间】:2011-12-17 06:25:10
【问题描述】:

我使用andengine 开发游戏。在 J2me 游戏中退出时,我将所有对象设为 null

即:

Image img;
Sprite s1;

When exit application , 

img=null;
s1=null;

在 android 中我将使用 System.gc() 或者我需要在退出应用程序时将所有纹理、textureRegion 和 sprite 设为 null ?

【问题讨论】:

  • 您在退出时不需要这样做。

标签: java android garbage-collection andengine


【解决方案1】:

我认为你不应该明确地调用System.gc()。 Android 操作系统会处理这个问题。

“从您的应用中拨打System.gc() 就像从您的家中提供电力连接以点亮整个社会的灯”

我的意思是它会减慢你的应用程序清理系统所有垃圾的速度......

N_JOY。

【讨论】:

  • 我遇到了这样一种情况,当外部堆中的位图很紧时,调用 System.gc() 确实可以防止 OutOfMemoryError,因此在某些情况下它肯定会有所帮助。理想情况下,有效地加载和卸载位图可以避免这种需要,但根据我最近的经验,当需要在堆限制较小的设备上加载许多大图像时,这可能会非常困难。我不相信 System.gc() 像引用所暗示的那样毫无意义,它更像是拥有一个不间断电源,有足够的汁液为房子供电一分钟。
【解决方案2】:

Java 垃圾收集应该处理这个问题。你不需要这样做。

但是我会关闭打开的连接、文件句柄等。

System.gc() 只是提示 JVM 建议进行垃圾收集,但 Java 会按照自己的意愿运行它。

【讨论】:

    【解决方案3】:

    存在垃圾收集器的 Android 中,手动调用 GC 绝不是好的做法。 GC 是围绕启发式算法组织的,这些算法在留给自己的设备时效果最好。手动调用 GC 通常会降低性能。

    有时,在一些相对罕见的情况下,人们可能会发现某个特定的 GC 出错了,然后手动调用 GC 可能会在性能方面有所改善。这是因为实际上不可能实现一个“完美”的 GC 来在所有情况下都以最佳方式管理内存。这种情况很难预测,并且取决于许多微妙的实现细节。 “好的做法”是让 GC 自己运行;手动调用 GC 是个例外,只有在适当见证了实际性能问题后才能设想。

    最好花更多的精力来避免不必要的对象创建(比如在循环中创建对象)..

    看问题Garbage collector in Android

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2013-05-06
      相关资源
      最近更新 更多