我在Mac OS X上的基于Cocoa的应用程序中使用垃圾收集器。它有100个线程正在运行,并且使用Operation Queue完成了同步。活物是垃圾收集?
长时间运行后,其中一个对象被垃圾回收,应用程序将崩溃。
检查对象是否为非零也失败,因为该对象无效并且包含一些垃圾值。在对象上调用方法会导致崩溃。
任何人都请帮助我调试问题。
谢谢......................
我在Mac OS X上的基于Cocoa的应用程序中使用垃圾收集器。它有100个线程正在运行,并且使用Operation Queue完成了同步。活物是垃圾收集?
长时间运行后,其中一个对象被垃圾回收,应用程序将崩溃。
检查对象是否为非零也失败,因为该对象无效并且包含一些垃圾值。在对象上调用方法会导致崩溃。
任何人都请帮助我调试问题。
谢谢......................
我使用的垃圾收集器在我的Mac OS X上 可可基础的应用 它有100个正在运行的线程,并且使用 操作队列完成同步。
更可能的是,这个错误在于代码的表面上看起来相当并发的性质。在一台只有两位数内核的机器上运行100个线程(如果有的话)不可能是非常有效的,当然,保持一切正常同步将是相当困难的。
最好的开始是打开Malloc堆栈日志记录并使用malloc_history
来查找在南部地址发生的事件。
另外,10.6.5中的修复影响了GC的正确性。
如果你可以改变垃圾回收对象的代码,然后重写这样的finalize方法,得到一些信息:
- (void) finalize
{
NSLog(@"Finalizing!\n%@", [[NSThread callStackSymbols] componentsJoinedByString:@"\n"]);
//if you put here a breakpoint, you can check the supposed references to this object
[super finalize];
}
我不知道像这样的任何特定问题。你能提供更多的信息吗?也许试图缩小一些问题的范围?发布您怀疑导致问题的任何代码? – luqui 2010-11-15 07:32:23