第1章java体系
java技术史
使用OpenJdk编译自己的虚拟机,呵呵
第2章 自动内存管理机制
java运行时内存区域包括
堆:java堆,非堆(方法区(常量池,类反射等信息))
栈:虚拟机栈,本地方法栈
直接内存
计数器:记录代码执行到哪一行
第3章 垃圾回收器与内存分配策略(P43-75)
1.垃圾回收器
1)java对象:新生代和老生代
Full gc??
2.内存分配与回收策略
有5种策略
基本是在minGC,FullGC,对象从新生代到surivor,再到老生代,如何分配复制内存
第4章 虚拟机性能监控与故障处理工具(P76-105)
简单浏览一遍,工具用到的时候需要查书
第5章 调优案例分析与实战(P106-133)
1.高性能硬件上的程序部署策略
2.集群间同步导致的内存溢出
3.对外内存导致的溢出错误
4.外部命令导致系统缓慢
5.服务器JVM进程崩溃
第6章 类文件结构(P136-170)
第7章 虚拟机类加载机制(P171-197)
7.3类加载的过程
7.3.1加载
7.3.2验证
7.3.1准备
7.3.1解析
7.3.1初始化
7.4类加载器
7.4.3破坏双亲委派模型
a.JDK1.2前没有双亲委派
b.SPI的代码,如JNDI,要求子加载器加载基础类,而不是父加载器加载基础类
c.双亲委派不是万能,要创新,如OSGI,OSGI的加载器是网状的,以后再了解
简单了解了一遍,但一些细节需要慢慢记忆
第8章 虚拟机字节码执行引擎(P198-230)
8.2运行时栈帧结构
8.2.1局部变量表
8.2.2操作数栈
定义不懂?
8.2.3动态链接
运行时,一部分符号引用转化为直接引用,这部分过程叫动态链接
8.3方法调用
8.3.1解析---编译时已经知道调用类的哪个版本的方法,如static方法
8.3.2分派
静态多分派:重载
动态但分派:重写
8.4基于栈的字节码解释执行引擎
8.4.1解析执行
回想起编译原理,解释执行其实是做了一半的编译,生成中间代码,
而没有生成物理机器对应目标代码
8.4.2基于栈的指令集和基于寄存器的指令集
基于栈的指令集速度较慢:更多的指令与内存的访问
基于寄存器的指令集:更少的指令与寄存器访问
8.4.3基于栈的解析器执行过程
8-5至8-11看图可以理解基于栈的解析器执行过程,心理有个基本的过程模型
局部变量表存储变量
栈出栈入栈用于加减乘除等运算
第9章 类加载及执行子系统的案例与实战
第10章 早期(编译期)优化(P258-286)
10.3 Java语法糖的味道
10.3.1泛型和类型擦除
10.3.2自动装箱与拆箱
10.3.3条件编译
第11章 晚期(运行期)优化(P287-313)
11.2Hotspot虚拟机
11.2.1解析器与编译器
11.2.2编译对象与触发条件
11.2.3编译过程
字节码->高级中间吗->低级中间码->机器代码(二进制代码)
11.3编译优化技术
11.3.1优化技术概览
11.3.2公共表达式消除
11.3.3数组边界检查消除
11.3.4方法内联
11.3.5逃逸分析
第12章 Java内存模型与线程
P316-322
java内存模型8中操作的原则
volatile的特殊规则
P322-333
先行发生原则
P333-341
java与线程
线程实现有协同式和抢占式
抢占式中:线程执行时间交给了系统控制,而不是线程自身,所以更公平
第13章 线程安全与锁优化(P342-362)
线程安全
锁优化
自旋锁与自适应自旋
轻量级锁
图13-4轻量锁使用cas,明白50%
偏向锁
图13-5不懂,偏向锁cas都不用,就取消同步语义,但原理不懂
Hotsport虚拟机的对象的内存布局
小结:第13章也只是了解了基本概念,原理未吃透