Android系统启动流程
Android启动流程
Zygote进程启动分析
SystemServer启动分析
AMS启动分析
Launcher启动流程分析
Loader启动电源以及系统启动
电源按下时引导芯片会从预定义地方(固化在ROM)开始执行,加载引导程序BootLoader到RAM,然后执行
BootLoader ...
Java并发编程—线程池
前言线程池是维护了一批线程来处理用户提交的任务,达到线程复用的目的,合理使用线程有3个好处。
降低资源消耗。通过重用已创建的线程来降低线程创建和销毁造成的消耗
提高响应速度。通过已创建线程立即执行任务,减少了线程的创建时间
提高线程的可管理性。通过合理地使用线程池,从而实现统一分配、调优和监控等
...
深入理解ThreadLocal
ThreadLocal是什么?
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses on ...
Android线程消息机制
前言Android应用程序有主线程和子线程之分,其中主线程由AMS请求Zygote进程创建;而子线程则由主线程或者其它子线程创建。我们知道Android规定只能在主线程中执行与界面相关工作(严格意义是界面创建元素对应的线程),一旦我们在主线程执行的任务过重,就可能导致UI绘制无法及时完成,产生掉帧现 ...
Reference子类源码解析
SoftReference和WeakReference我们知道这两个类基本功能相似,区别在于当引用对象为空的时候,WeakRefreence对象会在GC回收的时候被回收,而SoftReference则需要更苛刻的条件
SoftReference实现原理总结:GC回收时计算 SoftReference ...
Reference和ReferenceQueue相关源码解析
为什么需要引用?我们知道在最早的JVM实现里,是使用“跟踪回收”算法从GC ROOTS出发,按照BFS或者DFS遍历所有可达对象,针对不不可达对象进行回收。但随着Java演进,暴露出一些不能覆盖的场景,例如:某些场景下使用方希望在回收具体对象的同时还能辅助回收这个对象绑定的一些资源(如socket、 ...
JVM内存相关总结
JVM大体结构图
运行时数据区
线程隔离数据区
程序计算器
当前线程执行字节码的行号指示器
如分支、循环、跳转、异常处理、线程恢复等
虚拟机栈
栈帧存储区域,栈帧包含局部变量、操作数栈、动态链接、方法出口等
异常情况,StackOverflowError、OutOfMemoryError
本 ...
java对象生命周期
Java对象生命周期图
创建阶段(Created)
分配存储空间
开始构造对象
父类到子类依次初始化类变量
父类成员初始化,父类构造函数初始化
子类成员初始化,子类构造函数初始化
应用阶段(In Use)对象被一个或多个强引用持有,并且在作用域内
不可见阶段(Invisible)其它区域已经不可以 ...
Java类生命周期
Java类生命周期图
加载
通过一个类的全限定名来获取此类的二进制字节流
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
在java堆中生成一个代表这个类的Class对象,作为方法区这些数据的访问入口
连接验证
验证是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并 ...
Java类加载器
JVM类加载器概念“通过一个类的全限定名来获取描述此类的二进制字节流。” ——实现这个动作的代码模块称为类加载器。
加载阶段
根据一个类的全限定名来获取定义此类的二进制字节流
将这个字节流所代表的静态存储结构转化为 JVM 方法区中的运行时数据结构
在内存中生成一个代表这个类的 java.lang. ...














