记一次 JVM 源码分析(1.简介)

简介

  本来打算直接看 ART 的源码,一看 Android P 的已经十分庞大了,所以打算找一个小型的 JVM 热热身,想起了以前功能机上的 Java KVM,但是又太过古老。翻 github 偶然翻到一个开源的 Mini Jvm,竟然还支持 Java8 标准,所以准备以此入手了解 JVM。

Mini JVM

MiniJVM 原始 repo:https://github.com/digitalgust/miniJVM
个人加了注释的版本:https://github.com/ganyao114/miniJVM/tree/doc

架构

作者本人的图:
在这里插入图片描述

特性

麻雀虽小五脏俱全:

  • 完整的跨平台性,支持 Android/IOS/Mac/Linux/Windows
  • 支持到 Java8 字节码
  • 无需依赖,MiniJvm 的 List,Map 等 lib 都是自带的
  • Thread/Network/IO/JNI/GC/Debug 等基本特性的支持
  • GUI lib 支持

技术特征

  • 运行模式:基于堆栈的 Switch 解释器
  • 内存管理:使用开源小巧的 LTALLOC 库
  • GC:Mark - Sweep ,单线程,不支持并行
  • 未实现部分:Reference 暂未实现

源码结构

  • binary/-------- 编译结果 (win32/win64/mac/linux)

  • mini_jvm/------ minijvm 源码©

  • javalib/------- minijvm 的核心库,相当于 JDK 的 rt.jar

  • ex_lib/

    • jni_gui/------ pc 的 GUI 库
    • luaj/--------- lua 的库,因为这个虚拟机本意是给小游戏服务的,所以需要支持 lua
  • mobile/

    • c/------------- java native lib, glfm framework, gui jni, glfmapp
    • java/guilib---- java jni for above /mobile/c native gui lib
    • java/ExApp----- java app entry point
    • iosapp/-------- iOS launcher
    • androidapp/---- Android launcher
    • assets/resfiles/- java app resource, font files, jar files ,pic etc.
  • test/

    • javalib_test/- test /javalib classes.
    • jni_test/----- jni example
    • jvm_ios/------ ios swift test project ,only test the jvm.
    • jvm_macos/---- macosX test project, only test jvm.
    • jvm_vs/------- virtual studio test project, only test jvm.

需要着重介绍一下 mini_jvm 目录:

  • mini_jvm/

    • jvm/ ----- mini jvm 的核心源码
      • class_loader ---- 类加载相关源码
      • class ---- 描述 java 的类,以及类的创建/销毁/初始化/成员解析等各种操作
      • garbage ----- 内存管理和 GC
      • global ----- 虚拟机运行时需要的全局的参数/变量/常量
      • interpreter ----- 解释器(Switch)
      • java_native_io ----- java 原生 IO 的实现,包括 Socket IO 和 文件 IO
      • java_native_reflect ------ java 反射实现
      • java_native_std ------ java 标准库实现,和字节码命令对应的函数实现
      • jdwp ------ 远程调试器
      • jvm_util ------ jvm 一些工具方法,包括线程操作
      • jvm ------ 描述 jvm 的一些核心数据结构,和一些核心方法实现
      • runtime ------ 每执行到一个方法都会创建一个 Runtime,Runtime 相当于方法栈
    • utils/ ----- 一些基础工具代码,如 List/Map/thread 的实现,为了方便的移植到各个平台,甚至是嵌入式平台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值