我有一些代码怀疑会出现内存泄漏。由于代码使用了 ccall
并且在指针中维护了重要信息,这些指针应该在 finalizer
调用的代码中被释放。
在我的调试中,我正在调用 gc()
。我想知道是否这会立即触发所有已经移出作用域的对象所附加的 finalizer
。
答案仅与 julie 0.5+ 相关。
我有一些代码怀疑会出现内存泄漏。由于代码使用了 ccall
并且在指针中维护了重要信息,这些指针应该在 finalizer
调用的代码中被释放。
在我的调试中,我正在调用 gc()
。我想知道是否这会立即触发所有已经移出作用域的对象所附加的 finalizer
。
答案仅与 julie 0.5+ 相关。
gc()
时,可以依靠以下保证:gc()
,它将被终结。gc()
时,局部引用可能会或可能不会被认为是可达的,即使它们永远不会再次使用。gc()
将会在返回 gc()
调用之前“立即”收集和终结它。
gc()
是什么意思。它可能被安排为阻塞调用它的mutator线程,直到collector线程中发生“完整收集”。或者它可以在并发收集器的位置上调用停止-世界GC算法,但这样我们就有了两个不同的GC实现,这将很奇怪。 - StefanKarpinski