In previous performance tuning work, I noticed that JarFile consumes a lot of memory, particularly due to the use of JarFile.getManifest(). This caches the manifest, perhaps the entire manifest, which is unnecessary for OSGi since we only use the main attributes. At the time I wasn't trying to address memory consumption, but speed and this didn't appear to improve it. However, now I have received reports of memory consumption issues in the field from people trying to use the Felix framework on embedded devices.
After having sent a patch framework with custom manifest parsing, I have reports of considerable decreases in memory consumption. I think it makes sense to make this change. To avoid indirectly reading the manifest, we will need to avoid using JarFile altogether, since it will implicitly read the manifest and cache it during some operations.