• Mathieu Chartier's avatar
    Background compaction support. · e6da9af8
    Mathieu Chartier authored
    When the process state changes to a state which does not perceives
    jank, we copy from the main free-list backed allocation space to
    the bump pointer space and enable the semispace allocator.
    
    When we transition back to foreground, we copy back to a free-list
    backed space.
    
    Create a seperate non-moving space which only holds non-movable
    objects. This enables us to quickly wipe the current alloc space
    (DlMalloc / RosAlloc) when we transition to background.
    
    Added multiple alloc space support to the sticky mark sweep GC.
    
    Added a -XX:BackgroundGC option which lets you specify
    which GC to use for background apps. Passing in
    -XX:BackgroundGC=SS makes the heap compact the heap for apps which
    do not perceive jank.
    
    Results:
    Simple background foreground test:
    0. Reboot phone, unlock.
    1. Open browser, click on home.
    2. Open calculator, click on home.
    3. Open calendar, click on home.
    4. Open camera, click on home.
    5. Open clock, click on home.
    6. adb shell dumpsys meminfo
    
    PSS Normal ART:
    Sample 1:
        88468 kB: Dalvik
         3188 kB: Dalvik Other
    Sample 2:
        81125 kB: Dalvik
         3080 kB: Dalvik Other
    
    PSS Dalvik:
    Total PSS by category:
    Sample 1:
        81033 kB: Dalvik
        27787 kB: Dalvik Other
    Sample 2:
        81901 kB: Dalvik
        28869 kB: Dalvik Other
    
    PSS ART + Background Compaction:
    Sample 1:
        71014 kB: Dalvik
         1412 kB: Dalvik Other
    Sample 2:
        73859 kB: Dalvik
         1400 kB: Dalvik Other
    
    Dalvik other reduction can be explained by less deep allocation
    stacks / less live bitmaps / less dirty cards.
    
    TODO improvements: Recycle mem-maps which are unused in the current
    state. Not hardcode 64 MB capacity of non movable space (avoid
    returning linear alloc nightmares). Figure out ways to deal with low
    virtual address memory problems.
    
    Bug: 8981901
    
    Change-Id: Ib235d03f45548ffc08a06b8ae57bf5bada49d6f3
    e6da9af8
heap-inl.h 10.5 KB