Android虚拟机art流程:Runtime.start开始(6)

  • A+
所属分类:art虚拟机

我们回到这个函数。

extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, JNIEnv** p_env, void* vm_args) {
  ScopedTrace trace(__FUNCTION__);
 ...
  bool ignore_unrecognized = args->ignoreUnrecognized;
  if (!Runtime::Create(options, ignore_unrecognized)) {
    return JNI_ERR;
  }
...

  Runtime* runtime = Runtime::Current();
  bool started = runtime->Start();
  *p_env = Thread::Current()->GetJniEnv();
  *p_vm = runtime->GetJavaVM();
  return JNI_OK;
}

 

其实我们在 Runtime::Create 中已经分析了好多了。 Runtime::Create 也就是 Runtime::Init 。这里做了好多内容主要包括:

  1. javaVm和JNIEnv的初始化
  2. ota文件加载以及整个heap的建立
  3. classlinker的建立

 

接下来我们来看 runtime->Start()。

 

bool Runtime::Start() {

  Thread* self = Thread::Current();

  self->TransitionFromRunnableToSuspended(kNative);

  started_ = true;

  if (jit_options_->UseJitCompilation() || jit_options_->GetSaveProfilingInfo()) {
    std::string error_msg;
    if (!IsZygote()) {
      CreateJit();
    } else if (jit_options_->UseJitCompilation()) {

    }
  }

  {
    ScopedTrace trace2("InitNativeMethods");
    InitNativeMethods();
  }

  InitThreadGroups(self);

  system_class_loader_ = CreateSystemClassLoader(this);

  if (is_zygote_) {
    if (!InitZygote()) {
      return false;
    }
  } else {
    if (is_native_bridge_loaded_) {
      PreInitializeNativeBridge(".");
    }
    InitNonZygoteOrPostFork(self->GetJniEnv(),
                            /* is_system_server */ false,
                            action,
                            GetInstructionSetString(kRuntimeISA));
  }

  StartDaemonThreads();

  return true;
}

 

这个函数份量好重啊!

  • jit的建立
  • initnativeMethods java代码so的加载
  • systemClassLoader的建立
  • daemonThreads 的建立 ----垃圾回收主要线程

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: