summaryrefslogtreecommitdiffstats
path: root/runtime/gc/accounting
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-03-27 14:35:38 -0700
committerMathieu Chartier <mathieuc@google.com>2015-04-10 12:57:27 -0700
commitc785344b87221f5e4e6473e5b762e4e61fe65dcf (patch)
treecd32ad2c2604596a18926f04d4c313dab255ecfd /runtime/gc/accounting
parenta29d93b380c9aeb8270e281aefbdd0c77a430d43 (diff)
downloadart-c785344b87221f5e4e6473e5b762e4e61fe65dcf.tar.gz
art-c785344b87221f5e4e6473e5b762e4e61fe65dcf.tar.bz2
art-c785344b87221f5e4e6473e5b762e4e61fe65dcf.zip
Move ArtField to native
Add linear alloc. Moved ArtField to be native object. Changed image writer to put ArtFields after the mirror section. Savings: 2MB on low ram devices 4MB on normal devices Total PSS measurements before (normal N5, 95s after shell start): Image size: 7729152 bytes 23112 kB: .NonMoving 23212 kB: .NonMoving 22868 kB: .NonMoving 23072 kB: .NonMoving 22836 kB: .NonMoving 19618 kB: .Zygote 19850 kB: .Zygote 19623 kB: .Zygote 19924 kB: .Zygote 19612 kB: .Zygote Avg: 42745.4 kB After: Image size: 7462912 bytes 17440 kB: .NonMoving 16776 kB: .NonMoving 16804 kB: .NonMoving 17812 kB: .NonMoving 16820 kB: .NonMoving 18788 kB: .Zygote 18856 kB: .Zygote 19064 kB: .Zygote 18841 kB: .Zygote 18629 kB: .Zygote 3499 kB: .LinearAlloc 3408 kB: .LinearAlloc 3424 kB: .LinearAlloc 3600 kB: .LinearAlloc 3436 kB: .LinearAlloc Avg: 39439.4 kB No reflection performance changes. Bug: 19264997 Bug: 17643507 Change-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c
Diffstat (limited to 'runtime/gc/accounting')
-rw-r--r--runtime/gc/accounting/mod_union_table.cc1
-rw-r--r--runtime/gc/accounting/remembered_set.cc1
-rw-r--r--runtime/gc/accounting/space_bitmap.cc34
3 files changed, 15 insertions, 21 deletions
diff --git a/runtime/gc/accounting/mod_union_table.cc b/runtime/gc/accounting/mod_union_table.cc
index a3fac58e8a..cd3f910d95 100644
--- a/runtime/gc/accounting/mod_union_table.cc
+++ b/runtime/gc/accounting/mod_union_table.cc
@@ -28,7 +28,6 @@
#include "gc/heap.h"
#include "gc/space/space.h"
#include "gc/space/image_space.h"
-#include "mirror/art_field-inl.h"
#include "mirror/object-inl.h"
#include "mirror/class-inl.h"
#include "mirror/object_array-inl.h"
diff --git a/runtime/gc/accounting/remembered_set.cc b/runtime/gc/accounting/remembered_set.cc
index b16a146ea9..eeb385e957 100644
--- a/runtime/gc/accounting/remembered_set.cc
+++ b/runtime/gc/accounting/remembered_set.cc
@@ -26,7 +26,6 @@
#include "gc/collector/semi_space.h"
#include "gc/heap.h"
#include "gc/space/space.h"
-#include "mirror/art_field-inl.h"
#include "mirror/object-inl.h"
#include "mirror/class-inl.h"
#include "mirror/object_array-inl.h"
diff --git a/runtime/gc/accounting/space_bitmap.cc b/runtime/gc/accounting/space_bitmap.cc
index ad8d9884ec..2da83250d3 100644
--- a/runtime/gc/accounting/space_bitmap.cc
+++ b/runtime/gc/accounting/space_bitmap.cc
@@ -16,12 +16,12 @@
#include "space_bitmap-inl.h"
+#include "art_field-inl.h"
#include "base/stringprintf.h"
#include "dex_file-inl.h"
#include "mem_map.h"
#include "mirror/object-inl.h"
#include "mirror/class.h"
-#include "mirror/art_field.h"
#include "mirror/object_array.h"
namespace art {
@@ -190,15 +190,13 @@ void SpaceBitmap<kAlignment>::WalkInstanceFields(SpaceBitmap<kAlignment>* visite
WalkInstanceFields(visited, callback, obj, super, arg);
}
// Walk instance fields
- mirror::ObjectArray<mirror::ArtField>* fields = klass->GetIFields();
- if (fields != NULL) {
- for (int32_t i = 0; i < fields->GetLength(); i++) {
- mirror::ArtField* field = fields->Get(i);
- if (!field->IsPrimitiveType()) {
- mirror::Object* value = field->GetObj(obj);
- if (value != NULL) {
- WalkFieldsInOrder(visited, callback, value, arg);
- }
+ auto* fields = klass->GetIFields();
+ for (size_t i = 0, count = klass->NumInstanceFields(); i < count; ++i) {
+ ArtField* field = &fields[i];
+ if (!field->IsPrimitiveType()) {
+ mirror::Object* value = field->GetObj(obj);
+ if (value != nullptr) {
+ WalkFieldsInOrder(visited, callback, value, arg);
}
}
}
@@ -219,15 +217,13 @@ void SpaceBitmap<kAlignment>::WalkFieldsInOrder(SpaceBitmap<kAlignment>* visited
WalkInstanceFields(visited, callback, obj, klass, arg);
// Walk static fields of a Class
if (obj->IsClass()) {
- mirror::ObjectArray<mirror::ArtField>* fields = klass->GetSFields();
- if (fields != NULL) {
- for (int32_t i = 0; i < fields->GetLength(); i++) {
- mirror::ArtField* field = fields->Get(i);
- if (!field->IsPrimitiveType()) {
- mirror::Object* value = field->GetObj(NULL);
- if (value != NULL) {
- WalkFieldsInOrder(visited, callback, value, arg);
- }
+ auto* sfields = klass->GetSFields();
+ for (size_t i = 0, count = klass->NumStaticFields(); i < count; ++i) {
+ ArtField* field = &sfields[i];
+ if (!field->IsPrimitiveType()) {
+ mirror::Object* value = field->GetObj(nullptr);
+ if (value != nullptr) {
+ WalkFieldsInOrder(visited, callback, value, arg);
}
}
}