Android 技术: 追踪vm 如何调用基础类

本文探讨了Android系统中VM(虚拟机)如何通过zygote进程启动并利用fork技术共享内存。文章指出VM是一个运行字节码的运行时环境,通过ClassLoader加载类,并使用JNI进行本地函数调用。以Harmony项目为例,详细分析了从System类到OSMemory的调用链,揭示了基础类库是通过JNI与C/C++代码交互实现的,证实了图形库和sockets等也可能采用相同机制。
摘要由CSDN通过智能技术生成

Android 启动的时候创建第一个 vm 程序 zygote, 而后用它孵化所有的 vm 进程( 就是 java 进程), 这是因为 vm 比较吃内存, 用孵化的方法可以共享内存, 尤其是代码段. 而Linux的内存管理是 copy on write, 所以 fork 使得内存共享得以实现


虚拟机 vm 就是一个 runtime,  解释 byte 并运行而已.  loadloader 负责吧clas装载到内存中, 而且vm 可以注册本地函数, 而后用 native call 调用执行, 这个机制就是 JNI

当你运行一个vm的时候, 发现有如此多的 java 基础类可以调用, 而通过设定 class path 又可以调用更多的类库, 是否很神奇


通过分析 harmony 的一段代码,  探究vm 如何调用基础类

harmony 是一个开源的项目, 目标是替换掉 sun 提供的基础类(为了让java 脱离 sun (现在是 Oracle) 的控制)


我们运行java的时候,调用 System 那么他们是如何附着到 VM 上的.

察看: System.java
static {
         ...
        out = new String.ConsolePrintStream(new BufferedOutputStream(new FileOutputStream(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值