I have explained some of this in various threads and thought it would be nice to have a single thread where I could try and do a better job explaining memory management on the Hero (and all other Android based phones) and why a task killer isn't necessary in day to day use. I am a Linux geek for a living. I work in high performance computing and have been working with Linux for better than ten years. The following is not opinion based on reading message board posts it is an explanation, without getting too technical hopefully, of how memory management actually works on your Sprint Hero. I will include some specific notes for those who have rooted their phones at the end of this post.
Before I jump into memory management let me start by saying I do have a task killer installed. I do not use it to auto-kill apps nor do I kill all applications. Doing these things can have unintended consequences if you don't know what you are doing and haven't added the right processes to the ignore list in your task killer. So before you even install a task killer you need to understand that killing all running processes, the ones you have access to at least, can cause you not to get text messages, your alarms not to go off, and even phone calls to be delayed more than they are already. So if you read this and decide to install a task manager remember that auto-kill and kill all processes is not the best way to use these tools.
With that disclaimer out of the way the first thing I feel should be be stressed is:
YOU ARE NOT USING A WINDOWS DEVICE
That is important. Many folks, including myself, come to our beloved hero from a WinMo world where killing apps affected performance in a big way. With one caveat this is not the case with Android. The caveat is this: Some applications do not sleep properly or can have memory leaks and that is where having a task killer comes in handy. Outside of the rare case of misbehaving apps the day to day use of a task killer is pretty much a waste of your time.
The second point I want to make is that your reported free memory is not accurate. Not a single task killer on the marketplace properly reports usable memory for your device. Remember the first point? The one in bold? Good. That's why you don't see accurate reporting of free memory on your device. Your Sprint Hero is a Linux based device and is designed to multitask unlike WinMo and the iPhone. One of the ways Linux speeds up multitaksing is to eat all the memory that it can at any given in time. It stores as much as it can of any process in memory so it can be accessed faster for you. This leads to it appearing that you have a very low amount of free memory when in reality you do not. Bits are unloaded whenever anything else is called and that happens at the same speed as it would if the memory were technically empty. An example of this is my workstation at the office. On boot, after login, running nothing but a terminal application, my workstation shows between 12.5GB and 14GB RAM used (yes GB). After starting a media player, two browsers (chrome and firefox), my usual terminal application, tweetdeck, whistlr, pdigin, Eclipse PDT, and usually MS Office 2k7 via Wine I can go back to the same terminal window I opened at the start of the session and see between 12.5GB and 14GB RAM used. Nothing has changed at all and I have apps running that are known to be heavy on memory usage. The only time I see performance drop on my workstation is when I hit the disk IO to heavily. While that much RAM isn't synonymous with the Hero it is a good example.
If a process isn't actively using the CPU then it isn't affecting your battery or degrading your performance. Unlike WinMo a long list of running tasks doesn't mean much on Android. The apps that are actively using the CPU are sleeping. They have resident bits in RAM and only the bare minimum needed to keep them alive isn't swapped in and out of memory. A sleeping app is not accessing RAM, CPU, or network. It can run in the background for days without having any affect on performance. So the list of "running" apps you see with a task killer isn't a list of active apps but rather apps waiting patiently and being behaved until you need them and then they can snap right into being active for you.
Because of the way Linux manages RAM using a task killer when you don't have any apps misbehaving will degrade your performance noticeably. This is because everything has to be loaded back into RAM when you start your application again. The "sleep" described above is negated when you kill all of your applications thinking that you will gain performance by "clearing" out RAM. So while in the WinMo world you wanted as few apps running as possible the same is not true in the Android world and your Hero is an Android device! It's not an easy mindset to change. I am a Linux geek for a living and I still grabbed a task manager on my first day and started killing running apps. I had to get my head around my phone actually being Linux. I can imagine for someone who doesn't come from my background that this is even harder to grok.
Now there are apps out there that don't behave properly. This is why I still have a task killer installed. Well I say that there are. I honestly haven't had one on my phone yet and I do a lot of installing and uninstalling apps from the market because I am a geek and like to fiddle. It may be hard to track down an app that is misbehaving or has a memory leak but Spare Parts is a good place to start. If you have an app that you know you haven't been using and it shows as using a bunch of memory compared to other apps you use about the same amount then it's likely you got a hold of a problem app. The answer, in my opinion, is not find a task killer that will kill the app over and over again but to uninstall the thing. If it has memory issues who knows what other problems there are in the code. I have learned through years of trial and error not to trust apps that have memory leaks. How you handle broken apps is up to you but my recommendation is just to get rid of the damn things and then you don't have to worry about it going forward. But like I said I keep a task killer installed just in case.
The one thing I feel I need to make sure is said before I close this little diatribe out is that there is one place you will see apps fight for memory and that is when you boot your phone. Once everything has loaded and grabbed all the data everything needs apps will settle in to sleep and stop using RAM. The more crap you have checking the network for data the longer it will take your phone to settle into what it perform like after a boot. So if you have a dozen or so widgets that check the weather, to do lists, sports scores, Obama's horoscope, you dog's biorythms, and so on then any performance issues you see on boot are you fault and no task killer in the world will help you. I'm just sayin'....
I have seen some claims that battery life improves with the use a task killer but unless you are running a lot of network applications I don't see it happening based on the way Android is designed to let apps sleep. I know I haven't seen much difference than the reported life of folks that use a kill all task killer three or four times a day. Based on what I know about Linux I can safely say that I don't see any real reason for using a task killer to ever kill all applications on a Hero. You might gain a momentary bump in battery life by not having an app check something here and there but you would lose it again when you have to load everything every time you start an app. And the degrade that you would have in performance just isn't worth a few minutes of battery life in my opinion.
For users with rooted phones:
The following won't affect anyone that hasn't rooted their phone.
If you aren't using an app then remove it. This goes for all the preloaded applications from Sprint. You can increase performance by making memory available to load the actual stuff use. You should still see "free" memory being what you might consider to be low coming from WinMo but it's full of the goodness you want and use.
REMOVED SECTION ON SWAP BASED ON FURTHER RESEARCH
That about sums up what my mind can get out at the moment. Please feel free to ask any questions you have and I'll try to answer them if I can and if I can't I'll try to find you an answer. I hope this has been helpful.
Before I jump into memory management let me start by saying I do have a task killer installed. I do not use it to auto-kill apps nor do I kill all applications. Doing these things can have unintended consequences if you don't know what you are doing and haven't added the right processes to the ignore list in your task killer. So before you even install a task killer you need to understand that killing all running processes, the ones you have access to at least, can cause you not to get text messages, your alarms not to go off, and even phone calls to be delayed more than they are already. So if you read this and decide to install a task manager remember that auto-kill and kill all processes is not the best way to use these tools.
With that disclaimer out of the way the first thing I feel should be be stressed is:
YOU ARE NOT USING A WINDOWS DEVICE
That is important. Many folks, including myself, come to our beloved hero from a WinMo world where killing apps affected performance in a big way. With one caveat this is not the case with Android. The caveat is this: Some applications do not sleep properly or can have memory leaks and that is where having a task killer comes in handy. Outside of the rare case of misbehaving apps the day to day use of a task killer is pretty much a waste of your time.
The second point I want to make is that your reported free memory is not accurate. Not a single task killer on the marketplace properly reports usable memory for your device. Remember the first point? The one in bold? Good. That's why you don't see accurate reporting of free memory on your device. Your Sprint Hero is a Linux based device and is designed to multitask unlike WinMo and the iPhone. One of the ways Linux speeds up multitaksing is to eat all the memory that it can at any given in time. It stores as much as it can of any process in memory so it can be accessed faster for you. This leads to it appearing that you have a very low amount of free memory when in reality you do not. Bits are unloaded whenever anything else is called and that happens at the same speed as it would if the memory were technically empty. An example of this is my workstation at the office. On boot, after login, running nothing but a terminal application, my workstation shows between 12.5GB and 14GB RAM used (yes GB). After starting a media player, two browsers (chrome and firefox), my usual terminal application, tweetdeck, whistlr, pdigin, Eclipse PDT, and usually MS Office 2k7 via Wine I can go back to the same terminal window I opened at the start of the session and see between 12.5GB and 14GB RAM used. Nothing has changed at all and I have apps running that are known to be heavy on memory usage. The only time I see performance drop on my workstation is when I hit the disk IO to heavily. While that much RAM isn't synonymous with the Hero it is a good example.
If a process isn't actively using the CPU then it isn't affecting your battery or degrading your performance. Unlike WinMo a long list of running tasks doesn't mean much on Android. The apps that are actively using the CPU are sleeping. They have resident bits in RAM and only the bare minimum needed to keep them alive isn't swapped in and out of memory. A sleeping app is not accessing RAM, CPU, or network. It can run in the background for days without having any affect on performance. So the list of "running" apps you see with a task killer isn't a list of active apps but rather apps waiting patiently and being behaved until you need them and then they can snap right into being active for you.
Because of the way Linux manages RAM using a task killer when you don't have any apps misbehaving will degrade your performance noticeably. This is because everything has to be loaded back into RAM when you start your application again. The "sleep" described above is negated when you kill all of your applications thinking that you will gain performance by "clearing" out RAM. So while in the WinMo world you wanted as few apps running as possible the same is not true in the Android world and your Hero is an Android device! It's not an easy mindset to change. I am a Linux geek for a living and I still grabbed a task manager on my first day and started killing running apps. I had to get my head around my phone actually being Linux. I can imagine for someone who doesn't come from my background that this is even harder to grok.
Now there are apps out there that don't behave properly. This is why I still have a task killer installed. Well I say that there are. I honestly haven't had one on my phone yet and I do a lot of installing and uninstalling apps from the market because I am a geek and like to fiddle. It may be hard to track down an app that is misbehaving or has a memory leak but Spare Parts is a good place to start. If you have an app that you know you haven't been using and it shows as using a bunch of memory compared to other apps you use about the same amount then it's likely you got a hold of a problem app. The answer, in my opinion, is not find a task killer that will kill the app over and over again but to uninstall the thing. If it has memory issues who knows what other problems there are in the code. I have learned through years of trial and error not to trust apps that have memory leaks. How you handle broken apps is up to you but my recommendation is just to get rid of the damn things and then you don't have to worry about it going forward. But like I said I keep a task killer installed just in case.
The one thing I feel I need to make sure is said before I close this little diatribe out is that there is one place you will see apps fight for memory and that is when you boot your phone. Once everything has loaded and grabbed all the data everything needs apps will settle in to sleep and stop using RAM. The more crap you have checking the network for data the longer it will take your phone to settle into what it perform like after a boot. So if you have a dozen or so widgets that check the weather, to do lists, sports scores, Obama's horoscope, you dog's biorythms, and so on then any performance issues you see on boot are you fault and no task killer in the world will help you. I'm just sayin'....
I have seen some claims that battery life improves with the use a task killer but unless you are running a lot of network applications I don't see it happening based on the way Android is designed to let apps sleep. I know I haven't seen much difference than the reported life of folks that use a kill all task killer three or four times a day. Based on what I know about Linux I can safely say that I don't see any real reason for using a task killer to ever kill all applications on a Hero. You might gain a momentary bump in battery life by not having an app check something here and there but you would lose it again when you have to load everything every time you start an app. And the degrade that you would have in performance just isn't worth a few minutes of battery life in my opinion.
For users with rooted phones:
The following won't affect anyone that hasn't rooted their phone.
If you aren't using an app then remove it. This goes for all the preloaded applications from Sprint. You can increase performance by making memory available to load the actual stuff use. You should still see "free" memory being what you might consider to be low coming from WinMo but it's full of the goodness you want and use.
REMOVED SECTION ON SWAP BASED ON FURTHER RESEARCH
That about sums up what my mind can get out at the moment. Please feel free to ask any questions you have and I'll try to answer them if I can and if I can't I'll try to find you an answer. I hope this has been helpful.