[was : Re: Cross platform: How they do it?] Java memory management

Chong Yu Meng chongym
Mon May 17 12:01:26 PDT 2004



Andrew L. Gould wrote:

>I have a question for the programmers on the list:  It's my understanding that 
>Perl, Python and Java (and Ruby?) manage memory allocation for the 
>programmer.  Does this impact the programmers' ability to control the 
>efficiency of the application?
>
>  
>
I'm always afraid when people mention memory management in Java. Because 
poorly coded applications in Java are worse than equivalent packages in 
Visual Basic.

Theoretically, you can let Java's Virtual Machine take care of the 
memory. Just create any number of objects you want and eventually, the 
garbage collector will kick in and clear all the unused or expired 
objects away. There are problems with this approach.

A useful analogy that comes to mind is the way my wife and I handle 
housework. Because we have no kids and no maid, housework will have to 
be done by one of us. My wife takes out a clean cup everytime she needs 
a drink, which adds up to quite a number of dirty cups by the end of the 
day. Theoretically, I should clean the cups at the end of every day 
before all the clean cups get used (because I'm not working), and 
therefore ensure that there are plenty of clean cups the next day. Well, 
when 6 pm comes around, and I'm working on a problem (or playing 
Warcraft), guess what ? I have to drop everything and do the cups.

The Java garbage collector, especially in Sun's Java VM, does the same 
thing. If you leave memory management to the Java VM, eventually, when 
it does kick in, because memory is low, you will find that your 
application "hangs up" -- literally stops responding, until the garbage 
collector finishes its task of re-claiming unused memory. This time can 
be quite significant (up to minute, once when I was doing a presentation 
to venture capitalists !) if you have a lot of memory that needs to be 
cleaned up.

There is no explicit concept of pointers in Java, such as you find in C. 
But there are ways that you can make sure that objects you create are 
disposed of, by setting them to null, or using the close() method if it 
is available. This affects the programmer in a couple of ways: for 
novice programmers working on small projects for a small audience 
(example: a school lab project), this means that they can concentrate on 
the logic, and understand the language, without worrying about memory. 
This means higher productivity and a less steep learning curve. For 
larger projects, however, you'll quickly find that the garbage collector 
is no substitute for some defensive programing techniques.

-- 
"There is nothing so absurd but some philosopher has said it." 
		-- Marcus Tullius Cicero
+----------------------------------------------------------------+
| Pascal Chong                                                   |
| email: chongym at cymulacrum.net                                  |
|                                                                |
| Please visit my site at : http://cymulacrum.net                |
| If you're using my documentation, please read the Terms and    |
| and Conditions at http://cymulacrum.net/terms.html             |
+----------------------------------------------------------------+





More information about the Linux-users mailing list