【图灵诸葛】jvm笔记

2023年10月23日14:04:44
jvm
1.jdk体系结构图回顾(Av333129672,P1)
jdk
jre
底层是hotspot jvm
2.java虚拟机内部组成(Av333129672,P2)
运行时数据区

方法区
本地方法栈
线程栈(虚拟机栈)
程序计数器
字节码执行引擎
类加载子系统

3.java虚拟机栈讲解(Av333129672,P3)
程序计数器(记录行号,是由执行引擎来控制的)
栈帧
局部变量表(存储变量)
操作数栈(用javap 反编译 之后 那些个机器码指令方法。加法入栈)
动态链接(栈里面对应的方法区的内存地址)
方法出口(执行完之后,方法该返回的地方)
4.程序计数器综合讲解(Av333129672,P4)

5.方法区和本地方法栈讲解(Av333129672,P5)
在这里插入图片描述
方法区
静态常量

本地方法栈
native 标示的 c++实现的一些方法,像那个thread.start里面有个start0就是
6.堆内存讲解(Av333129672,P6)
老年代,新生代(eden survior1 survior2=8 1 1 )
演示了jvisualvm,可视化了堆内存的变化。启动就直接监听当前执行的线程。
7.阿里内部jvm调优工具arthas详解(Av333129672,P7)
这个工具好呀,不用jstack了
启动之后,有dashboard,用以查看整个进程的运行情况,输入thread +线程id。直接定位到cpu占用出问题的地方。
还可以jad + com.xx.xx类 可以反编译成java代码,就不用因为线上代码问题,扯皮了。
8.jvm垃圾收集机制详解(Av333129672,P8)
字节码执行引擎来执行一个gc线程
触发minor gc。eden区-》s1,之后就是eden和s1 根据可达性算法,回收那些非可达的资源。把用可达性算法走的链路上的资源移动到s2.同时年龄加1。
年龄15了,移动到old。old也满了,触发full gc。STW stop the world。
why need STW
STW stop the world的存在意义。如果没有这个东西,那么前面gc线程去标识为非垃圾资源的对象,可能因为(没有stw机制)用户线程执行完任务,释放了栈帧资源,导致那些非垃圾资源的对象变为了垃圾。那就需要重新去全局扫描。这显然不合适,所以需要stw。

9.电商系统jvm参数调优实战(Av333129672,P9)
这里诸葛老师讲了一个实战,切实的体会到了 计算资源还有线上场景之间的关系。怎么算,
在这里插入图片描述
单机百万级请求。每条请求1kb,每秒100条请求。

除了年龄到达15会直接移动到old,还有大文件也会直接移动到old,还有就是底层的 动态年龄机制,像大小如果大于s1的50%,就直接移动到old。
调优其实就是为了一件事——减少full gc。因为full gc 会stw,会导致用户端的使用,会降低吞吐量,会一卡一卡的。
10.阿里面试题:能不能对java虚拟机调优,让其几乎不发生full gc(Av333129672,P10)
调大eden区,使得那些过两三秒就变垃圾的对象在minor gc就解决掉。
11.垃圾收集器cms、g1、zgc讲解(Av333129672,P11)
在这里插入图片描述

垃圾收集器都是为了 解决不同业务场景出现的,在不考虑垃圾回收器的情况下,先想想能不能通过那些参数来解决问题。然后考虑出来了,就知道那些垃圾回收器是怎么来的了。(不当谜语人,其实就是eden区变大了,但你不能和以前一样,满了之后在minor gc,那时间虽然短,但也长)所以就分块。
提到了G1的关键,目标暂停时间, maxGcPauseMillions设置之后,对eden区的回收就不会整体回收了,而是在过程中通过算法计算回收的时间,如果达到目标最大时间,那么就进行分块回收。(虽然不会节约时间,可是分散了时间,用户感知没那么明显)
12.动手实战优化自己公司线上系统jvm(Av333129672,P12)
13.动手实战优化自己公司线上系统jvm(Av333129672,P13)
一个小时的广告
14.cpu多核并发缓存架构(Av333129672,P14)
cpu速度越来越快,内存速度没改变(但显的慢了),在其中加个cpu缓冲区(和cpu速度差不多)。
在这里插入图片描述

15.java多线程内存模型讲解(Av333129672,P15)
类似cpu多和并发缓存架构。
在这里插入图片描述
把要用的东西复制到自己那里一份。
每个线程自己有一个工作内存,然后把主内存里面的变量复制到自己的工作内存里面,然后处理。
16.内存模型底层八大原子操作与缓存一致性协议(mesi)(Av333129672,P16)
在这里插入图片描述

read
load
write
store
保证底层可见性的原理就是这
在这里插入图片描述

17.volatile可见性底层原理(Av333129672,P17)
lock 如果lock了(加了volatile),就马上直接写回主内存。同时总线开启缓存一致性协议,然后其他的线程开始嗅探。如果发现资源发生改变了,立马让自己的失效,从而达成 可见性。
unlock
查看汇编
在这里插入图片描述

18.cpu指令重排(Av333129672,P18)
cpu会对指令进行优化,以他认为快速的方式去执行。
在这里插入图片描述

19.as-if-serial与happens-before原则详解(Av333129672,P19)
as-if-serial,如果在单线程下执行结果不变,那么就是可以交换的。(也只能是单线程,多线程的依赖关系太复杂了)
后面提到了一个规范,happens-before,也是用来应对这个情况的。(其中有 unlock必须在下一个lock之前;volitle的写必须在读之前)
20.双重检测锁dcl指令重排问题剖析(Av333129672,P20)
单例模式,
在这里插入图片描述

提到了hotspot底层的对象新建过程。
在这里插入图片描述

类加载检查(去常量表里面查看,如果没有就加载,然后分配)
分配内存(默认的指针碰撞,如果是有序的,空闲和非空闲不是在一起的,移动指针就可以起到划分内存了;如果不是有序的,则为一张表,然后从表中找到连续的内存来分配)
初始化为默认值
然后设置对象头(锁标记等等)
最后赋值,构造方法init

半初始化:(构造对象时,构造代码被重排序了,单线程内部没影响)还没有赋值呢,只是构造器初始化了一下,然后不为null了,就导致其他的 线程去使用了。

21.深入hotspot源码讲解jvm内存屏障(Av333129672,P21)
在这里插入图片描述

java定义的规范如上,底层实现呢就是在汇编那里加个lock指令实现的。
在这里插入图片描述

22.java多线程与并发编程技术图谱解析(Av333129672,P22)
这么整理自己的offer(图出现在1:00:00地方)
在这里插入图片描述

23.从hotspot源码看下并发同步原语设计机制(Av333129672,P23)

24.讲透无锁、偏向锁、轻量级锁、重量级锁(Av333129672,P24)

使用原子操作类优化那些 sychronized。

互斥锁、悲观锁、同步锁、重量级锁
线程阻塞,上下文切换,操作系统线程调度(休眠,唤醒)。

sychronized
jdk1.6之前 阻塞队列、等待队列、monitor、互斥量

无锁、自旋锁、轻量级锁、乐观锁
CAS compareAndSet/swap

25.从汇编底层深度理解cas机制(Av333129672,P25)
在这里插入图片描述
CAS底层,也是比较交换,但我们默认他就是原子的。
在这里插入图片描述

26.cas机制与aba问题(Av333129672,P26)
原子性:cas在java这个层面是不加锁的,在汇编层面是使用lock加锁保证原子性的。就是我们把并发的任务串行化了,如果多了,就把缓存行锁加成总线锁。

aba:两个线程,一个执行特别快, 在我用之前,就已经用了并且把样子还原了。 但事实已经改变了。 automicStamp 引入版本号。
在这里插入图片描述

27.Synchronized底层的锁优化机制(Av333129672,P27)
因为锁还是为了应对特殊情况,但特殊情况的发生频率不是很高的时候,就严重拖满了效率。
所以1.6之后就优化。

无锁
偏向锁(只有一个线程,对象头存入线程id,如果是,就继续执行)
锁升级
轻量级锁(多个线程cas,竞争自旋,CPU打满)
重量级锁(重度竞争)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果大量线程来加轻量级锁,大量的空转会消耗cpu打满,那还不如加重量级锁。

28.从hotspot底层对象结构理解锁膨胀升级过程(Av333129672,P28)
在这里插入图片描述
8个字节,如果大小不能整除8,则利用对其填充补齐。
在这里插入图片描述

在这里插入图片描述

001
101
00
10
11(gc)
在这里插入图片描述
打印对象组成结构

在这里插入图片描述
看里面的注释,因为默认设定了4s之后启动偏向锁。所以第二个对象新建之后就是偏向锁。同时如果不配置,则直接到轻量级锁。
偏向锁不会释放(就是为了保证后面比较线程id)
在这里插入图片描述
在这里插入图片描述

29.深入jdk源码理解longadder的分段cas优化机制(Av333129672,P29)
只是两个竞争就变成重量级锁了吗——分段cas优化来解决(还在研究)
后面都是广告
30.bat大厂高并发项目锁优化最佳实践(Av333129672,P30)
广告
31.jvm主要组件讲解(Av333129672,P31)
换老师了
在这里插入图片描述

32.程序计数器与java虚拟机栈讲解(Av333129672,P32)

33.堆空间、方法区、jvm执行引擎工作原理讲解(Av333129672,P33)

34.jvm如何创建一个对象(Av333129672,P34)
在这里插入图片描述
要先复制一个,然后再创建。在这里插入图片描述

35.jvm垃圾收集算法讲解(Av333129672,P35)
在这里插入图片描述
线程栈本地方法表,本地方法栈引用的对象,方法区里面的静态、常量引用的对象。

36.对象内存分配流程讲解(Av333129672,P36)
在这里插入图片描述(多线程)对象直接在eden私有空间里面进行分配,也不用去 碰撞指针了。

37.内存泄漏与内存溢出问题剖析(Av333129672,P37)
docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABHDAB
可以在这个网址看各种jvm的设置
jps 看进程号
jinfo +进程号,可以看参数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以利用visualGJVM在这里插入图片描述工具来看

这个是OOM
在这里插入图片描述
底下是leak

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

38.常见的jvm面试问题解析(Av333129672,P38)
广告
39.Class类文件核心结构剖析(Av333129672,P39)
到48讲都是 看字节码。看不来。
40.jvm常量池详细讲解(上)(Av333129672,P40)

41.jvm常量池详细讲解(下)(Av333129672,P41)

42.从字节码底层分析This和New关键字原理(上)(Av333129672,P42)

43.从字节码底层分析This和New关键字原理(下)(Av333129672,P43)

44.jvm方法区线上调优解析(Av333129672,P44)

45.判断可回收垃圾对象(Av333129672,P45)

46.引用计数法解析(Av333129672,P46)

47.可达性分析算法解析(Av333129672,P47)

48.jvm垃圾回收算法深度剖析(Av333129672,P48)

49.常用垃圾收集器解析(Av333129672,P49)
在这里插入图片描述

50.jvm内存模型深度剖析(Av333129672,P50)
老年代满了,但发现对象都是被引用的,干不掉,就OOM了

51.jvm垃圾回收调优工具使用详解(Av333129672,P51)

52.g1与zgc垃圾回收器剖析(Av333129672,P52)
JDK8 默认的是PS PO
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
白的是正常执行的,黑的是阻塞了。
小明妈妈一边整理垃圾,小明一边扔垃圾。
类装载系统
young gc stw时间很短

ps pold
serial serialold
parNew CMS
对于年轻代都是复制,对于老年代,除了特殊的CMS以外是标记清除,都是标记整理。
CMS
浮动垃圾 错标
只标第一个,后面再慢慢标记。
为了解决STW太长
53.百万级交易系统jvm内存调优实战(Av333129672,P53)
哈哈哈,老师举的例子前面诸葛老师也举过,厚面都是广告了。
54.从java.exe开始讲透Java类加载全过程(Av333129672,P54)

55.类加载底层详细流程以及双亲委派机制介绍(Av333129672,P55)

56.从jdk源码级别剖析jvm核心类加载器(Av333129672,P56)

57.从jdk源码级别剖析类加载双亲委派机制(Av333129672,P57)

58.双亲委派机制详解以及面试题讲解(Av333129672,P58)

59.手写自定义类加载器打破双亲委派机制(Av333129672,P59)

60.tomcat类加载机制深度剖析(Av333129672,P60)

61.互联网公司类加载机制核心面试点解析(Av333129672,P61)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法回答关于图灵课堂诸葛老师的redis实战笔记的问题。因为在提供的引用内容中,并没有提到图灵课堂诸葛老师的redis实战笔记。请提供更多相关信息,我将尽力帮助您。 #### 引用[.reference_title] - *1* [Redis主从,哨兵架构简单搭建](https://blog.csdn.net/weixin_38192427/article/details/120577106)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [B站最全Redis教程全集(2021最新版)(图灵学院诸葛)学习笔记一--五种数据结构与应用场景](https://blog.csdn.net/qq_31135607/article/details/117852917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [图灵最强诸葛老师最新分享:分布式服务框架原理与实践.pdf篇](https://blog.csdn.net/m0_67322837/article/details/123924158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值