自己去查了一些资料,下面总结一下ARC和垃圾回收的区别。如果有错误的地方,还请大家指出和补充。谢谢!
1.什么是垃圾回收。java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是“无用信息”,这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾回收也可以清除记录碎片。
2.OC不支持垃圾回收。需要程序员编写代码来释放对象占用的内存或者开启ARC自动管理内存。
3.自动内存管理,即ARC,不同于垃圾回收。编译器中包含了内存管理原则,ARC下,只能简单地由它自己来调用,无法帮助程序员查找错误。
4.ARC介于自动垃圾回收和手动内存管理之间。ARC无法处理对象之间由于互相强引用引起的循环引用,导致两个对象永远都不能被释放掉。因此在ARC下,需要程序员自己去避免循环引用的发生。
5.ARC不是强制的,这一点不同于垃圾回收。在一个程序里,如果支持垃圾回收,即所有的代码都使用垃圾回收机制,如果不支持,就不都能使用。但是ARC和MRC却可以同时出现在同一个程序的代码中。这一点使得程序的稳定性,兼容性都较之垃圾回收更强一些。 |