初识Android | 青训营笔记

59 阅读2分钟

初识Android | 青训营笔记

这是我参与「第四届青训营」笔记创作活动的的第10天

ART 虚拟机

  • 对象: 当我们通过new创建一个Java对象时,虚拟机会安排内存分配的所有工作。因为Java类最终的父类都是java.lang.Object,因此当我们创建一个Java对象时,必然伴随着java.lang.Object的实例化过程。 且在Java中提供了一个java.lang.Clas类,该类的实例表示一个运行程序中的类或接口,实例中的字段记录了类或接口的元数据。

    下图是对象和类之间的关系图: image.png

  • 内存分配

    • 分配算法之一:伙伴算法(buddy算法),计算机算法的一种,是为了核心内存管理能够快速响应请求,尽可能地在提高内存利用率的同时减少内存碎片的一种算法。(伙伴:即满足以下三个条件的称为伙伴:1)两个块大小相同;2)两个块地址连续;3)两个块必须是同一个大块中分离出来的;)

    • 算法内存释放原理:内存的释放是分配的逆过程,也可以看作是伙伴的合并过程。当释放一个块时,先在其对应的链表中考查是否有伙伴存在,如果没有伙伴块,就直接把要释放的块挂入链表头;如果有,则从链表中摘下伙伴,合并成一个大块,然后继续考察合并后的块在更大一级链表中是否有伙伴存在,直到不能合并或者已经合并到了最大的块

  • 内存回收 (回收算法的实现):主流的大部分Davik采取的都是标注与清理(Mark and Sweep)回收算法,也有实现了拷贝GC的,这一点和HotSpot是不一样的,具体使用什么算法是在编译期决定的,无法在运行的时候动态更换。

客户端架构设计及应用

  • 架构面临的问题:
    1. 架构设计是为了解决特定领域不同发展阶段的业务问题
    2. 不同领域的架构有明显的技术差异,但也有很多相似性
    3. 架构不仅面临技术挑战,还要应对组织业务膨胀的熵增
    4. 移动端需要利用有限的设备资源设计符合小屏幕的架构

  • 常见架构手段:
    • 不同架构手段的共同目标是高内聚低耦合
    • 找到适合业务场景的架构而不是炫技滥用
    • 一个复杂的系统是多种架构模型的组合体

  • 架构演进的例子:
    • 架构随业务发展由简单变得复杂是规律
    • 没必要最初用复杂架构来解决简单问题
    • 需要用规范持续重构来对抗代码的腐朽

参考:资料