初识Android | 青训营笔记
这是我参与「第四届青训营」笔记创作活动的的第10天
ART 虚拟机
-
对象: 当我们通过new创建一个Java对象时,虚拟机会安排内存分配的所有工作。因为Java类最终的父类都是java.lang.Object,因此当我们创建一个Java对象时,必然伴随着java.lang.Object的实例化过程。 且在Java中提供了一个java.lang.Clas类,该类的实例表示一个运行程序中的类或接口,实例中的字段记录了类或接口的元数据。下图是对象和类之间的关系图:
-
内存分配:-
分配算法之一:伙伴算法(buddy算法),计算机算法的一种,是为了核心内存管理能够快速响应请求,尽可能地在提高内存利用率的同时减少内存碎片的一种算法。(伙伴:即满足以下三个条件的称为伙伴:1)两个块大小相同;2)两个块地址连续;3)两个块必须是同一个大块中分离出来的;) -
算法内存释放原理:内存的释放是分配的逆过程,也可以看作是伙伴的合并过程。当释放一个块时,先在其对应的链表中考查是否有伙伴存在,如果没有伙伴块,就直接把要释放的块挂入链表头;如果有,则从链表中摘下伙伴,合并成一个大块,然后继续考察合并后的块在更大一级链表中是否有伙伴存在,直到不能合并或者已经合并到了最大的块
-
-
内存回收 (回收算法的实现):主流的大部分Davik采取的都是标注与清理(Mark and Sweep)回收算法,也有实现了拷贝GC的,这一点和HotSpot是不一样的,具体使用什么算法是在编译期决定的,无法在运行的时候动态更换。
客户端架构设计及应用
架构面临的问题:- 架构设计是为了解决特定领域不同发展阶段的业务问题
- 不同领域的架构有明显的技术差异,但也有很多相似性
- 架构不仅面临技术挑战,还要应对组织业务膨胀的熵增
- 移动端需要利用有限的设备资源设计符合小屏幕的架构
常见架构手段:- 不同架构手段的共同目标是高内聚低耦合
- 找到适合业务场景的架构而不是炫技滥用
- 一个复杂的系统是多种架构模型的组合体
架构演进的例子:- 架构随业务发展由简单变得复杂是规律
- 没必要最初用复杂架构来解决简单问题
- 需要用规范持续重构来对抗代码的腐朽
参考:资料