[Samsung Galaxy Nexus] fajabird:
Hi,

working daily with linux-OS and beeing actively using custom roms since Android 2.1 I have a bit of knowledge on RAM usage on Linux and Android. As many know and like to post "free RAM is wasted RAM" - we all know that. But why? Because all not actively used RAM (lets call it "free") can be used as a cache for applications you likely will need in future. But what if your GNEX runs out of free RAM an is not able to cache any more? What if you start a new huge application like your browser and free RAM has to be obtained to give it to your starting application? Yes - bad things can happen!

But lets start from the beginning:

1. If you go to Settings->Applications->Running you get the RAM-bar at the bottom of the screen. This is splitted in two parts: used and free (like defined above). Used RAM seems to be actively allocated RAM which cannot be used for other things like starting applications and free is the RAM which can be obtained because it only containes caches apps which are not running.

2. Directly above that bar you se a kind of brace which seems not to be just eye-candy but has some meaning: The lower and thiner part of that brace seems to show the part of that RAM (used or free) that is used by the applications/service in the list above. Example: if you switch to cached applications the brace will jump to that part of the bar and by killing some of the cached apps you will change the width of the brace.

Lets put things together:

viewing the used RAM you will notice that the brace does not cover the whole used-ram-bar but, in my case, about the half. I also noticed that the width of the brace does not change greatly with uptime of the device as all listed services will stay at their size more or less so their sum is not going to change greatly. In my case all services sum up to about 250MB meaning the braces width is about 1/3 of the screen assuming that GNEX has 700MB total RAM (the rest of 1GB total physical RAM is allocated to other parts of the SOC-chip like Baseband and GPU and not available to linux-kernel or android).

But one thing does change greatly!!! The part of the used-ram-bar which is not covered by the brace will be very small after rebooting and will grow with uptime. As the part covered by the brace is a fixed factor this means that the free ram is the trade-off for the growing uncovered part of the used-ram. In my case I get after rebooting the device: 250MB free, 450MB used of which 250 are covered by the brace, leaving 200MB used RAM for whatever (kernel, non-android stuff like filesystem caches, ideas?) After some days of usage this changes to 50MB free, 650MB used of which still about 250MB are covered by the brace, leaving 400MB used for other things (NOT app-cache).

Consequences:

From the assumptions above this means that android is not able to cache apps anymore (because they live in the free RAM) and my device beginns to lag while opening new apps. To obtain enough RAM for starting apps like browers (stock or firefox tested) it will even need to kill services!!! And in extreme low-memory situations it even kills the foreground app you are using (to me it happened while I used firefox). Also when you go to settings->applications->running again you will notice that android will be restarting your services over and over again to obtain more RAM without much success. In the situations my actively used firefox got killed something different happened: the launcher also had been killed because it was starting over but more importently settings->applications->running showed that much of the used RAM not covered by the brace was gone! Free RAM jumped from 50MB to about 200MB which is nearly what I get after a fresh reboot. I assume that in this extreme low memory situation also the kernel did clean up things.

From my observations you will get the following if your free RAM accoring to settings->applications->running is very low:

1. no cached apps if you swich to settings->applications->running->cached

2. laggy phone

3. your launcher gets killed more oftern when returning from e.g. browser

4. more apps get killed when returning to launcher meaning that they will get restarted if you return to that app

5. in low memory situations (app does not fit into free-RAM-part) services will get restarted frequently

6. in extreme low-memory situations kernel cleans up everything (i guess)

The question now is: what is using so much RAM and growing over uptime until our GNEX has no more free RAM? I alread checked different ROMs including stock 4.1.2, stock 4.2.2 slimbean 4.2.2 cm10-stable cm10.1-nightly and all of them show this behavior. The only thing I noticed: all 4.1 ROMS perform better in this area: their RAM does not fill up that quickly but it does. On 4.2 ROMs it takes just few days to run out of free RAM for me. I already wiped my device and installed only realy needed apps (20 out of 140!!!) but it still happens.