I have found, on my machine, that Mac OS X is a little slow to page the right things out.
Whenever doing anything particularly memory hungry, I will often quit a few applications to help it out. Safari is a huge memory hog if it has been running for a while and is top of the list of applications to quit. In my case this was when I tried to run VMWare Fusion without quite enough actual RAM.
You probably know this but here are a couple of links to Apple documentation which describe memory usage and virtual memory on OS X:
http://support.apple.com/kb/ht1342
http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html
Here is the explanation that is given: The inactive list contains pages that are currently resident in physical memory but have not been accessed recently. It's hard to get an exact definition of what this means but is seems to include a file system cache as well as actual inactive memory.
Inactive memory is probably a difficult thing to handle on an interactive GUI driven OS where a user may choose to switch to any running application at any time and providing responsiveness in this sort of situation is important.... but the flipside of that is that in a situation like yours the OS doesn't quite know what the right thing to do is.
It is possible to purge (some of) the inactive memory by using the purge command. This may need to be installed by installing the CHUD tools but you may already have that installed. I haven't tried using the purge command so YMMV...
I've rambled on a bit and may or may not have answered your question. After writing all this out, I found another question on this site which much of the same info that might also help.
I've been researching this very question for some time, and I've come to the conclusion that while there are several so-called "solutions" offered in various places, none of them really fixes the problem or makes the symptoms go away. The best I've found is techniques that change when inactive memory is swapped, such as the use of the purge
command you referred to. I believe that MacLemon is correct that swapping can be disabled only in entirety and not selectively, and so disabling the swapping of inactive memory would in practice be equivalent to disabling virtual memory altogether—which could be a workable solution on a machine with really large amounts of RAM, but is impractical on machines with a low maximum RAM capacity, such as MacBooks or Minis.
The reason that none of the ad-hoc purging solutions make the situation significantly better is that there are really only two ways to force OS X to clear inactive memory: the purge
command, or forcing allocation of all free memory (and since I'm not certain what method purge
uses, these two may actually be more or less the same). purge
, as you mentioned, takes a non-trivial amount of time to complete. Allocating all free memory simply accelerates the process by which the contents of inactive memory would be swapped out naturally, and so still takes up the same large amount of system resources. The only advantage of either of these solutions is that they allow you to choose when the swapping occurs, so it can be done before you would be normally trying to allocate that memory to something else. Whether that is actually useful to you depends on several factors, so the simplest way to find out is to just try it.
I've been testing a few of the memory-clearing utilities out there, and I've found that for me, manually forcing inactive swap requires more active monitoring of memory levels than is practical while I'm actually working, and using a utility that automatically forces the swap when free memory drops below a certain threshold is no better than letting the OS do it on its own, as I still have no control over when the swapping will occur and my apps will SPOD. So while there is an app that will do exactly what your alternative question asks for, that doesn't actually make the situation any less painful.
Until Apple's OS development team decides that the memory management system isn't working the way it's supposed to, and they figure out a way to make it work properly, the only real solution is to identify which apps are generating the most inactive memory and stop using them. In my situation, this has meant changing web browsers. I've been testing a variety of them, and Chrome is so far the one that seems to generate the least inactive memory, probably in part because every tab and every extension runs as a separate process, allowing the OS's native memory management to treat each one separately in terms of prioritizing swapping. Safari is the worst I've tried; starting with Safari 5.1, I could open a few tabs, do absolutely nothing, and watch the inactive memory rise rapidly in Activity Monitor—it would easily go from <1gb inactive to >3gb inactive within about five minutes, run the swap cycle, and then do the exact same thing. (Granted, memory that is doing nothing is exactly what makes it inactive in the first place, but it shouldn't create more inactive memory than was allocated active in the first place.) Safari 6 under Mountain Lion is a bit better, but not better enough to be worth switching back. Firefox, not being based on WebKit, ought to be better about this than either Safari or Chrome, but it has its own legacy of memory management problems, including a history of memory leaks, that make it no better in practice.
What would really fix the issue is if there was an option, likely a hidden option in the OS, telling the OS to simply dump the contents of inactive memory when needed instead of swapping its contents to disk. But I don't expect Apple to ever make such an option available.
Best Answer
You are doing the calculations wrong. In the column you see: physical memory, memory used, cached files, and swap used. Physical memory is total RAM. Memory used is amount of RAM used for running processes. Cached files is the amount of RAM used for storing cache files, and swap used is the amount of disk (HDD/SSD) space that is being used as though it is RAM. So the calculation should be: Physical memory - (memory used + cached files). In your case: 4 GB - (2.91 + 1.07) (give or take).
However, what's really important is memory pressure. The system is good about using the RAM wisely. Your performance shouldn't be impeded as long as the memory pressure stays in the green.