diff options
Diffstat (limited to 'runtime/runtime.cc')
| -rw-r--r-- | runtime/runtime.cc | 36 |
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)); |