深入理解java虚拟机(1)
深入理解java虚拟机视频版
第二章:
1.java技术体系:
*java程序设计语言
*各硬件平台上的java虚拟机
*Class文件格式
*Java API
*第三方的java类库
2.lanmbda表达式:
其中被注释掉的部分等于第20行的代码,其中e表示参数
第三章
1.程序计数器
goto是作为保留字存在的,意思是系统不能用,也不让开发者用,只是保留起来为将来jdk的发展做准备。
2.java虚拟机栈
3.java本地方法栈
*虚拟机栈为虚拟机执行java方法服务
*本地方法栈为虚拟机执行native方法服务
4.java堆
5.方法区
7.划分
线程共享区包括方法区和java堆,线程独占区包括虚拟机栈,本地方法栈和程序计数器。
8.常量池
常量池也属于方法区的一部分,所以也受到了方法区内存的限制。
9.对象的创建
指针碰撞:java堆中内存是规整的,所有用过的内存在一侧,空闲的内存在另一侧,中间放着一个指针作为分界点的指示器,那所分配的内存仅仅是把指针向空闲的内存一侧挪动一段与对象内存大小相等的距离
空闲列表:在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录。
10.对象的结构
对象头中的Mark Word
11.对象的访问定位
*使用句柄:好处就是引用地址不需要修改,只要修改句柄池的地址
*直接指针:减少性能开销
句柄池中应该包括到对象实例数据的指针和到对象类型数据的指针
12.垃圾回收
13.引用计数算法
在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,引用失效的时候,计数器的值就-1。
14.可达性算法
可达性算法:就是从GCRoots中判断是否能到达指定的对象,如果不能则为垃圾对象
java对引用的概念进行了扩充,分为强引用,软引用,弱引用,虚引用。强度依此减弱
15.标记-清除算法
标记-清除算法:先对所有对象进行标记,包括使用中,未使用,等待清除等,当内存不够用,或者内存不连续导致不够用的时候,虚拟机会自动触发垃圾回收
16.复制算法
复制算法:把没有利用的区域复制到一块,重新构成连续区域,可以解决效率问题
17.标记-整理算法
标记-整理算法:标记需要被回收的内存,然后将所以需要回收的内存整理到一起。
18.分代收集算法
新生代:大批对象死去,只有少数存活,所以回收效率高
老年代:对象存活率高,回收效率低
分代收集算法:对于回收效率高的新生代采用复制算法,对于回收效率低的老年代采用标记-整理算法
19.Parallel Scavenge收集器
20.CMS收集器
21.G1收集器
并行缩短等待时间,并发提高速度
22.内存分配策略
23.优先分配策略
优先分配策略:将新生成的对象先分配到Eden中,当Eden的内存不够存放的时候,就将Eden中的对象存放到有内存空间的部分(空间分配担保),然后再将新生成的对象存放到Eden中
24.大对象分配到老年代
大对象分配到老年代:-XX:PretenureSizeThre shold
25.长期存活的对象将进入老年代
长期存活的对象将进入老年代: -XX:MaxTenuringThreshold
26.空间分配担保
空间分配担保:-XX:+/-HandlePromotionFailure(+为开启,-为应用)