b62f2e6f3f8d66b3231ecec14ea9365733371b39 |
|
23-Mar-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add RosAlloc stats dump. For better understanding of the RosAlloc space. (cherrypick commit 565c2d9bce43c430d4267c82f5702160d971e712) Bug: 27744947 Bug: 9986565 Change-Id: I8309761a68fbc143bbcd8458a9194085aace7c3e
|
565c2d9bce43c430d4267c82f5702160d971e712 |
|
23-Mar-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add RosAlloc stats dump. For better understanding of the RosAlloc space. Bug: 27744947 Bug: 9986565 Change-Id: I02a8028b9728f6862e5e78588a368b8029bb5c1a
|
32ce2adefb8a3d0eda59a29f5e87c1eb43eef796 |
|
04-Mar-2016 |
Mathieu Chartier <mathieuc@google.com> |
Add more systracing everywhere Added to: JIT DexFile functions Oat file manager Added helper ScopedTrace to prevent errors and reduce excess code. Bug: 27502458 (cherry picked from commit dabdc0fe183d4684f3cf4d70cb09d318cff81b42) Change-Id: Ifaeff8913d79eefc797380987d13cc00456266f8
|
dabdc0fe183d4684f3cf4d70cb09d318cff81b42 |
|
04-Mar-2016 |
Mathieu Chartier <mathieuc@google.com> |
Add more systracing everywhere Added to: JIT DexFile functions Oat file manager Added helper ScopedTrace to prevent errors and reduce excess code. Bug: 27502458 Change-Id: Ifaeff8913d79eefc797380987d13cc00456266f8
|
a9d82fe8bc6960b565245b920e99107a824ca515 |
|
26-Jan-2016 |
Mathieu Chartier <mathieuc@google.com> |
Use mutator lock to guard adding and removing heap spaces Too hard to add a new lock since dlmalloc ArtMoreCore requires looping through the spaces while holding the allocator lock. Bug: 22858531 Change-Id: Ieac2136da02c766b6795cd604a58798bee37ef2a
|
4f55e22630d99ca0edd9e951e5ee96b57bb9b980 |
|
04-Sep-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add and use ScopedSuspendAll Usage replaces most SuspendAll and ResumeAll calls. Change-Id: I355683a5365876242cea85a656dcb58455f7a294
|
f1d666e1b48f8070ef1177fce156c08827f08eb8 |
|
04-Sep-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add ScopedThreadSuspension Fixes the TransitionFromRunnableToSuspended and TransitionFromSuspendedToRunnable pattern that was prone to errors. Change-Id: Ie6ae9c0357c83b4fc4899d05dfa0975553170267
|
1e13374baf7dfaf442ffbf9809c37c131d681eaf |
|
20-May-2015 |
Evgenii Stepanov <eugenis@google.com> |
Generalize Valgrind annotations in ART to support ASan. Also add redzones around non-fixed mem_map(s). Also extend -Wframe-larger-than limit to enable arm64 ASan build. Change-Id: Ie572481a25fead59fc8978d2c317a33ac418516c
|
41b175aba41c9365a1c53b8a1afbd17129c87c14 |
|
19-May-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Clean up arm64 kNumberOfXRegisters usage. Avoid undefined behavior for arm64 stemming from 1u << 32 in loops with upper bound kNumberOfXRegisters. Create iterators for enumerating bits in an integer either from high to low or from low to high and use them for <arch>Context::FillCalleeSaves() on all architectures. Refactor runtime/utils.{h,cc} by moving all bit-fiddling functions to runtime/base/bit_utils.{h,cc} (together with the new bit iterators) and all time-related functions to runtime/base/time_utils.{h,cc}. Improve test coverage and fix some corner cases for the bit-fiddling functions. Bug: 13925192 (cherry picked from commit 80afd02024d20e60b197d3adfbb43cc303cf29e0) Change-Id: I905257a21de90b5860ebe1e39563758f721eab82
|
80afd02024d20e60b197d3adfbb43cc303cf29e0 |
|
19-May-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Clean up arm64 kNumberOfXRegisters usage. Avoid undefined behavior for arm64 stemming from 1u << 32 in loops with upper bound kNumberOfXRegisters. Create iterators for enumerating bits in an integer either from high to low or from low to high and use them for <arch>Context::FillCalleeSaves() on all architectures. Refactor runtime/utils.{h,cc} by moving all bit-fiddling functions to runtime/base/bit_utils.{h,cc} (together with the new bit iterators) and all time-related functions to runtime/base/time_utils.{h,cc}. Improve test coverage and fix some corner cases for the bit-fiddling functions. Bug: 13925192 Change-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7
|
2cebb24bfc3247d3e9be138a3350106737455918 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Replace NULL with nullptr Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
|
bf9fc581e8870faddbd320a935f9a627da724c48 |
|
14-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add more info to who called SuspendAll Helps diagnose related jank. Change-Id: I38191cdda723c6f0355d0197c494a3dff2b6653c
|
4460a84be92b5a94ecfb5c650aef4945ab849c93 |
|
09-Mar-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Rosalloc thread local allocation path without a cas. Speedup on N4: MemAllocTest 3044 -> 2396 (~21% reduction) BinaryTrees 4101 -> 2929 (~26% reduction) Bug: 9986565 Change-Id: Ia1d1a37b9e001f903c3c056e8ec68fc8c623a78b
|
634d58a91ed636043feed600ca17c6c945a4fb20 |
|
20-Dec-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Pass the real capacity to CreateRosAlloc. (cherrypick commit 94c41dfcaf4bc131964ddd3013432841b07c3839) Bug: 18808732 Change-Id: Id65469c3deb70c9f750f89cf0e7606849b801a21
|
94c41dfcaf4bc131964ddd3013432841b07c3839 |
|
19-Dec-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Pass the real capacity to CreateRosAlloc. Bug: 18808732 Change-Id: Id563eb22e8d571c0ef032628b6ba2f3d357fd002
|
d7576328811e5103e99d31f834a857522cc1463f |
|
25-Oct-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix valgrind Allow ValgrindMallocSpace wrapper for RosAlloc.Requires refactoring, as ValgrindMallocSpace was bound to the signature of DlMallocSpace. Also turn of native stack dumping when running under Valgrind to work around b/18119146. Ritzperf before and after Mean 3190.725 3082.475 Standard Error 11.68407 10.37911 Mode 3069 2980 Median 3182.5 3051.5 Variance 16382.117 12927.125 Standard Deviation 127.99264 113.69751 Kurtosis 1.1065632 0.3657799 Skewness 0.9013805 0.9117792 Range 644 528 Minimum 2991 2928 Maximum 3635 3456 Count 120 120 Bug: 18119146 Change-Id: I25558ea7cb578406011dede9d3d0bdbfee4ff4d5
|
277ccbd200ea43590dfc06a93ae184a765327ad0 |
|
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: More warnings Enable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general, and -Wunused-but-set-parameter for GCC builds. Change-Id: I81bbdd762213444673c65d85edae594a523836e5
|
cf7f19135f0e273f7b0136315633c2abfc715343 |
|
23-Oct-2014 |
Ian Rogers <irogers@google.com> |
C++11 related clean-up of DISALLOW_.. Move DISALLOW_COPY_AND_ASSIGN to delete functions. By no having declarations with no definitions this prompts better warning messages so deal with these by correcting the code. Add a DISALLOW_ALLOCATION and use for ValueObject and mirror::Object. Make X86 assembly operand types ValueObjects to fix compilation errors. Tidy the use of iostream and ostream. Avoid making cutils a dependency via mutex-inl.h for tests that link against libart. Push tracing dependencies into appropriate files and mutex.cc. x86 32-bit host symbols size is increased for libarttest, avoid copying this in run-test 115 by using symlinks and remove this test's higher than normal ulimit. Fix the RunningOnValgrind test in RosAllocSpace to not use GetHeap as it returns NULL when the heap is under construction by Runtime. Change-Id: Ia246f7ac0c11f73072b30d70566a196e9b78472b
|
13735955f39b3b304c37d2b2840663c131262c18 |
|
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
stdint types all the way! Change-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08
|
68d8b42ddec39ec0174162d90d4abaa004d1983e |
|
17-Jul-2014 |
Ian Rogers <irogers@google.com> |
Wire up check JNI force copy mode. Increase check JNI checks. Break apart jni_internal.h in to jni_env_ext.h and java_vm_ext.h. Fix the abuse of ScopedObjectAccess/annotalysis by ScopedCheck in the case of VM routines. Make class loader override and shared library class loader JNI global references rather than mirror pointers. Clean-ups to native bridge. Change-Id: If7c6110b5aade7a402bfb67534af86a7b2cdeb55
|
f37a88b8e6db6c587fa449a12e40cb46be1689fc |
|
10-Jul-2014 |
Zuo Wang <zuo.wang@intel.com> |
ART: Compacting ROS/DlMalloc spaces with semispace copy GC Current semispace copy GC is mainly associated with bump pointer spaces. Though it squeezes fragmentation most aggressively, an extra copy is required to re-establish the data in the ROS/DlMalloc space to allow CMS GCs to happen afterwards. As semispace copy GC is still stop-the-world, this not only introduces unnecessary overheads but also longer response time. Response time indicates the time duration between the start of transition request and the start of transition animation, which may impact the user experience. Using semispace copy GC to compact the data in a ROS space to another ROS(or DlMalloc space to another DlMalloc) space solves this problem. Although it squeezes less fragmentation, CMS GCs can run immediately after the compaction. We apply this algorithm in two cases: 1) Right before throwing an OOM if -XX:EnableHSpaceCompactForOOM is passed in as true. 2) When app is switched to background if the -XX:BackgroundGC option has value HSpaceCompact. For case 1), OOMs are significantly delayed in the harmony GC stress test, with compaction ratio up to 0.87. For case 2), compaction ratio around 0.5 is observed in both built-in SMS and browser. Similar results have been obtained on other apps as well. Change-Id: Iad9eabc6d046659fda3535ae20f21bc31f89ded3 Signed-off-by: Wang, Zuo <zuo.wang@intel.com> Signed-off-by: Chang, Yang <yang.chang@intel.com> Signed-off-by: Lei Li <lei.l.li@intel.com> Signed-off-by: Lin Zang <lin.zang@intel.com>
|
be2a1df15a31a5223ee9af3015a00c31d2ad2e10 |
|
10-Jul-2014 |
Ian Rogers <irogers@google.com> |
Fix GC to use art::Atomic rather than compiler intrinsics. Changes to SpaceBitmap::AtomicTestAndSet and Space::end_. Space::end_ is made atomic rather than volatile to fully capture all its uses multi-threaded or not uses. Change-Id: I3058964b8ad90a8c253b3d7f75585f63ca2fb5e3
|
0651d41e41341fb2e9ef3ee41dc1f1bfc832dbbb |
|
29-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add thread unsafe allocation methods to spaces. Used by SS/GSS collectors since these run with mutators suspended and only allocate from a single thread. Added AllocThreadUnsafe to BumpPointerSpace and RosAllocSpace. Added AllocThreadUnsafe which uses current runs as thread local runs for a thread unsafe allocation. Added code to revoke current runs which are the same idx as thread local runs. Changed: The number of thread local runs in each thread is now the the number of thread local runs in RosAlloc instead of the number of size brackets. Total GC time / time on EvaluateAndApplyChanges. TLAB SS: Before: 36.7s / 7254 After: 16.1s / 4837 TLAB GSS: Before: 6.9s / 3973 After: 5.7s / 3778 Bug: 8981901 Change-Id: Id1d264ade3799f431bf7ebbdcca6146aefbeb632
|
73d1e17b3afc7d5e56184f90bf819dc64956448a |
|
12-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Enable reading page map without lock in RosAlloc::BulkFree Enabling this flag greatly reduces how much time was spent in the GC. It was not done previously since it was regressing MemAllocTest. With these RosAlloc changes, the benchmark score no longer regresses after we enable the flag. Changed Run::AllocSlot to only have one mode of allocation. The new mode is finding the first free bit in the bitmap. This was previously the slow path but is now the fast path. Some optimizations which enabled this include always having the alloc bitmap bits which correspond to invalid slots be set to 1. This prevents us from needing a bound check since we will never end up allocating there. Changed revoking thread local buffer to point to an invalid run. The invalid run is just a run which always has all the allocation bits set to 1. When a thread attempts to do a thread local allocation from here it will always fail and go slow path. This eliminates the need for a null check for revoked runs. Changed zeroing of memory to happen during free, AllocPages should always return zeroed memory. Added prefetching which happens when we allocate a run. Some refactoring to reduce duplicated code. Ergonomics changes: Changed kStickyGcThroughputAdjustment to 1.0, this helps reduce GC time. Measurements (3 samples per benchmark): Before: MemAllocTest scores: 3463, 3445, 3431 EvaluateAndApplyChanges score | total GC time Iter 1: 3485, 23.602436s Iter 2: 3434, 22.499882s Iter 3: 3483, 23.253274s After: MemAllocTest scores: 3495, 3417, 3409 EvaluateAndApplyChanges score | total GC time: Iter 1: 3375, 17.463462s Iter 2: 3358, 16.185188s Iter 3: 3367, 15.822312s Bug: 8788501 Bug: 11790317 Bug: 9986565 Change-Id: Ifd273a054824028dabed27c07c081dde1816f93c
|
8585bad7be19ee4901333f7d02d1d4d3f04877d4 |
|
12-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Return bytes freed from RosAlloc. There was a problem with how RosAlloc space sweeping worked caused by using the object size in the FreeList call, this won't work well with class unloading since the object's class may be freed before the object. Bug: 13989231 Change-Id: I3df439c312310720fd34249334dec85030166fe9
|
a8e8f9c0a8e259a807d7b99a148d14104c24209d |
|
09-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Refactor space bitmap to support different alignments. Required for: Using space bitmaps instead of std::set in mod union table + remembered set. Using a bitmap instead of set for large object marking. Bug: 13571028 Change-Id: Id024e9563d4ca4278f79607cdb2f81895121b113
|
31f441464c0c8f840aba37e236ad133f30308d70 |
|
08-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Clean-up heap spaces. We now use the CMS collector instead of the semispace collector when the phone is booting. We still perform compaction during the zygote space creation. This reduces time spent in GC by ~2s during boot and doesn't affect zygote space size. Changed the space creation logic to create the temp space when a background transition occurs. Added a flag to each space which is true if you are allowed to move objects that are within this space. Removed SwapSemiSpaces call from the semi space collector, it is now the job of the caller to do this with threads suspended. This simplifies the logic in the zygote compaction / heap transition code since these do not copy from one semispace to another. Added Space::Clear to RosAllocSpace and DlMallocSpace. This greatly simplifies the code used for collector transitions. Time spent in GC creating zygote space: Before: 3.4s, After: 1.28s No change in zygote space size. Bug: 13878055 Change-Id: I700348ab7d5bf3aa537c0cd70c0fed09aa4b0623
|
d9a88de76de4c81ad75340b824df64a68c739351 |
|
07-Apr-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Implement rosalloc page trimming without suspending threads. Also, making it more efficient by not going through the chunks smaller than the page size by not using InspectAll(). Change-Id: I79ceb0374cb8aba5f6b8dde1afbace9af98b6cff
|
1cd53dbb2163f18b689d2a65cf9c6bdcdb01b407 |
|
28-Mar-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Fix a DCHECK failure when causing GC from DDMS. Bug: 13647069 Change-Id: Iae2746b2b7b4493fcf5f0d40d2bf36a9b2d2efc8
|
c93c530efc175954160c3834c93961a1a946a35a |
|
21-Mar-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Revoke rosalloc thread-local buffers at the checkpoint. In the mark sweep collector, rosalloc thread-local buffers were revoked during the pause. Now, they are revoked at the thread checkpoint, as opposed to during the pause, which appears to help reduce the pause time. In Ritz MemAllocTest, the average sticky pause time went down ~20% (925 us -> 724 us). Bug: 13394464 Bug: 9986565 Change-Id: I104992a11b46d59264c0b9aa2db82b1ccf2826bc
|
36bf21665b43adc2485167cbb3a044dbdf4931ee |
|
20-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add Heap::RunningOnValgrind and call it from the spaces. Makes it easier to disable valgrind support. Change-Id: I1bde792f1b76a2dd968fa03c6142e92fcc3670b0
|
5ccd498d4aa450b0381344724b072a932709a59a |
|
11-Mar-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Put the post zygote non-moving space next to the malloc space. This change fixes the following problem with the GSS collector: if the post zygote non-moving space happens to be located after the bump pointer spaces, the bump pointer space is treated wrongfully as an immune space. The reasons are 1) the immune space is represented by a simple address range and 2) the GSS collector treats the post zygote non-moving space as an immune space at a bump pointer space only collection. In addition, this change makes it a reality that all the non-moving spaces are adjacent, which we tend to assume in the code (eg. the notion of the immune space represented by a simple address range.) This should help avoid potential confusions in the future. Fix a DCHECK failure where usable_size isn't set properly when -XX:UseTLAB is used. Change-Id: I585920e433744a390f87e9a25bef6114b2a4623f
|
661974a5561e5ccdfbac8cb5d8df8b7e6f3483b8 |
|
09-Jan-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix valgrind gtests and memory leaks. All tests pass other than image_test which passes if some bad reads are disabled (buzbee working on this). Change-Id: Ifd6b6e3aed0bc867703b6e818353a9f296609422
|
26d69ffc0ebc98fbc5f316d8cd3ee6ba5b2001ac |
|
27-Feb-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Decrease lock uses in RosAlloc::BulkFree(). Read rosalloc page map entries without a lock. Disabled for now. This change speeds up Ritz MemAllocTest by ~25% on host and reduces the GC sweep time, but somehow slows it down by ~5% on N4, which is why it's disabled for now. TODO: look into the slowdown on N4 more. Bug: 8262791 Bug: 11790317 Change-Id: I936bbee9cfbd389e70d6343503bf0923865d2a2c
|
15d3402bbf8265eb1165694da2e4117eb128f3bc |
|
27-Feb-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add custom SIGSEGV handler to help find heap corruption. The new signal handler prints heap diagnostics when you get a SIGSEGV. Added a fault message member in runtime which is modifiable by Runtime::SetFaultMessage. When you get a SIGSEGV it will print out whatever is stored in this string as well as the normal information. This is useful for debugging heap corruption since it lets you see which threads were in which methods when the last GC occured. Added some smarter object dumping logic when the faulting address is in the heap. Bug: 12934910 Change-Id: Ia72be2c39f70ad711cbd746d66fad2b617d5d29f
|
a55cf41c9d1da7ee8b2f63974dedfb484042dd03 |
|
27-Feb-2014 |
Ian Rogers <irogers@google.com> |
Ensure usable space data is zeroed in arrays. Address other outstanding review comments. Change-Id: Iaffe04de080772a0d0c5fd973bcac0e23c8c3e25
|
6fac447555dc94a935b78198479cce645c837b89 |
|
26-Feb-2014 |
Ian Rogers <irogers@google.com> |
Make allocations report usable size. Work-in-progress to allow arrays to fill usable size. Bug: 13028925. Use C++11's override keyword on GCC >= 2.7 to ensure that we override GC and allocator methods. Move initial mirror::Class set up into a Functor so that all allocated objects have non-zero sizes. Use this property to assert that all objects are never larger than their usable size. Other bits of GC related clean-up, missing initialization, missing use of const, hot methods in .cc files, "unimplemented" functions that fail at runtime in header files, reducing header file includes, move valgrind's space into its own files, reduce number of array allocation routines. Change-Id: Id5760041a2d7f94dcaf17ec760f6095ec75dadaa
|
385de73a252806b212028c4aaccb86c296f2facc |
|
21-Feb-2014 |
lzang1 <lin.zang@intel.com> |
Fix the memory protection issue in RosAllocSpace::CreateFromMemMap() From the implementation of RosAllocSpace::CreateFromMemMap(), the memory beyond the starting_size should be protected. But the argument of mprotect is wrongly set to be "capacity - initial_size", logically it should be "capacity - starting_size" This patch also fix the same issue in dlmalloc Change-Id: Icbd4ba790f344d4fa79d9896657f638a03d6f8aa Author: Lin Zang <lin.zang@intel.com> Signed-off-by: Jack Ren <jack.ren@intel.com> Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
|
ef7d42fca18c16fbaf103822ad16f23246e2905d |
|
06-Jan-2014 |
Ian Rogers <irogers@google.com> |
Object model changes to support 64bit. Modify mirror objects so that references between them use an ObjectReference value type rather than an Object* so that functionality to compress larger references can be captured in the ObjectRefererence implementation. ObjectReferences are 32bit and all other aspects of object layout remain as they are currently. Expand fields in objects holding pointers so they can hold 64bit pointers. Its expected the size of these will come down by improving where we hold compiler meta-data. Stub out x86_64 architecture specific runtime implementation. Modify OutputStream so that reads and writes are of unsigned quantities. Make the use of portable or quick code more explicit. Templatize AtomicInteger to support more than just int32_t as a type. Add missing, and fix issues relating to, missing annotalysis information on the mutator lock. Refactor and share implementations for array copy between System and uses elsewhere in the runtime. Fix numerous 64bit build issues. Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
|
a1602f28c0e3127ad511712d4b08db89737ae901 |
|
14-Jan-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add zygote space as its own space type. Helps prevent errors caused from doing invalid operations on the old alloc space. Removed some duplicated code in mark_sweep.cc and semi_space.cc. Change-Id: I67a772cab30d698744c918aad581053f282a4a99
|
e6da9af8dfe0a3e3fbc2be700554f6478380e7b9 |
|
16-Dec-2013 |
Mathieu Chartier <mathieuc@google.com> |
Background compaction support. 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
|
e48780b8278240dec2d3164512f7d3317a5495c1 |
|
18-Dec-2013 |
Hiroshi Yamauchi <yamauchi@google.com> |
Remove some unnecessary code from dlmalloc_space/rosalloc_space. Removed GetTotalBytesAllocated(), GetTotalObjectsAllocated(), and InternalAllocationSize(). No performance improvement observed. Change-Id: Ie20433a0fd328fc7f61d4afd54d18fbdc4aa4a17
|
573f7d2d68e1838a0485e6b40d90c967526e00c2 |
|
17-Dec-2013 |
Hiroshi Yamauchi <yamauchi@google.com> |
Fix an array copy benchmark regression. Add different page release modes to rosalloc. Bug: 12064551 Change-Id: Ib837bbd1a2757741a4e2743e0a1272bf46a30252
|
7cb7bbcfffb2716ef8d68ecb747954ec42c4bdc5 |
|
19-Nov-2013 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add Valgrind rosalloc support. Bug: 9986565 Change-Id: Ibd2ba5e8b4fb7f2ed6c133a4b556a6dbb15a2f5e
|
4ce1f00cc74867188347e463f4a5ecb9fe55cde5 |
|
18-Nov-2013 |
Hiroshi Yamauchi <yamauchi@google.com> |
Fix a per-process dumpsys meminfo crash. In the InvalidateAllocator() function, DlMallocSpace and RosAllocSpace both null out the underlying allocator pointer at the zygote fork time so that new allocations won't accidentally happen in the zygote space after a zygote fork. However, nulling out the only allocator pointer would cause crashes in non-allocation uses such as GetFootprint() in this particular crash. Fix this by creating a second pointer just for the allocation purpose that gets nulled upon a InvalidateAllocator() call while the original pointer keeps pointing to the allocator. Change-Id: Ie751d9380db39baace9e25712a3824eec9a9969a
|
cf58d4adf461eb9b8e84baa8019054c88cd8acc6 |
|
26-Sep-2013 |
Hiroshi Yamauchi <yamauchi@google.com> |
A custom 'runs-of-slots' memory allocator. Bug: 9986565 Change-Id: I0eb73b9458752113f519483616536d219d5f798b
|