256÷128=10?! The impact of the iPhone 3GS RAM increase

The most significant thing that Apple’s been touting about new iPhone 3GS is its speed. Generally, when you think about speed improvements, you think of faster CPUs, faster GPUs, and such. But one very important difference in the 3GS that’s contributing to the overall performance is the increased RAM and that’s pretty much gone under the radar.
Apple’s been fairly quiet about the actual specs of the hardware that’s been in all the iPhones. Take a look at their Technical Specifications page and do a quick search on processor speed, GPU specs, or RAM sizes and you’ll come up empty. Essentially, all you’ll find is the “capacity” and that’s mainly because that’s how they differentiate the various models (“capacity” on the iPhone refers to its flash memory and is the equivalent of hard drive space on your Mac or PC).
But even though Apple’s been mum about these details, the actual specs are fairly widely known…
CPU (central processing unit):
- original iPhone: ARM 11, 412 MHz
- iPhone 3G: ARM 11, 412 MHz
- iPhone 3GS: ARM Cortex, 600 MHz
GPU (graphics processing unit):
- original iPhone: PowerVR MBX Lite
- iPhone 3G: PowerVR MBX Lite
- iPhone 3GS: PowerVR SGX
RAM (random access memory):
- original iPhone: 128 MB
- iPhone 3G: 128 MB
- iPhone 3GS: 256 MB
At a glance, you’ll notice that the RAM in the 3GS doubled from past iPhone models. Twice the amount of RAM than you’ve had is never a bad thing, but the reality here is far more noteworthy… The older iPhone models have been often considered underpowered when it comes to RAM, so even though the RAM amount is technically doubled, in actual use, you’ll often be working with 4x to 10x the amount of free RAM. And that’s one major aspect that’s contributing to the overall speedier feel of the 3GS.

Here’s what the RAM usage looks like for my freshly started 3GS using the handy app Memory Status. “Wired” and “active” RAM is generally memory that’s in-use while “inactive” and “free” is basically available.
So there’s around 156 MB of memory available at startup time.
iPhone 3GS RAM after startup

Now compare this to my freshly started 3G. The available memory is just under 40 MB. So right out of the gate, you’re playing with around 4x the memory on the 3GS.
iPhone 3G RAM after startup
The apps that are running when both phones start-up are:
- MobileMail (Mail)
- MobileMusicPlayer (iPod)
- MobilePhone (Phone)
- BTServer (Bluetooth server)
- SpringBoard (manages your home screen)
- accessoryd (controls accessories connected through the dock connector)
- aosnotifyd (controls MobileMe syncing)
- mediaserverd (controls audio mixing)

But now, after opening, using, and quitting several apps, you can see that the available memory dropped down a bit to around 122 MB. The one additional app that remained running at this point was MobileSafari (Safari). Apple gives themselves the nice little benefit of being able to run apps in the background.
iPhone 3GS RAM after use

Again, by comparison you can see that after similar use, the 3G’s available memory drops down to under 13 MB. Here’s where the close to 10x factor comes in.
iPhone 3G RAM after use
So why are these multipliers significant? Well, the more available RAM you have, the more you’re able to keep the background apps running. One huge difference I’ve noticed on the 3GS is that I can keep a bunch of Safari tabs open and when I go through them, they rarely need to reload. Anyone who’s owned a 1st generation iPhone or a 3G can attest to the fact that Safari would almost always reload each full page when you’d jump from tab to tab.
And a similar thing happens when you jump from app to app. One of the things that made the older phones feel sluggish was having each app fully load when you’d open it. But now with the 3GS and its larger memory, this is very much a thing of the past since many of the standard apps (Mail, Safari, etc) don’t unload so easily now. Because these are the apps that are used most often by people, this is one major reason that everything feels so much more zippy on it.
So even though Apple isn’t touting it, the increased RAM size of the iPhone 3GS is definitely a major contributor to the “S” in its name. It’s an incredibly welcome improvement.

