summaryrefslogtreecommitdiff
path: root/runtime/class_table.h
AgeCommit message (Collapse)Author
2016-06-04Revert "Hold dex caches live in class table" Brian Carlstrom
This reverts commit d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e. Bug: 29083330 Change-Id: Ie209b27897b8079f2d13fd0837fe5f83a7e61afc
2016-06-03Hold dex caches live in class table Mathieu Chartier
Prevents temporary dex caches being unloaded for the same dex file. Usually this is OK, but if someone resolved a string in that dex cache, it could leave stale pointers in BSS. Also it can use extra memory in linear alloc if we allocate dex cache arrays multiple times. Bug: 29083330 (cherry picked from commit f284d448e3edd428b6ade473d0993028638b2064) Change-Id: Ie1b0b0cf835a998e19227cbb90014011a6cd40c4
2016-05-11Prevent ArtMethod clearing race Mathieu Chartier
There was race condition where the GC would be visiting the methods of a class while the class linker overwrote the contents with 0xFE when copying to a new array. Since the GC is holding the class table lock at this time, we can use this lock in the class linker to prevent the race. Bug: 28699001 (cherry picked from commit 10c5f56423feaf3eadb3d4c09c61d2b998404162) Change-Id: I5ddca93106cb8e48962cf44e5ce434c45e05cd0c
2016-04-05Shard classloader classes lock Mathieu Chartier
Used to guard adding and removing classes. Previously we used the class linker classes lock, but this had a deadlock issue since the reference processor may need to acquire the lock to mark the classes of a class loader. Another thread could be blocked trying to access weak globals while also holding the class linker classes lock. Bug: 27946564 Change-Id: If7c13e8775f0912e104d1382eacdba7e7edf6818
2016-03-04Only visit app image classes in class loader Mathieu Chartier
Only update dex cache arrays of added classes since the declaring class is in image DCHECK fails for other classes in the class loader. Also some cleanup to prevent app images leaving invalid state if they get rejected. Bug: 22858531 Bug: 27431418 (cherry picked from commit 6973100705716bffce3768a8a0908d7ca1d02ec1) Change-Id: Ib05364c44f2b943e3341ef2b1dd43337833de143
2016-02-01Fix up dex cache strings stored in classes Mathieu Chartier
Previously we left the image pointer instead of fixing up the pointer to the one in the BSS. This only showed up because JIT does the same as boot image, bypassing null check. Fixed a bug where oat files without embedded dex cache arrays would get their dex cache arrays corrupted. Added a non virtual class visitor for performance. Bug: 26846419 Bug: 22858531 Change-Id: I8cd0d61e440f753b4628ddb8c932eb23a0a81027
2016-01-25Revert "Revert "Load app images"" Mathieu Chartier
This reverts commit 1bc977cf2f8199311a97f2ba9431a184540e3e9c. Bug: 22858531 Change-Id: Ide00bf3a73a02cba3bb364177204ad1b13f70295
2016-01-23Revert "Load app images" Nicolas Geoffray
Fails when a method is duplicated (see test 097-duplicate-method) Bug: 22858531 This reverts commit f7fd970244f143b1abb956e29794c446e4d57f46. Change-Id: Ib30ae5be00cc568e799290be6b3c8f29cbbe4c20
2016-01-22Load app images Mathieu Chartier
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
2016-01-07Re-enable class table for image writer Mathieu Chartier
Changes, create one temporary class table per ImageInfo. Don't keep track of class loaders. Bug: 26317072 Change-Id: I4f9121194f39031fb8629d60b6feeb2747a77870
2015-12-04Combine class sets when writing a class table Mathieu Chartier
Reduces the boot.art size since we allocate a new class set with the default load factor. The load factor in the combined class table is higher to pruning classes, this reduces the size of the boot image. Also fixes the hypothetical case where the class table being written has multiple class sets. Boot.art size Before: 8122368 After: 8044544 Slight cleanup in patchoat.cc. Bug: 22858531 Change-Id: I31b3ea2004ece6f6c853ee906074bb2792dee958
2015-12-03Store class tables in the image Mathieu Chartier
Reduces how long it takes to load an application image. N5 boot.art size Before: 8007680 After: 8122368 Also reduces boot time by how long AddImageClassesToClassTable used to take (~20ms). Changed class hashes to be uint32_t to fix cross compilation. We need serialized hash tables to be valid with different pointer sizes. Bug: 22858531 Change-Id: I463fc83f499ff75f509e80c253a55b9116ee5b89
2015-10-19Keep dex files live in class table Mathieu Chartier
The DexFile.loadClass API allows callers to load classes using a dex file without having that dex file owned by the specified class loader. We now add the dex file to the class table to make sure it stays live until the class loader is unreachable. Fixes interpreter gcstress test 087 with 64 bit. Bug: 22720414 Change-Id: Ia4341149f45b6293312f8b275c7a68cea179f718
2015-09-04Make class loaders weak roots Mathieu Chartier
Making the class loaders weak roots in the class linker prevents them from keeping the classes as live. However we currently do mark them as strong roots to make sure no accidental class unloading occurs until the logic to free from linear alloc is complete. Bug: 22720414 Change-Id: I57466236d9ce6fd064dda9a30ce8ab68094fb8b0
2015-08-12Visit class roots from ClassLoader::VisitReferences Mathieu Chartier
This causes the classes of a class loader to get marked when that class loader gets marked instead of during class root visiting. Bug: 22720414 Change-Id: If53f042aff1d9f7bf94ecbe6886601edda029b7d
2015-08-04Address some comments and clean up Mathieu Chartier
Change-Id: I538cf204f1c89d5fc81f8fc5e5800fcf1cf87359
2015-07-29Clean up class visitors Mathieu Chartier
Move from function pointers to virtual function visitors. Change-Id: I68cb83c1d2ed9b5a89f8e534fe7ca4bbc1c91f45
2015-07-28Split the class table for each class loader Mathieu Chartier
Each class loader now has its own class table. This makes it easier to mark classes when a classloader is marked. Fixed a bug in LookupClass where we used to look ignore the return value of InsertClass. Bug: 22720414 Change-Id: If2cd717989a20a6e245ebec24ad52dc47dd3207d