Android heap size on different phones/devices and OS versions

Solution 1:

Some more device info extracted from build.prop files (adb -d pull /system/build.prop):

Phones (Android Version):

  • HTC Wildfire (2.2.1) = 16MB
  • HTC Wildfire S (2.3.5) = 20MB
  • HTC Salsa (2.3.3) = 20MB
  • HTC Desire (2.3.3) = 32MB
  • HTC Desire S (2.3.5) = 32MB
  • Sprd - Richview - S111 (2.3.5) = 32MB
  • Samsung Galaxy S GT-I9000 (2.2) = 48MB
  • Samsung Galaxy R GT-I9103 (2.3.5) = 64MB
  • Samsung Galaxy Y GT-S5360 (2.3.5) = 64MB
  • Samsung Galaxy Note N7000 (4.1.2) = heapstartsize=8m, heapgrowthlimit=64m, heapsize=256m
  • Samsung Galaxy S3 GT-I9300 (4.3, xhpdi) = 8/64/256MB
  • Samsung Galaxy S4 GT-I9505 (4.4, xxhpdi) = 8/128/512MB
  • Google Galaxy Nexus (4.3) = 8/96/256MB
  • Google Nexus 4 (4.4, xhdpi) = 8/192/512MB
  • Google Nexus 5 (4.4, xxhdpi) = 8/192/512MB
  • Samsung Galaxy S6 SM-G920W8 (7.0) = 8/256/512MB

Tablets (Android Version):

  • Samsung Galaxy Tab GT-P1000 (2.2) = 48MB
  • Samsung Galaxy Tab 8.9 GT-P7300 (3.2) = 5/64/288MB
  • Samsung Galaxy Tab 10.1 GT-P7500 (3.2) = 5/64/288MB
  • Samsung Galaxy Tab 3 10.1 GT-P5200 (4.2, mdpi) = 8/96/256MB
  • Acer Iconia A500 (3.2.1) = 5/48/256MB
  • Kindle Fire HD 7" (4.0.3) = 5/48/256MB
  • Asus Transformer Prime TF201 (4.1.1) = 5/48/256MB
  • Nexus 10 (4.4.3) 16/192/512 MB

Solution 2:

Does anyone know if the heap size on Android phones is a constant value according to what is set in the OS version or if this is a setting which the phone producers can decide on?

Technically, it is a setting which the phone producers can decide on. Android is open source. I do not recall the Compatibility Definition Document spelling out heap size requirements, though I haven't looked recently.

Is the heap size proportional to the amount of RAM on the phone?

No, it tends to be based more on screen resolution, as higher-resolution screens tend to want to manipulate larger bitmaps, so Google makes heap size recommendations that, hopefully, device manufacturers will abide by.

I've only found articles where people say that the heap size of an application is 16M.

Searching StackOverflow on [android] "heap size" turns up this answer.

Solution 3:

Not only phone producers, but anyone who creates a version of the Android OS, can specify the maximum allowed heap size, based upon the specific requirements of their devices. Some Android roots, such as CyanogenMod, even allow the user to select the heap size herself as a setting.

You can detect the maximum allowed heap size using the method

Runtime.getRuntime().maxMemory();

Additional information on this topic is available here.

If your app normally needs more than 16MB of heap, a suggested approach would be to set a minimum OS version level in your manifest that ensures that the overwhelming majority of those downloading your app will have at least the amount that you need, and then find a way to degrade your functionality gracefully in a way that reduces your heap requirements as needed, down to a base level of 16MB, for the small number of users with less than your optimal amount of heap who fall through that sieve.

Here are some figures showing the association of phone RAM with OS version (based on current, not original, OS). I believe that a phone having at least 1GB of RAM will almost always have more than 16MB of heap. Note that the percentages here are for the number of phone models supporting the indicated memory, not total phones in use, which may be quite skewed toward certain models. These numbers were obtained by plugging inputs into the following phone finder (which includes 1500 Android phone models) and so are only ballpark figures: http://www.gsmarena.com/search.php3

Percentage of phone models having at least 1GB of RAM, by current OS version (not version at launch):

Phones running         Percent of models having at least 1GB of RAM   Percentage of all models
4.4 and up             100 percent                                    1.5
4.3 and up             100 percent                                    2.9
4.2.x and up           74 percent                                     18.7
4.1.x and up           71 percent                                     37
4.0 and up             62 percent                                     60
2.3.x and up           57 percent                                     71
2.2 and up             44 percent                                     93
2.1 and up             44 percent                                     97
ALL OS VERSIONS:       41.5 percent                                   100