- 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 。这里做了好多内容主要包括:
- javaVm和JNIEnv的初始化
- ota文件加载以及整个heap的建立
- 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 的建立 ----垃圾回收主要线程
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