随笔分类 - 读书笔记
深入理解计算机系统、深入理解JVM
摘要:一、早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Java中 是伪泛型采用类型擦除的方法实现泛型 List<Integer> List<String> 运行期就是同一个类 编译期
阅读全文
摘要:一、JAVA运行时的数据区 程序计数器:可以看做是当前线程所执行的字节码的行号指示器,为了线程切换后能恢复到正确的执行位置 线程私有 除了此区域其他区域都会发生OutOfMemoryError JAVA虚拟机栈 线程私有 生命周期与线程相同 每个方法执行的时候都会创建一个栈帧用于存储局部变量表(基本
阅读全文
摘要:每次有一个新连接到来,服务器都会fork一个子进程去处理该连接,而自己则继续等待下次连接
阅读全文
摘要:从概念上来讲:虚拟存储器被组织为一个存放在磁盘上的N个连续的字节大小的单元组成的数组。 磁盘上数组的内容被缓存到主存中 1. 读写内存的安全性 物理内存本身是不限制访问的,任何地址都可以读写,而操作系统要求不同的页面具有不同的访问权限,这是利用CPU模式和MMU的内存保护机制实现的。例如,Text
阅读全文
摘要:进程轮流使用处理器 父进程调用fork来创建一个新的子进程 回收子进程 waitpid/wait 非本地跳转:
阅读全文
摘要:链接:将各种代码和数据部分收集起来并组合成为单一文件的过程,这个文件可被加载到存储器并执行。 在运行时,和一个在存储器中的程序链接起来 二、静态链接库与动态链接库 静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模
阅读全文
摘要:编写高效的程序需要:1.选择合适的数据结构和算法 2.编译器能够有效优化以转换为高效可执行代码的源代码 3.利用并行性 优化编译器的局限性 程序示例: combine3的汇编代码: load->mul load->mul load load mul mul 加载:从存储器读到寄存器 存储:从寄存器写
阅读全文
摘要:栈在处理过程调用中起到至关重要的作用,栈向下增长,栈顶元素的地址是所有栈中元素最小的。栈指针%esp保存着栈顶元素的地址 控制: 重点: 基于条件数据传送的代码比基于条件控制转移(预测错误惩罚比较高)的代码性能好
阅读全文
摘要:恢复内容开始 整数表示: 反码和原码都会有正零和负零 有符号整数和无符号整数之间的转换 反之 扩展一个数字的位级表示 截断操作 无符号加法的益处 补码的加法 规格化的值:E=e-bias 其中e是无符号数,而bias=2的k-1次方-1 尾数M=1+f; 非规格化的值: E=1-bias,M=f;
阅读全文
摘要:恢复内容开始 预处理器+编译器+汇编器+链接器=编译系统 运行hello程序 操作系统: 无论是在单核还是多核系统中,一个CPU看上去都在并发的执行多个进程,这是通过处理器在进程间切换来实现的,也就是上下文切换 一个进程由多个称为线程的执行单元构成,每个线程都运行在进程的上下文中,并共享同样的代码和
阅读全文
摘要:二.存储器的层次结构 层次结构中较底层的设备访问时间较长,为了补偿这些较长的访问时间,倾向于使用较大的块。 缓存不命中的种类: 冷不命中(空的) 冲突不命中(mod4) 容量不命中 2. 高速缓存确定一个缓存是否命中 通过这三种方式 1)组选择2)行匹配3)块抽取 一.链接器的主要任务: 1.符号解
阅读全文

浙公网安备 33010602011771号