跳至主要內容
Art GC Overview

本篇文章首先对 JAVA Art 中的 GC 进行一个全局性的概览,后续如果要研究技术细节等,再另起新的文章进行重点研究。

提示

本篇主要研究 ConcurrentCopying GC 的技术细节。

Forwarding Ptr

在 art 虚拟机中,FW Ptr 是一个很重要的概念,通常在 "mark and sweep" phase 中使用。

整个过程的描述大致为,gc collector 扫描存活对象和其引用的对象,确定这些对象应该继续存活还是被回收,在 mark phase 完成以后,gc collector 开始 "sweep" phase, 在这个 phase 中,会回收那些堆中没有被 "mark" 的对象(这些对象不会再被使用了);


Someone大约 8 分钟JAVAjvmGC
ART Create

Abstract

Art 的创建过程是一个很复杂的命题,所以我们单独开设一章来对这个过程进行学习。

@todo 增加全局的流程图。

Art Create

JNI_CreateJavaVM

当我们选择了 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;
}

Someone大约 2 分钟JAVAjvmjava
ART dex2oat

Abstract

本文主要研究 art 中的 dex2oat 模块。

写作本文的目的在于,笔者在研究 getCharNoCheck 的 native 实现的时候,发现其调用的路径是与 dex2oat 有关的,所以对这个模块进行简单的研究;

第一阶段本文主要研究,Andriod 运行时 art 加载 oat 文件的过程分析,写作时间2022年10月28日;

第二阶段主要对本文进行补充,包括 oat 文件结构的研究;

Art & oat

oat 文件的产生


Someone大约 2 分钟JAVAjvmjava
ART JNI

本篇文章主要是研究 ART 虚拟机中的 native 方法相关的处理流程,凡是涉及到 native 相关的,都会在本篇文章中进行收录。

  1. JNI 原理、基础知识
  2. Java native 函数的定义、使用以及编译
  3. JNI 层的实现
  4. native 函数注册的流程、函数等

Someone大约 6 分钟JAVAjvmjava
JAVA 虚拟机 ART 研究(杂谈)

这篇文章是一个关于 JAVA Art/Davlik 虚拟机的一个杂谈,整理了一些问题和感悟。

  • 栈式虚拟机 vs 寄存器虚拟机
  • IR

weigao大约 21 分钟JAVAjvmjava
JAVA 虚拟机 ART 研究

本文主要结合软硬件去研究 JVM 中的 JIT 和 AOT 技术,主要针对 ART 虚拟机,提炼出 JAVA 虚拟机相关的基础知识和软硬件结合点。


weigao大约 18 分钟JAVAjvmjava