One of the reasons for Java's success is its ability to perform memory management - that is, Java is designed to ensure memory is properly allocated and freed. Does this mean you, as a developer, no longer have any responsibility regarding your software's usage of memory?
No.
There are two primary reasons for a developer to remain vigilant:
Java applications CAN leak memory. Not in the traditional way, where memory is no longer referenced by your application and yet not accessible by the system OS - such a problem can not occur. However, if you allocate memory, use it, then fail to free (i.e. dereference), then the Java garbage collector will never reclaim it. Do this enough and your system will still run out of memory.
Excessive memory usage can result in application slowdown. Do you know how much memory your application is using at any given time? If you have access to limited memory, do you know how much your application has allocated? Are there places in your code that could be optimized to use less memory, thereby freeing systems resources for other activities?
A memory profiling utility indicates a running tally of allocated memory as well as those portions of your code that reference memory at a specified moment in time (such as when the program exits). Such information can be used to ensure all unnecessary memory has been dereferenced and that memory usage has been optimized.
This function is provided in IBM Rational Test RealTime by the memory profiling feature for the Java language.
Next: Performance profiling