Memory Management for Android Apps 笔记之 GC

Android

本篇博文是在观看 Google I/O 2011 : Memory Management for Android App 所做的笔记之一,主要篇幅是传递演讲者 Patrick Dubroy 的观点,小部分则掺杂了自己的理解。这里的观点可能包含了谬误,或者是过时信息,因此建议读者如果英语能力尚可,则不妨直接观看原视频或者演示文稿,–需翻墙。

Android 日志是开发者审视系统、应用运行状况的得力助手,它就像是驾驶员面前的仪表盘,车辆的时速、里程、油量等数据关系到行驶安全,而日志中的 GC 信息则反馈了系统、应用健康状况,细心的开发者甚至可以判定是不是发生了内存泄漏。

[ Read More » ]

读CSAPP之优化的基础知识

Computer System: A Programmer’s Perspective

编写高效代码就是善待你的用户,每节省一个时钟周期、一字节网络流量,就是善事一桩,善小亦为之,日久功德无量。

首先,动手之前,选择出合适的算法和数据结构;其次,编写出的源代码应该让编译器能够有效优化,以生成成高效可执行代码;最后,针对处理运算量特别大的计算,要能将一个任务分成多个部分,这些部分可以在多核或多处理器的某种组合上并行地计算。

[ Read More » ]

读CSAPP之PIPE原理和实现

Computer System: A Programmer’s Perspective

流水线化的目的就是每个时钟周期都发射一条指令,也就是说每个时钟周期都有一条新指令进入执行阶段,同时有一条旧指令退出执行流程。

流水线化会增加吞吐量(throughout),但同时也会增加一条指令从头到尾执行的全部时间,即延迟(latency),–延迟增加的原因是,多出来的流水线寄存器的时间开销。

流水线阶段之间的指令转移由时钟信号控制,并且时钟信号控制在每隔特定的时间间隔加载流水线寄存器。流水线寄存器采用时钟寄存器,其由时钟信号控制加载输入值,信号转播到流水线寄存器的输入,直到时钟上升时,才会改变寄存器的状态。用来保存程序计数器(PC)、条件代码(CC)和程序状态(Stat)等。

[ Read More » ]

读CSAPP之ISA、Circuit和SEQ

Computer System: A Programmer’s Perspective

我曾经不只三次翻阅第四章–处理器体系机构,然而至今未能完整读懂,其中的电子学和布尔代数小节,使我深深地为当年的逃课行为感到懊恼,–为此,我特意找了《数字电路简明教程》来补上这一课。下面这些文字,是我在半懂不懂的情况下,“断章取意”摘录的,只做自己的读书笔记。

ISA

指令集体系结构(Instrunction-Set Architecture, ISA)是指处理器所支持的指令和指令的字节级编码,其在编译器编写者和处理器设计者之间提供了一个概念抽象层。

每条指令由若干个字节组成,第一个字节包含了code部分(高四位)和function部分(低四位),不同指令的code部分可能相同,但code和function的二者组合则惟一标识一条指令,并根据其确定其他附加字节的长度和定义,处理器可以无二义性地执行目标代码程序。

[ Read More » ]

读CSAPP之Procedure、Stack Frame

Computer System: A Programmer’s Perspective

过程调用包括将数据(以参数和返回值的形式)和控制从代码的一部分传递到另一部分,同时,在进入时为过程的局部变量分配空间,并在退出时释放空间。

IA32只提供了对进入过程和退出过程的控制,而数据传递、变量的分配和释放则要通过操作程序栈来实现。x86-64则是通过寄存器而不是栈来传递数据,这样极大地减少了存储器读写操作的数量。

[ Read More » ]