![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
石灰聪
这个作者很懒,什么都没留下…
展开
-
深入理解计算机系统(2)
2.1 信息存储大多数计算机使用8位的字节,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址,数组下标是地址的增量,所有可能地址的集合就称为虚拟地址空间。2.1.1 十六进制表示法十六进制和十进制之间转换:十进制转十六进制:用十进制数不断的除以16,得到一个商和一个余数,余数用十六进制数表示作为最低位数。以此类推。例如:十进制数314156.314156 ÷ 16 = 19634・原创 2020-11-02 21:21:41 · 1438 阅读 · 0 评论 -
深入理解计算机系统(1)
C语言1.1 信息就是位+上下文hello程序的生命周期是从一个源程序(或者说源文件)开始的,文件名是hello.c。源程序实际上就是一个由值0和1组成的位(又称为比特)序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。大部分的现代计算机系统都使用ASCI1标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。hello.c程序的ASCII码表示注意,每个文本行都是以一个看不见的换行符"\n’来结束的,它所对应的整数值为10,像hel1o.c这样原创 2020-10-26 21:21:42 · 753 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(十)
第13章 线程安全与锁优化13.1 线程安全线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。13.1.1 Java语言中的线程安全我们可以将Java语言中各种操作共享的数据分为以下5类:不可变,绝对线程安全,相对线程安全,线程兼容和线程对立。不可变:不可变的对象一定线程安全的。如果共享数据是一个基本数据类型,只要在定义时使用final原创 2020-07-24 00:16:14 · 97 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(九)
第12章 Java内存模型与线程12.1 硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后在从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。但是这样也引入了一个新的问题,缓存一致性。缓存一致性:在多处理器中,每个处理器都有自己的高速缓存,而它们又共享同一主内存,当多个处理器的运算任务都涉及同原创 2020-07-23 14:22:53 · 156 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(八)
第9章 类加载及执行子系统的案例与实战阅第10章 早期(编译)优化10.1 Javac的源码与调试 todo从Javac的代码来看,编译过程可以分为3个过程:解析与填充符号表过程插入式注解处理器的注解处理过程分析与字节码生成过程Javac的编译动作的入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()方法中,10.1.1 解析与填充符号表解析步骤包括词法分析和语法分析两个过原创 2020-07-22 17:07:24 · 157 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(七)
##第8章 虚拟机字节码执行引擎8.1 方法调用方法调用不等同于方法执行,方法调用的唯一任务是确定调用哪一个方法。Class文件的编译过程不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都是符号引用,而不是方法在实际运行时内存布局中的入口地址。8.1.1 解析调用解析调用可以确定的方法主要包括静态方法,私有方法,实例构造器,父类方法4类,在类加载时候就会把符号引用解析为该方法的直接引用,这些方法称为非虚方法。(只要能被invokestatic和invokespecial指令调用的方原创 2020-07-21 22:37:46 · 159 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(六)
第7章 虚拟机类加载机制7.1 类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载,验证,准备,解析,初始化,使用和卸载7个阶段,其中验证,准备,解析3个部分统称为连接。加载,验证,准备,初始化和卸载这5个阶段的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后再开始。第一个阶段加载要在什么情况下开始?并没有强制约束,需要根据虚拟机的具体实现来把握。但是对于初始化阶段,有且只有5种情况必须立即对类进行初始化。遇到new,getstatic,原创 2020-07-20 15:49:54 · 156 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(五)
第6章 类文件结构6.1Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前(大端存储)的方式分割成若干个8位字节进行存储。Class文件格式结构中只有两种数据类型:无符号数和表。无符号数:属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节,2个字节,4个字节和8个字节的原创 2020-07-20 00:22:05 · 139 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(四)
第4章 虚拟机性能监控与故障处理工具jps:显示指定系统内所有的HotSpot虚拟机进程。jstat:用于收集HotSpot虚拟机各方面的运行数据,可以显示本地或者远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行数据。jinfo:显示虚拟机配置信息jmap:生成虚拟机的内存转储快照(heapdump文件)-XX:+HeapDumpOnOutOfMemoryError参数可以让虚拟机在OOM异常出现之后自动生成dump文件jstack:生成虚拟机当前时刻的线程快照可视化工具:Vis原创 2020-07-17 19:29:09 · 207 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(三)
第3章 垃圾收集器与内存分配策略3.1 如何判定对象是“活着”或者“死去”?引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不在被使用的对象。缺点:很难解决循环引用问题。可达性分析算法:通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,这个对象就是不可用的。可作为GC Roots的对象有:1.虚拟原创 2020-07-15 15:56:57 · 173 阅读 · 0 评论 -
深入理解Java虚拟机 第2版 周志明著(二)
第2章 Java内存区域与内存溢出异常2.1运行时数据区:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为以下几个运行时数据区域。程序计数器:一块较小的内存空间,可以看成是当前程序所执行的字节码的行号指示器(线程执行的是java方法,记录的就是正在执行的虚拟机字节码指令的地址,如果执行的是Native方法,指为空),由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器。Ja原创 2020-07-13 23:52:53 · 201 阅读 · 0 评论