Android Framework(一)——关键系统进程启动过程 注意(WARNING):本文含有大量AOSP源码,阅读过程中如出现头晕、目眩、恶心、犯困等症状属正常情况,作者本人亦无法避免症状产生,故不承担任何法律责任。 本文所贴源码全部来自 Android API 29 Platform,即 Android 10.0。 阅读本文需要有一定的C/C++基础。 Android系统架构当我们看到”Android系统架构“这几个字时,通常会联想到Google官方 2021-05-14 Android Framework AOSP Zygote SystemServer
深入理解Kotlin协程(六)——从字节码角度理解协程 之前的协程文章中并没有采用字节码来分析,原因一是当时对字节码不是很熟悉,二是不好用一个更难的概念来解释一个没那么难的概念。我们知道协程的关键实现都是由 kotlinc 即编译器来完成,而 IDE 反编译的代码阅读性很差,那么现在学习了字节码之后就可以通过 javap 来一探究竟了。 suspend functionkotlin协程的”黑魔法“基础是 suspend 关键字,先来这个方法看看背后做了 2021-05-06 Kotlin Bytecode Coroutines
深入理解JVM(六)——从字节码来看Lambda、泛型与协程 在上一篇文章熟悉了字节码的基础指令之后,一些以往难懂的、被编译器隐藏的“黑盒子”知识点就可以尝试通过字节码去分析了。下面尝试分析 Java 8 中 Lambda 表达式与 Kotlin 中 Lambda 表达式的区别、Java 和 Kotlin 中的泛型来加深对 Java 、Kotlin 语言的理解。 Lambda表达式原理Java 在 1.8 版本中引用了一个重要特性——Lambda表达式。该特 2021-04-25 JVM Bytecode Generic Lambda
深入理解JVM(五)——字节码基础 上篇文章中了解了虚拟机执行子系统中的栈和栈帧结构,并且学习了一些方法调用相关的字节码指令,对于方法的分派过程有了更深入的理解,接下来这篇文章来了解一下基础的字节码指令。 字节码指令字节码指令主要有加载和存储指令、操作数栈指令、运算和类型转换指令、控制转移指令等,这一部分是了解字节码的基础。 加载和存储指令加载(load)和存储(store)相关的指令是使用得最频繁的指令,分为load类、store 2021-04-18 JVM Bytecode
深入理解JVM(四)——虚拟机执行子系统 Java 虚拟机的指令由一个操作码(opcode)和紧随其后的可选操作数(operand)组成,占一个字节长度,故称其为“字节码(bytecode)“。 Java虚拟机栈和栈帧虚拟机常见的实现方式有两种:基于栈(Stack based)和基于寄存器(Register based)。Hotspot JVM是一种典型的基于栈的虚拟机,而Android开发者熟知的DalvikVM则是基于寄存器的虚拟 2021-04-10 JVM Execution Subsystem
深入理解JVM(三)——类加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。——《深入理解Java虚拟机》 类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Res 2021-03-30 JVM ClassLoader
深入理解JVM(二)——类文件结构 “Class 文件”并非特指某个存在于具体磁盘中的问题,而应当是一串二进制字节流,无论其以何种形式存在,包括但不限于磁盘文件、网络、数据库、内存或者动态产生等。 Java 能够实现”一次编译,到处运行”,这其中 class 文件要占大部分功劳。为了让 Java 语言具有良好的跨平台能力,Java 独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码类文件(.class文件)。有 2021-03-19 JVM Class File
深入理解JVM(一)——自动内存管理 Java内存区域与内存溢出异常对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”, 又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对 的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚 2021-03-12 JVM Memory Management
深入理解Kotlin协程(五)——官方框架 协程框架概述Kotlin协程的官方框架kotlin.coroutines是一套独立于标准库之外的以生产为目的的框架,框架本身提供了丰富的API来支撑生产环境中异步程序的设计和实现。主要包含以下几个部分: core:框架的核心逻辑,包含前两篇文章实现的内容和Channel、Flow等特性。 ui:包含android、javafx、swing三个库,用于提供各平台的UI调度器和一些特有的逻辑。 re 2021-02-28 Kotlin Coroutines
深入理解Kotlin协程(四)——Kotlin协程框架初探(二) 本篇继续探讨协程的取消、异常处理以及作用域问题。 协程的取消协程的取消本质是协作式的取消,这点跟线程的中断一致,除了自身状态置为取消外,也需要协程体的执行逻辑能够检查状态的变化来响应取消。 完善协程的取消逻辑我们的Job目前还有两个函数空着没有实现,分别是cancle和invokeOnCancel。后者的实现与doOnCompleted类似,如下所示。 1234567891011121314151 2021-02-21 Kotlin Coroutines