I don't understand RAM Usage

RAM Image

RAM Image

Is this normal RAM usage? I have Single Channel ddr2 RAM, maximum memory is off in System Configuration. I don't understand why I have 5,7GB available, sometimes as low as 4GB in idle. System info and BIOS says I have 8GB installed so no problem there. RAM usage is usually around 27% to 30% idle, while CPU usage is 1% idle. While gaming RAM usage is 60%.

Now i'm questioning what Available and In use really mean. Everything seems fine but I don't understand the information being presented to me by windows.


Solution 1:

Windows actually have two types of "free" memory:

  • Free: The memory is actually free of all kind of data and can be used right away.
  • Available: This represent the free memory and the cached memory.

Since Windows Vista, Windows actually tries to pre-load some files into the memory so it could be accessed faster later, it's the cached memory.

Don't worry, your ram usage is perfectly fine.

Solution 2:

tl;dr version: The amount of RAM that Windows shows as "in use" on an idle system is almost always practically meaningless.

First, let's explain some labels and see how things add up, or don't:

From your Resource Monitor screen cap... "Available" is RAM that is available for immediate assignment in order to resolve a page fault. "Available" is the sum of "Standby" and "Free". This is because "Standby" memory is just as available for immediate use as "Free".

So, Standby 1211 MB + Free 4709 MB = 5920 MB Available. That works.

"In use" from Task Manager is approximately "Total" less "Available". 8147 Total - 5920 Available = 2227 MB. This matches your "2.2 GB in use" on the Task Manager display.

(Remember that to go from MB to GB you need to divide by 1,024, because Windows stupidly uses SI prefixes to mean powers of 1024.)

The Task Manager's "cached" counter is tricky. It is the sum of the standby page list (which, as mentioned, includes both the SuperFetch cache and the virtual memory page cache) plus the reactive file cache... which is part of kernel address space, is pageable, and is also included in the "in use" counter.

Therefore, if you're trying to add things up to figure out "where all my RAM went", it is an error to include "cached" in the sum; doing so will give you a total that's too large, as you'll be counting the standby list and part of "in use" twice. (Sometimes it gives you a total that's more than the total RAM!)

Incidentally there is another list, the "Zero" or "Zeroed" page list, which the resource monitor display simply includes in "Free"; for most "where's my RAM" questions the distinction between "Free" and "Zeroed" is insignificant.

I don't understand why I have 5,7GB available, sometimes as low as 4GB in idle.

Windows is a demand-paged virtual memory operating system. "Demand-paged" means that pages of code and data are not, generally, brought into RAM until and unless they are referenced. Each time you reference a page that's not in RAM, a page of RAM must be removed from one of the "available" lists (zeroed, free, or standby) and assigned to the process that needs it. It then gets counted as "in use", and is counted in the process "working set". (Pages are 4 KB.)

This sequence is a "page fault" - a "hard page fault" if it meant reading from disk (or SSD). And we say that the page has been "paged in".

(Many page faults are actually resolved without having to go to disk. Those are called "soft page faults". Needless to say this is much faster than going to disk. Often they are resolved to pages that are on the Standby list - that's the "virtual memory page cache" function I mentioned previously. I won't get further into that here.)

However the term "demand-paged" also applies to allocation of physical memory (RAM). A process that's experiencing a high page fault rate + a lot of CPU time (i.e. a high demand for RAM) will be allowed to use more RAM; less-busy processes get their working sets trimmed back. If available RAM is plentiful (as it is in the cases you describe) processes are generally allowed to just fault stuff in and keep it - because, why not, if RAM is plentiful?

But if demands for RAM increase and available RAM gets scarce, then previously-bloated processes will be trimmed to make more RAM available for the recently-busy processes.

And of course you know that no modern operating system is ever completely idle? There are always background maintenance tasks, and they need RAM to work in. If there is plenty of RAM (as there is on your machine) they will be allowed to use a fair amount of it, not because they "need that much" but because nothing else is running that needs it. But if you then run a RAM-intensive program, these background processes will be put back in their place, so to speak, so that more RAM is available for what you're actively working on.

It's therefore a mistake to look at an idle Windows system and say "oh, Windows takes x amount of RAM just when it's idle!" x depends hugely on how much RAM there is total, how long it's been idle, what stuff you've installed that added various "idle tasks" to the system, and even what it was doing before it was idle. So it will vary a lot from one system to another.

Nor does the observation that "it's using x amount of RAM when idle" on your system mean that Windows will keep that much for itself when you start a RAM-intensive program. It just means that's how much it's using right now, under present conditions, as influenced by many things that went on recently.