Kris Markel
5:11pm, July 8
I’ve been wondering if the flash memory used in the 3GS is also faster than what’s in the 3G. Beyond just having more RAM, quicker access and faster reads on the “hard drive” could significantly improve things like application launch times.
Stephen Coles
10:45pm, July 8
Continuing your digression: here’s what a well-designed interrobang looks like.
Justin
10:49pm, July 8
I wonder why they don’t list the CPU and RAM specs on their site. You think they would want people to know how much faster the “S” is?
Karl
11:36pm, July 8
There are other factors at play here. The ARM11 instruction set allows for smaller object code size for one. And its well known that Apple are using LLVM extensively.
These two factors combined probably lead to the actual OS core and Apple’s own applications being 25% smaller and executing faster (less memory to read and faster instructions on a faster CPU)…assuming Apple has recompiled everything to take full advantage and it would be unlike Apple not to..
Apple is using the extra RAM to very good effect in terms of making the 3GS much faster but also leaving plenty of space for developers to benefit.
Can it be long before we get third party ‘blessed’ apps that can run some part of themselves in the background…?
Jim stewart
4:56am, July 9
This was a huge selling point for me. Now I can use backgrounder to run apps like Tuner in the background and still use mail and safari without Tuner running out of memory. Not to mention being able to have Skype or similar running.
John Casasanta
6:28am, July 9
I just corrected a small but significant oversight in the post (I left out the word “additional” when talking about background apps):
“The one additional app that remained running at this point was MobileSafari (Safari).”
Craig Hunter
8:04am, July 9
I saw some big impacts of the free memory on the 3GS when developing Mars Flyer, which will use up to 27MB of RAM if allowed. On older devices, this is an intricate dance, but it becomes a non-issue on the 3GS. I got into some of the details in my blog. I agree, this is a watershed change for developers.
Dalton
9:33am, July 9
I wonder how long it will be before we start seeing applications that are “optimized” for the 3GS, in the sense that they require the additional RAM and speed improvements to run properly, leaving those of us with older phones feeling left out?
Louis
10:03am, July 9
Karl:
Apple is definitely investing heavily in LLVM, but they are not using it on the iPhone at this time. The ARM backend is not yet production quality, it is not an option in the current SDKs, and if you look at the frameworks on an iPhone they were clearly built with gcc, not llvm-gcc or clang.
There is no doubt that at some point in the future iPhone OS (and its apps) will be built with LLVM, but it isn’t yet.
Paul Goracke
11:38am, July 9
As a developer with a 3GS whose wife has his old 1st Gen, I’ve noticed this newfound memory bounty makes it easy to get complacent about handling memory warnings while developing–and more difficult to get a real feel for how often these will happen on all the pre-3GS devices out there.
Just one more stage to the required test matrix, I guess…
Mike
3:53pm, July 9
Whilst you’re correct in that there is considerably more memory available to applications on the 3GS, you’ve made the usual (incorrect) assumptions about how the various reported memory numbers translate into memory that’s available to an application.
With the exception of wired memory, and in the case of iPhoneOS, private memory, all of RAM is used by Darwin as a cache for data that lives persistently somewhere else.
“Free” memory is memory that is not being used by the cache, but memory from both the active and inactive categories is also available for re-use.
Without considering the distribution of private memory between the active and inactive categories in the above charts, they are unfortunately meaningless. Even then, you would need to distinguish between private memory that will be surrendered on receipt of a low memory warning vs. that which won’t before you can approximate how much memory is available to an application.
= Mike
John
9:30pm, July 9
Yes, they unclogged the bottleneck.
ed
12:17am, July 10
Invizible
Ed
12:23am, July 10
Your site is invisible on the Google Android browser. No text at all.
Hayden James
4:41pm, July 15
This is great. Will have to link to this. Thanks
John Casasanta
4:39am, July 20
@ Mike:
See this: http://bit.ly/virtualmem