【发布时间】:2014-10-04 04:59:36
【问题描述】:
我正在用 Java 开发一个基于 Android 的 3D 游戏(不使用 NDK)。 任何游戏的必备条件之一是资源缓存,我可以在其中存储加载的纹理、网格、声音等。
我的计划是开发一个资源缓存来分发对某些资源的弱引用,这样只有缓存本身保持对资源的强引用,这意味着如果我从缓存中删除一个资源,它将被垃圾回收不用我担心。
不过,我很难找到以下问题的答案: 假设我已将资源缓存填充到堆空间几乎已满的程度。我现在想加载一个额外的资源,但是它的内存占用太大以至于它不适合我的可用堆空间。 为了适应新对象的大小,我从缓存中删除了一些条目并加载到新对象中。这可能会导致 OutOfMemory 异常吗? 只要垃圾收集器没有扫描我最近删除的对象,内存就会一直在使用,那么垃圾收集器是否足够聪明,可以运行新的扫描以容纳新分配的对象?
【问题讨论】:
-
我对 Android 了解不多,但这可能不是一个好主意。 Android 已经 special handles
Bitmaps 我会尽可能多地使用它(虽然我不喜欢它)。
标签: java android garbage-collection