Skip navigation.
 
mlHuge increase in memory usage on Leopard
FROM : Nir Soffer
DATE : Mon Nov 19 19:33:55 2007

I found that my app is using 5-9 times more memory in Leopard 
compared with Tiger. The memory during typical usage on Tiger on G5 
with 1.5G RAM is about 21MB (RSIZE), 14M (RPRVT). In Leopard on the 
same machine, the memory reach each 180MB (RSIZE). On another 
machine, Mac mini solo with 512MB RAM, the memory is about 100MB 
(RSIZE), 50MB (RPRVT) with Leopard.

I profiled the app with Instruments on the G5 and found that memory 
allocated by NSBitmapImageRep (using _NSImageMalloc) is not freed 
when the instance is released. This is not a leak - the system seems 
to keep a pool of 14 allocations (each around 7MB) and reuse this 
pool. I see this for each NSBitmapImageRep I create.

This happens when creating NSBitmapImageRep with 
initWithBitmapDataPlanes:NULL. I can work around this by allocating 
my own memory and creating the instance with my memory. After moving 
to manual memory allocation for the bitmaps, the memory size on the 
Mac mini went down to 36MB (RSIZE), but the same code on Tiger takes 
now only 14MB (RSIZE). The profile does not show any more "big" 
allocations I can fix, except the NSBitmapImageReps allocations.

One smaller but similar allocation happen each time a bitmap is 
processed with CoreImage. Each call to CIContext 
drawImage:atPoint:fromRect: allocate about 1MB which are not freed. 
There seems to be a similar pool of those 1MB chunks.

I found similar behavior with Apple Reducer example code <http://
developer.apple.com/samplecode/Reducer/>. It run with 50-60MB on 
Tiger, but reach about 150MB in Leopard after 20-30 operations on the 
same image. My app use similar code to process bitmaps.

The application is built on Tiger. Rebuilding on Leopard with Xcode 3 
did not change anything.

Anyone has a clue what is going on?


Best Regards,

Nir Soffer

Related mailsAuthorDate
No related mails found.