Abstract
JAVA 字符串操作的优化。
Java 对象布局
Java Array 对象布局
Java Char Array | ||
---|---|---|
Head | Mark Word | 4 Bytes |
Class Pointer | 4 Bytes | |
Length of Array | Offset = 8 | |
Instance Data | Data of Array | |
Padding |
大约 3 分钟
JAVA 字符串操作的优化。
Java Char Array | ||
---|---|---|
Head | Mark Word | 4 Bytes |
Class Pointer | 4 Bytes | |
Length of Array | Offset = 8 | |
Instance Data | Data of Array | |
Padding |
Art 的创建过程是一个很复杂的命题,所以我们单独开设一章来对这个过程进行学习。
@todo 增加全局的流程图。
当我们选择了 ART 运行时,Zygote 进程在启动过程中,会调用 libart.so
里面的函数 JNI_CreateVM
来创建一个 art 虚拟机,这个函数的实现如下:
// art/runtime/jni/java_vm_ext.cc
// JNI Invocation interface.
extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, JNIEnv** p_env, void* vm_args) {
ScopedTrace trace(__FUNCTION__);
const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
if (JavaVMExt::IsBadJniVersion(args->version)) {
LOG(ERROR) << "Bad JNI version passed to CreateJavaVM: " << args->version;
return JNI_EVERSION;
}
RuntimeOptions options;
for (int i = 0; i < args->nOptions; ++i) {
JavaVMOption* option = &args->options[i];
options.push_back(std::make_pair(std::string(option->optionString), option->extraInfo));
}
bool ignore_unrecognized = args->ignoreUnrecognized;
if (!Runtime::Create(options, ignore_unrecognized)) {
return JNI_ERR;
}
// Initialize native loader. This step makes sure we have
// everything set up before we start using JNI.
android::InitializeNativeLoader();
Runtime* runtime = Runtime::Current();
bool started = runtime->Start();
if (!started) {
delete Thread::Current()->GetJniEnv();
delete runtime->GetJavaVM();
LOG(WARNING) << "CreateJavaVM failed";
return JNI_ERR;
}
*p_env = Thread::Current()->GetJniEnv();
*p_vm = runtime->GetJavaVM();
return JNI_OK;
}
本文主要研究 art 中的 dex2oat 模块。
写作本文的目的在于,笔者在研究 getCharNoCheck
的 native 实现的时候,发现其调用的路径是与 dex2oat 有关的,所以对这个模块进行简单的研究;
第一阶段本文主要研究,Andriod 运行时 art 加载 oat 文件的过程分析,写作时间2022年10月28日;
第二阶段主要对本文进行补充,包括 oat 文件结构的研究;
本篇文章主要是研究 ART 虚拟机中的 native 方法相关的处理流程,凡是涉及到 native 相关的,都会在本篇文章中进行收录。
这篇文章是一个关于 JAVA Art/Davlik 虚拟机的一个杂谈,整理了一些问题和感悟。
本文主要结合软硬件去研究 JVM 中的 JIT 和 AOT 技术,主要针对 ART 虚拟机,提炼出 JAVA 虚拟机相关的基础知识和软硬件结合点。