summaryrefslogtreecommitdiff
path: root/runtime/intern_table.h
Commit message (Collapse)AuthorAgeFilesLines
* Avoid an unnecessary ComputeModifiedUtf8Hash().Vladimir Marko2021-02-081-5/+10
| | | | | | | | | | | | | The DescriptorHashPair already has the hash as the member `second`, so avoid recalculating it in release mode. Also split "HashEquals" classes into separate "Hash" and "Equals" classes to disambiguate their operators in traces. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 175869411 Change-Id: I87cbe613778c7d310ba5c2bf437729244780472c
* Rewrite intern table construction in ImageWriter.Vladimir Marko2021-01-281-9/+1
| | | | | | | | | | | | | | | | | | | | | | Make sure that intern tables in images are at maximum load factor (full) and make that maximum load factor independent of runtime parameters. As we pre-allocate an intern table buffer of the right size in ImageWriter, we also avoid unnecessary resizing of the temporary intern table. Instead of using InternTable::LookupStrong() for intern lookup, access the internal non-boot image intern table directly. This avoids unnecessary lookups in boot image intern tables and the intern table lock is locked only once instead of locking for each StringId in input dex files. Remove obsolete comment related to patchoat relocations. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: boots. Bug: 175869411 Change-Id: Ie74e1ac1b1b1d25add74edd38b7e1d70b6654ee3
* Deduplicate interned image strings.Vladimir Marko2020-03-311-3/+0
| | | | | | | | | | | | | | | Also fix a bug in relocation; even for -Xnorelocate we need to relocate second and later extension if it's not compiled against all previous boot image components. Also clean up InternTable includes. Test: New tests in image_space_test. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: aosp_taimen-userdebug boots. Bug: 152037801 Change-Id: Ie6ae70721f4ffb48950bd248ffa123dee460bcd7
* GC-independent image layout.Vladimir Marko2019-06-271-0/+4
| | | | | | | | | | | | | | | | Make sure we visit objects in a defined order, independent of their order in the heap. The new order depends only on dex file contents and contents of initialized classes, thus any non-determinism would have to be contributed by the class initialization itself rather than GC. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: aosp_taimen-userdebug boots. Test: run-gtests.sh Test: testrunner.py --target --optimizing Bug: 26687569 Change-Id: I62521322289a22eb13faae526ba2c3589e6ab381
* Do not force-intern Strings in images.Vladimir Marko2019-06-121-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Interning all image Strings breaks the reference equality semantics. See android.net.Uri.NOT_CACHED for an example where it goes against the intent of the Java code. Instead, only put interned strings (weakly and strongly) to the image intern tables. Since image interns are referenced as long as the image is memory, we can promote weak interns to strong interns. Doing this before the image layout helps ImageWriter::CalculateNewObjectOffsets() which would not have previously found weak interns. Added a regression test that relies on better initialization of app image classes, so it shall be "active" only after an improvement in that area. (This can be checked by commenting out the NoClinitInDependency() check in CompilerDriver's InitializeClassVisitor::TryInitializeClass().) Bug: 134746125 Test: 176-app-image-string Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: aosp_taimen-userdebug boots. Test: run-gtests.sh Test: testrunner.py --target --optimizing Change-Id: I51fa1edf953c9060c41f39812f3ba27f12b02801
* Smarter set intersection between app image and non boot image stringsMathieu Chartier2018-11-021-0/+4
| | | | | | | | | | | If there are fewer non boot image strings in the runtime, iterate over those strings instead of the set being newly added. On AOSP, nonBootImageInternStrings is around 500. Test: test-art-host Bug: 116059983 Change-Id: I76b49f2090971cf593ba487889b35dfc1fa8cf13
* Track what intern tables are from boot imagesMathieu Chartier2018-11-011-4/+38
| | | | | | | | | | Goal: Use this to make it faster to do collision checks between app image intern tables against the non boot image intern tables. Bug: 116059983 Test: test-art-host Change-Id: I7a2305167335da5b6685822894f7985970e99053
* Hold intern table lock for AddImageStringsToTableMathieu Chartier2018-10-311-4/+4
| | | | | | | | | | | | | Fixes a correctness issue where another thread adding an intern string after the visitor could cause duplicate strings. Reduces how often the intern table lock is acquired, probably improving performance. Bug: 116059983 Test: test-art-host Change-Id: I5ba6ca3ba7535de6d4ad5cb46750bd23a6e9aadc
* Add extra handling for loading intern tablesMathieu Chartier2018-10-151-60/+68
| | | | | | | | | | | | | | | Add an extra pass to fix up the app image intern table using a visitor. This visitor records if there are any image conflicts and avoids the image fixup phase if there are none. Added logic to bulk add the image intern table to the boot image. Will add optimizations later. Bug: 116059983 Test: test-art-host Change-Id: I50a6fdaf9c9a049a3d120e88d63fe7da8c9a298c
* Revert^2 "Load boot image at a random address."Vladimir Marko2018-09-281-3/+6
| | | | | | | | | | | | | | | This reverts commit f3d077373536c54824e4449759dff2f18369eab3. Fixed Heap constructor to reserve extra space for GSS. Change-Id: I6a65be35f4aa183304db5491da4a4810d8e3b266 Test: m test-art-host-gtest Test: testrunner.py --host --optimizing --relocate --no-relocate Test: Pixel 2 XL boots. Test: m test-art-target-gtest Test: testrunner.py --target --optimizing --relocate --no-relocate Test: art/test/testrunner/run_build_test_target.py -j48 art-gtest-gss-gc-tlab Bug: 77856493
* Revert "Load boot image at a random address."Vladimir Marko2018-09-271-6/+3
| | | | | | | | | This reverts commit 5ad79d85d77a42456728897ac3e2e7d4530e618e. Reason for revert: Breaks GSS garbage collection config. Bug: 77856493 Change-Id: Ifa39966ac2470154f8ba093de4804689d545219b
* Load boot image at a random address.Vladimir Marko2018-09-261-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | And perform in-place fixup of references and pointers. This dirties all the boot image memory loaded by zygote, so there shall be no "shared clean" boot image pages anymore, these shall change to "shared dirty". However, as we're using a profile-based boot image, these pages are presumably used often enough and unlikely to be paged out anyway. The in-place fixup takes around 60-120ms when starting the zygote on aosp_taimen-userdebug. However, an experiment with MAP_POPULATE pushes the raw fixup down to around 12-15ms. If we used compressed images, this would be the actual time for fixup as the data would be already present in memory. If we keep using uncompressed images, we shall need to tune the loading with MAP_POPULATE or MADV_WILLNEED. The -Xrelocate/-Xno-relocate option is re-interpreted from "use patchoat if needed" to "relocate the boot image in memory if possible". We do not allow relocation for the AOT compilation to speed up dex2oat execution and help producing deterministic output. The patchoat tool shall be removed in a follow-up CL. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing --relocate --no-relocate Test: Pixel 2 XL boots. Test: m test-art-target-gtest Test: testrunner.py --target --optimizing --relocate --no-relocate Bug: 77856493 Change-Id: I2db1fabefb5d4b85c798cd51e04c78cb232bff4a
* Move .art.rel data to a section in .art, part 1.Vladimir Marko2018-07-191-1/+3
| | | | | | | | | | | | | | Refactor the code so that we can collect all relocation offsets while writing the image. Test: Manually verify that the aosp_taimen-userdebug boot image is identical before and after this change; using WIP follow-up code, check that we record the same locations as the patchoat-generated .rel files. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 77856493 Change-Id: Id8c78e417e77e859a82a680504253f41e84560d6
* Merge "Retrieve String/Class references from .data.bimg.rel.ro."Vladimir Marko2018-03-091-2/+0
|\
| * Retrieve String/Class references from .data.bimg.rel.ro.Vladimir Marko2018-03-081-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | For PIC AOT-compiled app, use the .data.bimg.rel.ro to load the boot image String/Class references instead of using the mmapped boot image ClassTable and InternTable. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing --pictest --npictest Test: Pixel 2 XL boots. Test: testrunner.py --target --optimizing --pictest --npictest Bug: 71526895 Change-Id: Id5703229777aecb589a933a41f92e44d3ec02a3d
* | Move most of runtime/base to libartbase/baseDavid Sehr2018-03-051-1/+1
|/ | | | | | | | | | | | | | Enforce the layering that code in runtime/base should not depend on runtime by separating it into libartbase. Some of the code in runtime/base depends on the Runtime class, so it cannot be moved yet. Also, some of the tests depend on CommonRuntimeTest, which itself needs to be factored (in a subsequent CL). Bug: 22322814 Test: make -j 50 checkbuild make -j 50 test-art-host Change-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2
* Refactor linker files from compiler/ to dex2oat/.Vladimir Marko2017-09-201-2/+6
| | | | | | | | | | | | | | | | | | | | | | | This shifts some code from the libart-compiler.so to dex2oat and reduces memory needed for JIT. We also avoid loading the libart-dexlayout.so for JIT but the memory savings are minimal (one shared clean page, two shared dirty pages and some per-app kernel mmap data) as the code has never been needed in memory by JIT. aosp_angler-userdebug file sizes (stripped): lib64/libart-compiler.so: 2989112 -> 2671888 (-310KiB) lib/libart-compiler.so: 2160816 -> 1939276 (-216KiB) bin/dex2oat: 141868 -> 368808 (+222KiB) LOAD/executable elf mapping sizes: lib64/libart-compiler.so: 2866308 -> 2555500 (-304KiB) lib/libart-compiler.so: 2050960 -> 1834836 (-211KiB) bin/dex2oat: 129316 -> 345916 (+212KiB) Test: m test-art-host-gtest Test: testrunner.py --host Test: cd art/; mma; cd - Change-Id: If62f02847a6cbb208eaf7e1f3e91af4663fa4a5f
* Use mmapped boot image intern table for PIC app HLoadString.Vladimir Marko2017-09-071-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement new HLoadString load kind for boot image strings referenced by PIC-compiled apps (i.e. prebuilts) that uses PC-relative load from a boot image InternTable mmapped into the apps .bss. This reduces the size of the PIC prebuilts that reference boot image strings compared to the kBssEntry as we can completely avoid the slow path and stack map. We separate the InternedStrings and ClassTable sections of the boot image (.art) file from the rest, aligning the start of the InternedStrings section to a page boundary. This may actually increase the size of the boot image file by a page but it also allows mprotecting() these tables as read-only. The ClassTable section is included in anticipation of a similar load kind for HLoadClass. Prebuilt services.odex for aosp_angler-userdebug (arm64): - before: 20862776 - after: 20308512 (-541KiB) Note that 92KiB savings could have been achieved by simply avoiding the read barrier, similar to the HLoadClass flag IsInBootImage(). Such flag is now unnecessary. Test: m test-art-host-gtest Test: testrunner.py --host Test: testrunner.py --host --pictest Test: testrunner.py --target on Nexus 6P. Test: testrunner.py --target --pictest on Nexus 6P. Test: Nexus 6P boots. Bug: 31951624 Change-Id: I5f2bf1fc0bb36a8483244317cfdfa69e192ef6c5
* ART: Include cleanupAndreas Gampe2017-07-241-1/+1
| | | | | | | | | | | | | | | | | | | Let clang-format reorder the header includes. Derived with: * .clang-format: BasedOnStyle: Google IncludeIsMainRegex: '(_test|-inl)?$' * Steps: find . -name '*.cc' -o -name '*.h' | xargs sed -i.bak -e 's/^#include/ #include/' ; git commit -a -m 'ART: Include cleanup' git-clang-format -style=file HEAD^ manual inspection git commit -a --amend Test: mmma art Change-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02
* ART: More header cleanupsAndreas Gampe2017-06-051-1/+2
| | | | | | | Pull out more dependencies through forward declarations. Test: m test-art-host Change-Id: I7d86726928937f788b956ec9eac91532d66d57ae
* Fix incorrect string hash value extension during cross-compilation.Alexey Grebenkin2016-12-201-1/+8
| | | | | | | | | | | | Previouly, having a 32-bit Android device and a 64-bit host to compile boot.oat could lead to an interning table be fulfilled using one hash function and be worked with using another hash function (which is caused by sign extension). Target case is any string with a negative .GetHashCode(). Test: test-art-host-gtest-intern_table_test Change-Id: I3f417e1ac990ef681f0651160292130e9b3632f0
* Merge "Make empty checkpoint work while weak ref access is disabled."Hiroshi Yamauchi2016-11-111-1/+1
|\
| * Make empty checkpoint work while weak ref access is disabled.Hiroshi Yamauchi2016-11-091-1/+1
| | | | | | | | | | | | | | | | | | | | Fix a potential race on PushOntoMarkStack for CC by running an empty checkpoint (while weak ref access is disabled). Bug: 32508093 Bug: 12687968 Test: test-art-host with CC/CMS, libartd boot with N9, Ritz EAAC. Change-Id: I3749bb525e7734804307ee16262355f3fc730312
* | Move intern table to ObjPtrMathieu Chartier2016-10-311-24/+25
|/ | | | | | | | | | | | | Also moved StringLog to use a GcRoot. Also removed read barriers from lookup to prevent making weak strings strongly live more often than necessary. Bug: 31113334 Test: clean-oat-host && test-art-host CC baker Change-Id: I05586e125d5dfed8d184890468fd398c79f32619
* Do not write empty class table and intern table to image.Vladimir Marko2016-10-141-3/+0
| | | | | | | | And remove dead ClassLinker and InternTable code that would be erroneously triggered by not writing the tables. Test: m test-art-host Change-Id: I2520daa8d1231e16112d44e364a72d782fa32527
* ART: SHARED_REQUIRES to REQUIRES_SHAREDAndreas Gampe2016-08-301-39/+39
| | | | | | | | | This coincides with the actual attribute name and upstream usage. Preparation for deferring to libbase. Test: m Test: m test-art-host Change-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518
* Optimizing: Improve const-string code generation.Vladimir Marko2016-03-291-0/+26
| | | | | | | | | | | | | | | | | | | | | | | For strings in the boot image, use either direct pointers or pc-relative addresses. For other strings, use PC-relative access to the dex cache arrays for AOT and direct address of the string's dex cache slot for JIT. For aosp_flounder-userdebug: - 32-bit boot.oat: -692KiB (-0.9%) - 64-bit boot.oat: -948KiB (-1.1%) - 32-bit dalvik cache total: -900KiB (-0.9%) - 64-bit dalvik cache total: -3672KiB (-1.5%) (contains more files than the 32-bit dalvik cache) For aosp_flounder-userdebug forced to compile PIC: - 32-bit boot.oat: -380KiB (-0.5%) - 64-bit boot.oat: -928KiB (-1.0%) - 32-bit dalvik cache total: -468KiB (-0.4%) - 64-bit dalvik cache total: -1928KiB (-0.8%) (contains more files than the 32-bit dalvik cache) Bug: 26884697 Change-Id: Iec7266ce67e6fedc107be78fab2e742a8dab2696
* Revert "Revert "Load app images""Mathieu Chartier2016-01-251-2/+14
| | | | | | | | This reverts commit 1bc977cf2f8199311a97f2ba9431a184540e3e9c. Bug: 22858531 Change-Id: Ide00bf3a73a02cba3bb364177204ad1b13f70295
* Revert "Load app images"Nicolas Geoffray2016-01-231-14/+2
| | | | | | | | | | Fails when a method is duplicated (see test 097-duplicate-method) Bug: 22858531 This reverts commit f7fd970244f143b1abb956e29794c446e4d57f46. Change-Id: Ib30ae5be00cc568e799290be6b3c8f29cbbe4c20
* Load app imagesMathieu Chartier2016-01-221-2/+14
| | | | | | | | | | | | | | | | | | | Support in-place patching of the app image based on boot image location and app oat location. Only loads for art run test so far since we do not automatically generate app images for app installs. N5 maps launch time (~200 runs): Before: 930ms After: 878.18ms After + image class table: 864.57ms TODO: Oatdump support. Store class loaders as class roots in image. Bug: 22858531 Change-Id: I9cbc645645e62ea2ed1ad8e139e91af7d88514c1
* Fix various typos in ART's comments and string literals.Roland Levillain2016-01-191-1/+1
| | | | Change-Id: I85d628055b1a61647a77fef730c9631c234e22a2
* Address some intern table commentsMathieu Chartier2016-01-061-6/+5
| | | | Change-Id: I7ffaa463272015c2924ba03e006041daee498ad4
* Re-enable adding intern table to imageMathieu Chartier2016-01-061-23/+21
| | | | | | | | | | Changed intern table to have a stack of tables similarily to ClassTable. Adding an image intern table adds to the front of the intern table stack. Also some cleanup. Bug: 26317072 Change-Id: I7bbf9485b5dbbbf3707fed21e29de3beccfb8705
* Change hash table load factorsMathieu Chartier2015-10-161-0/+1
| | | | | | | | | | | | | | | Changed class table and intern table load factors to query the runtime. The runtime returns load factors based on whether or not we are a low ram device. DescriptorEquals time for class linking goes from 10% -> 1.2% for compiling GmsCore with interpret only. Added test. Bug: 24917584 Change-Id: Iaaf5d2eab1b0c2d188d299e4bc1852cdb3801173
* Some fixes for the CC collector.Hiroshi Yamauchi2015-09-031-4/+0
| | | | | | | | | | | | | | | - Remove a DCHECK in DisableMarkingCheckpoint, which caused occasional (false) failures. - Check the thread-local GetWeakRefAccessEnabled in boxed lambdas weak access. - Add missing BroadcastForNewAllocationRecords and BroadcastForNewWeakBoxedLambdas. The lack of the former caused occasional deadlocks in the ddmc test. - Remove the 'ensure system weaks disallowed' calls, which weren't useful and dead. Bug: 12687968 Change-Id: I33850c8d12e6e1a3aed1c2bb18eba263cbab76e8
* Address some comments and clean upMathieu Chartier2015-08-041-3/+7
| | | | Change-Id: I538cf204f1c89d5fc81f8fc5e5800fcf1cf87359
* Add some more uninterruptible annotationsMathieu Chartier2015-07-231-43/+34
| | | | | | | Added to mirror sites, class linker, and intern table. Bug: 20072211 Change-Id: I2224bcefefaab05d325f14844b1514e3d719e649
* Move to newer clang annotationsMathieu Chartier2015-07-221-74/+70
| | | | | | | | | | | | | | | Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
* Change intern table to not use WaitHoldingLocksMathieu Chartier2015-07-171-7/+27
| | | | | Bug: 22423014 Change-Id: I9e16b8cb4def72fff73f1783a182877105feb7aa
* Clean up GC callbacks to be virtual methodsMathieu Chartier2015-07-141-3/+3
| | | | Change-Id: Ia08034a4e5931c4fcb329c3bd3c4b1f301135735
* Thread-local mark stacks for the CC collector.Hiroshi Yamauchi2015-07-131-0/+1
| | | | | | | | | | | | | | | | | | | | | | | Thread-local mark stacks are assigned to mutators where they push references in read barriers to reduce the (CAS) synchronization cost in a global mark stack/queue. We step through three mark stack modes (thread-local, shared, GC-exclusive) and use per-thread flags to disable/enable system weak accesses (only for the CC collector) instead of the existing global one to safely perform the marking phase. The reasons are 1) thread-local mark stacks for mutators need to be revoked using a checkpoint to avoid races (incorrectly leaving a reference on mark stacks) when terminating marking, and 2) we can’t use a checkpoint while system weak accesses are disabled (or a deadlock would happen). More details are described in the code comments. Performance improvements in Ritzperf EAAC: a ~2.8% improvement (13290->12918) in run time and a ~23% improvement (51.6s->39.8s) in the total GC time on N5. Bug: 12687968 Change-Id: I5d234d7e48bf115cd773d38bdb62ad24ce9116c7
* Move image intern table into imageMathieu Chartier2015-06-111-0/+28
| | | | | | | | | | | | | | | Previously we recreated this intern table during runtime startup. This added 50-100ms of boot time. Fixed bug where we didn't copy over hashcodes into the image. Deleted some stale code. (cherry picked from commit fac3a390a247fe33d4873773d742aad4cc100118) Bug: 20727525 Bug: 19569780 Change-Id: I08959e9aa2a73cedb52f393033e2ffea3a26e76b
* Replace NULL with nullptrMathieu Chartier2015-04-221-1/+1
| | | | | | | Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
* Refactor and improve GC root handlingMathieu Chartier2015-04-061-2/+2
| | | | | | | | | | | | | | | | | | | | | | Changed GcRoot to use compressed references. Changed root visiting to use virtual functions instead of function pointers. Changed root visting interface to be an array of roots instead of a single root at a time. Added buffered root marking helper to avoid dispatch overhead. Root marking seems a bit faster on EvaluateAndApplyChanges due to batch marking. Pause times unaffected. Mips64 is untested but might work, maybe. Before: MarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us After: MarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us Bug: 19264997 Change-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca
* More of the concurrent copying collector.Hiroshi Yamauchi2015-01-231-1/+2
| | | | | Bug: 12687968 Change-Id: I62f70274d47df6d6cab714df95c518b750ce3105
* Add hash setMathieu Chartier2014-11-061-7/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | More memory efficient than libcxx since we do not box the values. Change intern table to use new hash set. Clean up intern table by removing const casts and deleting unnecessary code. Changed the class linker to use a hash set, also added a pre-zygote class table. 5 samples of: adb shell stop && adb shell start && sleep 60 && adb shell dumpsys meminfo Before: 165929 kB: Native 175859 kB: Native 168434 kB: Native 166559 kB: Native 169958 kB: Native After: 160972 kB: Native 159439 kB: Native 157204 kB: Native 165093 kB: Native 163039 kB: Native TODO: Add HashTable which is implemented by using a HashSet. TODO: Use for DexFile::find_class_def_misses_. TODO: Investigate using mem maps instead of native heap. Bug: 17808975 Change-Id: I93e376cf6eb9628cf52f4aefdadb6157acfb799a (cherry picked from commit e05d1d5fd86867afc7513b1c546375dba11eee50)
* Add image strings to intern tableMathieu Chartier2014-11-031-12/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we create the runtime, we now add the image strings to the intern table if we are the zygote. This caused some memory bloat, so I added an extra unordered set to the intern table. There is now two unordered sets (hash talbe). One for pre-zygote interns and one for post-zygote interns. This helps since the pre-zygote hash table doesn't get dirtied. Even with adding the image strings, we get total memory savings of around 5-7 MB native PSS after device boot. FB launch Before: 2.20% art::DexFile::FindStringId(char const*) const TotalTime: 2069 TotalTime: 1985 TotalTime: 2088 TotalTime: 2003 TotalTime: 2034 TotalTime: 2049 After boot native PSS: 175585 kB: Native After: 0.27% art::DexFile::FindStringId(char const*) const TotalTime: 1682 TotalTime: 1756 TotalTime: 1825 TotalTime: 1751 TotalTime: 1666 TotalTime: 1813 After boot native PSS: 167089 kB: Native Bug: 18054905 Bug: 16828525 Bug: 17808975 (cherry picked from commit b6e292bf7eac9d73c6b79b1e9b7b87beb02436c9) Change-Id: Ie367f3222f8c4db409ec49c3845276908b51e9c9
* Change intern table to unordered set.Mathieu Chartier2014-09-021-16/+22
| | | | | | | | | | | Intern table active used bytes goes from 430k to 317k on system server. Similar %wise savings on other apps. Bug: 16238192 (cherry picked from commit d910fcef539e12ab181e56ec80684f39c4e95733) Change-Id: Ic70395124435c6f420a77e6d8639404a160f395a
* Add native memory accounting through custom allocator.Mathieu Chartier2014-08-291-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added a custom allocator that lets you pass in a special tag which specifices where the allocation came from. This is used when dumping. The performance overhead is low since each allocation only does a atomic add/sub for each allocation/free. The measurements are dumped to traces.txt during SIGQUIT. Example output: I/art (27274): AllocatorTagHeap active=120 max=120 total=168 I/art (27274): AllocatorTagMonitorList active=1572 max=6240 total=11724 I/art (27274): AllocatorTagClassTable active=185208 max=185208 total=268608 I/art (27274): AllocatorTagInternTable active=430368 max=430368 total=436080 I/art (27274): AllocatorTagMaps active=5616 max=6168 total=34392 I/art (27274): AllocatorTagLOS active=1024 max=1536 total=2044 I/art (27274): AllocatorTagSafeMap active=0 max=51936 total=533688 I/art (27274): AllocatorTagLOSMaps active=144 max=1248 total=5760 I/art (27274): AllocatorTagReferenceTable active=10944 max=11840 total=19136 I/art (27274): AllocatorTagHeapBitmap active=32 max=40 total=56 I/art (27274): AllocatorTagHeapBitmapLOS active=8 max=8 total=8 I/art (27274): AllocatorTagVerifier active=0 max=18844 total=1073156 I/art (27274): AllocatorTagModUnionCardSet active=5300 max=5920 total=56020 I/art (27274): AllocatorTagModUnionReferenceArray active=24864 max=24864 total=24864 I/art (27274): AllocatorTagJNILibrarires active=320 max=320 total=320 I/art (27274): AllocatorTagOatFile active=1400 max=1400 total=5852 Change-Id: Ibb470ef2e9c9a24563bb46422d46a55799704d82 (cherry picked from commit 5369c40f75fdcb1be7a7c06db212ce965c83a164)
* Add GcRoot to clean up and enforce read barriers.Hiroshi Yamauchi2014-07-291-4/+7
| | | | | | | | | | | | | Introduce a value-type wrapper around Object* for GC roots so that 1) we won't have to directly add the read barrier code in many places and 2) we can avoid accidentally bypassing/missing read barriers on GC roots (the GcRoot interface ensures that the read barrier is executed on a read). The jdwp test passed. Bug: 12687968 Change-Id: Ib167c7c325b3c7e3900133578815f04d219972a1