Thursday, March 13th, 2008p>Stuart Parmenter has been blogging about his work on memory usage and various malloc() libraries and their tradeoffs.
In his latest, he talks about the memory usage in Firefox 3 today and the work that he has done:
- Reduced Memory fragmentation: One of the things we did to help was to minimize the number of total allocations we did, to avoid unnecessarily churning memory. Weâ€™ve managed to reduce allocations in almost all areas of our code base.
- Fixed cycles with the Cycle collector: For Gecko 1.9, weâ€™ve implemented an automated cycle collector that can recognize cycles in the in-memory object graph and break them automatically.
- Tuned our caches: In many cases weâ€™ve added expiration policies to our caches which give performance benefits in the most important cases, but donâ€™t eat up memory forever. We now expire cached documents in the back/forward cache after 30 minutes since you likely wonâ€™t be going back to them anytime soon. We have timer based font caches as well as caches of computed text metrics that are very short lived.
- Adjusted how we store image data: In Firefox 3, thanks to some work by Federico Mena-Quintero (of GNOME fame), we now throw away the uncompressed data after it hasnâ€™t been used for a short while. Another fantastic change from Alfred Kayser changed the way we store animated GIFs so that they take up a lot less memory. We now store the animated frames as 8bit data along with a palette rather than storing them as 32 bits per pixel.
What about the tests?
For the results below we loaded 29 different web pages through 30 windows over 11 cycles (319 total page loads), always opening a new window for each page load (closing the oldest window alive once we hit 30 windows). At the end we close all the windows but one and let the browser sit for a few minutes so see if they will reclaim memory, clear short-term caches, etc. There is a 3 second delay between page loads to try and get all the browsers to take the same amount of time.
Great work guys, and thanks for talking to us about how you are doing this work!