Validated memory-saving kernel configurations: Kernel Same-page Merging (KSM), and Swap to ZRAM.
Kill cached processes if about to be uncached and too large.
Don’t allow large services to put themselves back into A Services (so they can’t cause the launcher to be killed).
Kill processes (even ordinarily unkillable ones such as the current IME) that get too large in idle maintenance.
Serialize the launch of background services.
Tuned memory use of low-RAM devices: tighter out-of-memory (OOM) adjustment levels, smaller graphics caches, etc.
Trimmed system_server and SystemUI processes (saved several MBs).
Preload dex caches in Dalvik (saved several MBs).
Validated JIT-off option (saves up to 1.5MB per process).
Reduced per-process font cache overhead.
Introduced ArrayMap/ArraySet and used extensively in framework as a lighter-footprint replacement for HashMap/HashSet.
We are introducing a new API called ActivityManager.isLowRamDevice() for applications to determine if they should turn off specific memory-intensive features that work poorly on low-memory devices.
For 512MB devices, this API is expected to return: "true" It can be enabled by the following system property in the device makefile.
PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true