Re: Memory leak

Posted by Wayne Rasband on
URL: http://imagej.273.s1.nabble.com/Memory-leak-tp3700430p3700436.html

I don't see this problem on my Mac running ImageJ 1.38h and Java 1.6.  
When I open a 4.7MB RGB image memory usage goes to 10MB. Memory usage  
drop to 5.5MB when I use the Image>Color>RGB Split command. It drops  
to less than 1MB when I close the three images. I monitor memory  
usage by clicking in the status bar. Sometimes it takes several  
clicks to reclaim all the memory.

With ImageJ 1.38i, due by the end of the week, the 4.7MB image uses  
5.5MB when opened and memory usage drops to 4.3MB after using the RGB  
Split command. ImageJ 1.38i opens RGB images using half the memory  
required by earlier versions of ImageJ because the AWT Image needed  
to display the image shares the pixel array with the ColorProcessor.  
ImageJ 1.38h did something similar with 8-bit images. Pixel array  
sharing only works with Java 1.6 due to due to bugs in earlier  
versions of Java.

-wayne

On Jan 29, 2007, at 5:22 PM, Gib Bogle wrote:

> Wayne Rasband wrote:
>
>>> I have written a plugin that causes a memory leak.  Each time I  
>>> run the plugin on a single image (3600 kB TIF) the memory monitor  
>>> shows about 14 MB of memory is not released.
>>>
>>> The plugin does a variety of operations:
>>> Polynomial Fit (by Bob Dougherty)
>>> Image Calculator
>>> Multiply
>>> Bandpass Filter
>>> Threshold
>>> Analyze Particles
>>>
>>> At this stage I can't tell where the memory is being retained.  
>>> I'm wondering if there is a general rule for ImageJ plugin  
>>> development to avoid this problem.  If I was just looking at  
>>> single images it wouldn't be a concern, but I want to process  
>>> sets of images (e.g. 100s) and I can run out of available memory.
>>
>>
>> You can monitor memory usage by starting the Memory Monitor  
>> (Plugins>Utilities>Monitor Memory) and then running the plugin.  
>> While it is running, periodically click in the ImageJ status bar  
>> to force the Java garbage collector to run. Try adding two or  
>> three second delays [IJ.wait(2000)] between operations to help  
>> determine which one is retaining the memory.
>>
>> -wayne
>
> I think I've located the (or one) source of the memory leak, and  
> surprisingly it doesn't seem to be related to any of the plugins.  
> When I open an 4.7 MB RGB tif file the memory usage goes up to  
> about 10.5 MB.  I do Image > Color > RGB Split and the memory used  
> is 18 MB.  When I close the three image windows the memory used  
> drops to 10.5 MB.  Is this an ImageJ problem, or is there a way for  
> me to force this memory to be freed?
>
> Thanks
> Gib