summaryrefslogtreecommitdiff
path: root/runtime/runtime.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/runtime.cc')
-rw-r--r--runtime/runtime.cc36
1 files changed, 4 insertions, 32 deletions
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 14027493d8..0d9d16cd01 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -67,6 +67,7 @@
#include "base/unix_file/fd_file.h"
#include "base/utils.h"
#include "class_linker-inl.h"
+#include "class_root.h"
#include "compiler_callbacks.h"
#include "debugger.h"
#include "dex/art_dex_file_loader.h"
@@ -736,8 +737,9 @@ bool Runtime::Start() {
ScopedObjectAccess soa(self);
StackHandleScope<2> hs(soa.Self());
- auto class_class(hs.NewHandle<mirror::Class>(mirror::Class::GetJavaLangClass()));
- auto field_class(hs.NewHandle<mirror::Class>(mirror::Field::StaticClass()));
+ ObjPtr<mirror::ObjectArray<mirror::Class>> class_roots = GetClassLinker()->GetClassRoots();
+ auto class_class(hs.NewHandle<mirror::Class>(GetClassRoot<mirror::Class>(class_roots)));
+ auto field_class(hs.NewHandle<mirror::Class>(GetClassRoot<mirror::Field>(class_roots)));
class_linker_->EnsureInitialized(soa.Self(), class_class, true, true);
// Field class is needed for register_java_net_InetAddress in libcore, b/28153851.
@@ -1974,36 +1976,6 @@ mirror::Throwable* Runtime::GetPreAllocatedNoClassDefFoundError() {
}
void Runtime::VisitConstantRoots(RootVisitor* visitor) {
- // Visit the classes held as static in mirror classes, these can be visited concurrently and only
- // need to be visited once per GC since they never change.
- mirror::Class::VisitRoots(visitor);
- mirror::Constructor::VisitRoots(visitor);
- mirror::Reference::VisitRoots(visitor);
- mirror::Method::VisitRoots(visitor);
- mirror::StackTraceElement::VisitRoots(visitor);
- mirror::String::VisitRoots(visitor);
- mirror::Throwable::VisitRoots(visitor);
- mirror::Field::VisitRoots(visitor);
- mirror::MethodType::VisitRoots(visitor);
- mirror::MethodHandleImpl::VisitRoots(visitor);
- mirror::MethodHandlesLookup::VisitRoots(visitor);
- mirror::EmulatedStackFrame::VisitRoots(visitor);
- mirror::ClassExt::VisitRoots(visitor);
- mirror::CallSite::VisitRoots(visitor);
- mirror::VarHandle::VisitRoots(visitor);
- mirror::FieldVarHandle::VisitRoots(visitor);
- mirror::ArrayElementVarHandle::VisitRoots(visitor);
- mirror::ByteArrayViewVarHandle::VisitRoots(visitor);
- mirror::ByteBufferViewVarHandle::VisitRoots(visitor);
- // Visit all the primitive array types classes.
- mirror::PrimitiveArray<uint8_t>::VisitRoots(visitor); // BooleanArray
- mirror::PrimitiveArray<int8_t>::VisitRoots(visitor); // ByteArray
- mirror::PrimitiveArray<uint16_t>::VisitRoots(visitor); // CharArray
- mirror::PrimitiveArray<double>::VisitRoots(visitor); // DoubleArray
- mirror::PrimitiveArray<float>::VisitRoots(visitor); // FloatArray
- mirror::PrimitiveArray<int32_t>::VisitRoots(visitor); // IntArray
- mirror::PrimitiveArray<int64_t>::VisitRoots(visitor); // LongArray
- mirror::PrimitiveArray<int16_t>::VisitRoots(visitor); // ShortArray
// Visiting the roots of these ArtMethods is not currently required since all the GcRoots are
// null.
BufferedRootVisitor<16> buffered_visitor(visitor, RootInfo(kRootVMInternal));