在 GC 环境中,Core Data 啥时候会释放其分配的内存?

Posted

技术标签:

【中文标题】在 GC 环境中,Core Data 啥时候会释放其分配的内存?【英文标题】:In a GC environment, when will Core Data release its allocated memory?在 GC 环境中,Core Data 什么时候会释放其分配的内存? 【发布时间】:2011-06-30 08:20:31 【问题描述】:

在我的应用程序中,现在似乎 Core Data 正忙于为不同的对象分配内存空间,但是,它从未释放该内存。应用程序使用的内存随着运行次数的增加而不断增长。

是否有调用 Core Data 上下文(或其他东西)来确保所有内存都被清理? Core Data 什么时候释放分配的内存?

谢谢!

【问题讨论】:

“是否有调用 Core Data 上下文(或其他东西)来确保所有内存都被清理?”当然不是。在 GC-land 中,只要有人知道它们,对象就会一直存在。如果你以某种方式强迫一个对象在某些人知道它的情况下被释放,那么你稍后会导致崩溃——确切地说,当你在某些人知道它的情况下释放一个对象时,没有 GC 会发生什么。另一个问题可能有答案,但我对 Core Data 的了解还不够,无法知道它是什么,所以我将把它留给其他人来回答。 谢谢彼得。这对我来说似乎很奇怪。由于 Core Data 上下文对象似乎在应用程序的整个生命周期中都被使用,这是否意味着与上下文对象相关的任何内容(即在内存中声明的所有内容)都不会在应用程序完成/退出之前被释放? 仍然保留的所有内容都不会被释放。希望 Core Data 足够聪明,不会永远持有一切。 @JeremyP 的链接看起来很有希望。 【参考方案1】:

即使核心数据已经处理完一个对象(可能不是你想的那样),垃圾收集器也不一定会立即收集它。

垃圾收集器有两种触发收集的方法:collectIfNeeded 和collectExhaustively。前者不保证立即领取,后者可能会暂时停止您的申请。

您可以强制核心数据对其对象进行故障排除。详情请见Reducing Memory Overhead。

【讨论】:

以上是关于在 GC 环境中,Core Data 啥时候会释放其分配的内存?的主要内容,如果未能解决你的问题,请参考以下文章

unity啥情况下gc不能自动回收垃圾对象

Golang啥时候会触发GC

垃圾回收(GC)

垃圾回收(GC)

python啥时间进行gc

当变量超出范围时会发生啥?