视频地址:
https://www.bilibili.com/video/BV1iJ411d7jS?p=2 JVM 使用C 编写的 ,所以 JAVA 也叫 C+±-
JRE = JVM +
JDK =
要学习《深入理解JVM》这本书。
P1、JVM的学习方式 10:01
P2、JVM的体系结构 11:57
P3、类加载器及双亲委派机制 31:48
P4、Java历史-沙箱安全机制 14:12
P5、Native、方法区 19:29
P6、深入理解一下栈 23:26
P7、走近HotSpot和堆 18:38
P8、新生区、永久区、堆内存调优 34:55
P9、使用JPofiler工具分析OOM原因 22:24
P10、GC介绍之引用计数法 10:08
P11、GC之复制算法 16:45
P12、GC之标记压缩清除算法 08:40
P13、GC算法总结和鸡汤 09:18
P14、如何快速学习方法讲解 20:37
P1、JVM的学习方式 10:01
P2、JVM的体系结构 11:57
P3、类加载器及双亲委派机制 31:48
P4、Java历史-沙箱安全机制 14:12
java 1.0 中远程代码 无法访问本地资源
java1.1 中增加了安全策略,允许用户指定代码对本地资源的访问权限
P5、Native、方法区 19:29
new Thread(()->{
System.out.println("sss");
}).start(); //start() 方法 调用 start0() 方法就是本地方法
public class Thread implements Runnable {
private native void start0(); //java 类中的方法没有方法体 ,自己无法实现
}
PC 寄存器(程序计数器) :Program Counter Register
每个线程一个,用来存储即将执行指令的地址,
方法区: static final 常量池 Class
P6、深入理解一下栈 23:26
- 栈:数据结构
程序= 数据结构+算法;持续学习
程序=框架+业务逻辑 ;吃饭 。。。 将被淘汰 - 栈: 先进后出,属于叫做压栈 , 可以理解为一个桶
队列: 先进先出 , – — – – – 可以理解为一个管道
栈:栈内存,主管程序的运行,生命周期和线程同步
栈:8大基本数据类型+ 对象引用+示例的方法
栈运行原理: 栈帧
喝多了吐就是栈,吃多了拉就是队列
为什么main方法先执行,最后结束
线程结束,栈内存也就释放了,对于栈来说,不存在垃圾
StackOverFlowError
栈 + 堆 + 方法区的交互关系
P7、走近HotSpot和堆 18:38
三种JVM
java -version
1.HotSpot ------Sun
2.BEA JRockit ----Oracle
3.J9 VM ----------IBM
我们学习的是HosSpot版本的
堆
Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的 。
类加载器读取类文件后,
堆内存要细分为三个区域
新生区 Yong/New
伊甸园 Eden Space 幸存0区 幸存1区
养老区 old
永久区 Perm
GC垃圾回收,主要在伊甸园区,和养老区
如果内存满了,OOM,堆内存不够了,
在jdk1.8之后,永久存储区,叫做元空间
P8、新生区、永久区、堆内存调优 34:55
新生区:
类:诞生和成长的地方,甚至是死亡的地方。
伊甸园区: 所有的对象都是在伊甸园区new出来的。
幸存区(0,1)老年区:
永久区: 此区域常驻内存,用来存放JDK自身携带的Class对象,Interface源数据,java运行时的一些环境。jdk1.6之前: 永久代,常量池是在方法区
jdk1.7: 永久代,慢慢退化,常量池在堆中
jdk1.8之后: 无永久代,常量池在元空间。
经过研究:99%的对象都是临时对象!
P9、使用JProfiler工具分析OOM原因 22:24
JProfiler:
可以分析Dump内存文件,快速定位内存泄漏
获取堆中的数据
获取大的对象
P10、GC介绍之引用计数法 10:08
GC的作用区域
JVM在进行GC时,分为轻GC,重GC
JVM堆里面的分区有哪些? Eden,from,to,老年区 ,
JVM的内存模型和分区,详细到每个分区。
P11、GC之复制算法 16:45
当一个对象经历15次对象,还没有被清理,进入老年区,
存活度较低,用复制算法
P12、GC之标记压缩清除算法 08:40
标记清除:
缺点:两次扫描,严重浪费时间,会产生内存碎片,
优点:不需要额外的空间
标记压缩:
P13、GC算法总结和鸡汤 09:18
内存效率: 复制算法> 标记清除算法 > 标记清除压缩算法
内存整齐度: 复制算法=标记压缩算法 > 标记清除算法
内存利用率: 标记压缩算法 = 标记清除算法 > 复制算法
年轻代: 存活率低,复制算法;
老年代: 存活率高, 标记清除算法+ 标记清除压缩算法
P14、如何快速学习方法讲解 20:37
JMM: Java Memory Model
- 是什么
- 干嘛的?
- 如何学习