前言
在 Java 虚拟机中,一个 Java 对象被加载进 JVM 后,它的生命周期被划分为 7 个阶段:
Java 的 .class
文件通过类加载器加载进虚拟机内存里面,由 JVM 虚拟机通过解析执行、或编译执行。JVM 为了方便管理被加载进来的 .class
内容,提出了 Java 虚拟机运行时数据区的概念。Java 虚拟机运行时数据区可以划分为线程私有、线程共享两大类型的数据区,其中线程私有包括程序计数器、虚拟机栈、本地方法栈;而线程共享包括 Java 堆、方法区。
代理模式(Proxy design pattern)可以分为静态代理和动态代理,两种代理模式本质都是对外隔离真实的业务类,并且对外通过代理类,引入代理类的附加功能。对于动态代理的理解,其动态性并不是表现在省去了编写代理类的代码的工作量,而是表现在当真实的业务类、接口类还未知的时候,就可以确定了代理类的行为。
Linux 操作系统从开机加电到执行 main 函数的执行可以分三步完成,其目的是实现从启动盘加载操作操作系统程序,完成执行 main 函数所需要的准备工作。第一步,启动 BIOS,准备实模式下的中断向量表和中断服务程序;第二步,从启动盘加载操作系统程序到内存,加载操作系统程序的工作就是利用第一步准备的中断服务程序实现的;第三步,为执行 32 位的 main 函数做过度工作。
Binder 是 Android 开发者阅读 Android 源码、Linux Kernel 层源码的时候,必须要弄懂的一个知识点。Binder 它出现在 Android Driver 层、Android Native 层、Android Framework 层,当然,在 Android 的 App 层使用的 Binder 框架,也是需要依赖以上三层才可以实现的。
Android 中不同进程的 Activity 或 Service 之间是如何通信的呢?这个问题就是本系列讲解的重点。
在聊 hashcode()
的作用之前,我们首先需要了解什么是散列表。散列表是一种数据结构,它的英文名称叫 Hash Table
, 也是我们平常称的’哈希表’,或者 ‘Hash表’。散列表是一种支持利用数组下标实现随机访问的数据结构,也可以理解成散列表是一种数组的扩展。
基于 Android 源码 5.1 分析