JVM狂神说视频学习笔记

视频地址:
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

  1. 栈:数据结构
    程序= 数据结构+算法;持续学习
    程序=框架+业务逻辑 ;吃饭 。。。 将被淘汰

  2. 栈: 先进后出,属于叫做压栈 , 可以理解为一个桶
    队列: 先进先出 , – — – – – 可以理解为一个管道
    栈:栈内存,主管程序的运行,生命周期和线程同步
    栈: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

  1. 是什么
  2. 干嘛的?
  3. 如何学习
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值