Re: ARC vs Manual Reference Counting
Re: ARC vs Manual Reference Counting
- Subject: Re: ARC vs Manual Reference Counting
- From: Tom Davie <email@hidden>
- Date: Mon, 09 Sep 2013 11:33:15 +0200
On 9 Sep 2013, at 10:18, Jean-Daniel Dupas <email@hidden> wrote:
>
> Le 9 sept. 2013 à 09:58, Tom Davie <email@hidden> a écrit :
>
>>
>> On 9 Sep 2013, at 09:44, Kyle Sluder <email@hidden> wrote:
>>
>>> Thirded. I thought I wouldn't like it. As soon as I didn't have to manage retains and releases of temporary objects, the discipline completely left my mind. Now whenever I go back to non-ARC code I invariably make a ton of memory management errors, most of which are caught by the analyzer.
>>>
>>> --Kyle Sluder
>>>
>>> On Sep 8, 2013, at 11:18 PM, Alex Kac <email@hidden> wrote:
>>>
>>>> Bingo. We’ve been working with Cocoa/Obj-C for many years, and still we’d find weird errors that would be caused by some over-released object. We cut a ton of code with ARC, and in the end we saw reliability go up and actually even some performance.
>>>>
>>>> ARC is a win. The only place it really got a bit hairy was CF objects. I wish ARC would work with them a bit more.
>>>>
>>>> On September 8, 2013 at 11:56:10 PM, Jens Alfke (email@hidden) wrote:
>>>>
>>>> They’re a _lot_ easier. It might not look that way when you’re reading about all the details, or converting existing code, because then you’re focusing on the rare edge cases. But for the most part when actually coding you can simply ignore ref-counting. Your code becomes more compact and readable, and you’re less likely to make mistakes.
>>
>> I *completely* agree with you with regards to memory management being hard to get reliably right (not hard to get right, hard to get reliably right), and weird errors all the time caused by memory management going wrong. ARC is a major boon in this regard.
>>
>> However, I have to say, I have had the complete opposite experience with regards to performance. Having measured various projects before and after converting to ARC, I have seen numbers between 30% and 100% slowdown with ARC. The average is probably around 50%. I have never seen performance improve when using ARC.
>
>
> And does the profiler explicitly shows that ARC runtime code is the culprit ?
Yes, it does. If you’d like an example to verify this behaviour with, play with converting https://github.com/beelsebob/CoreParse to ARC, and profiling the result. This is the example that showed 100% slowdown initially. The last time I tried this with with Xcode 4.5, and after I’d added a bunch of extra autorelease pools all over the place which reduced ARC’s overhead to “only" 50%. This in itself suggests to me that ARC causes a significant increase in the number of autoreleased objects (which surprised me given the runtime optimisation to get rid of autorelease/retain pairs in callee/caller).
It’s fair to say that large chunks of this code could be optimised by removing a bunch of object allocation/deallocation, but I think it’s fairly representative of the style most obj-c code will be written in, and hence a pretty fair test.
> 100 % slowdown! i suggest you push the Continue button after hitting your breakpoint :)
>
> Joking apart, i am surprised that you find things slower, but i never did any adequate performance comparisons myself.
Yes, I too was surprised by that, this was in fact the first example I tried profiling, so I was even more surprised, and went out and tested a bunch more bits of code.
> I don't know what it is like to convert an old project, but I would recommend ARC for new projects and I believe the time investment is worthwhile.
For me the distinction is more along performance lines. If you’re dealing with code that you’re already thinking “hmm, rewriting the cores of this in C, rather than high level obj-c would get me a nice performance gain”, then ARC is probably not for that code. If on the other hand, you’re writing an application that does normal interactions with the user, that’s presenting bits of UI, and grabbing data from the internet, and not really doing much CPU intensive stuff, then ARC is almost certainly a major boon for that code.
Tom Davie
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden