【图灵诸葛】jvm笔记

news2024/11/15 19:53:59

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 )
演示了jvisualjvm,可视化了堆内存的变化。启动就直接监听当前执行的线程。
7.阿里内部jvm调优工具arthas详解(Av333129672,P7)
这个工具好呀,不用jstack了
启动之后,有board,输入线程id,可以反编译成java代码,就不用因为线上代码问题,扯皮了。
8.jvm垃圾收集机制详解(Av333129672,P8)
触发minor gc。eden区-》s1,之后就是eden和s1 根据可达性算法,回收那些非可达的资源。把用可达性算法走的链路上的资源移动到s2.同时年龄加1。
年龄15了,移动到old。old也满了,触发full gc。STW stop the world。

9.电商系统jvm参数调优实战(Av333129672,P9)
why need STW
STW stop the world。存在意义。如果没有这个东西,那么前面gc线程去标识为非垃圾资源的对象,可能因为(没有stw机制)用户线程执行完任务,释放了栈帧资源,导致那些非垃圾资源的对象变为了垃圾。那就需要重新去全局扫描。这显然不合适,所以需要stw。
除了年龄到达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)
垃圾收集器都是为了 解决不同业务场景出现的,在不考虑垃圾回收器的情况下,先想想能不能通过那些参数来解决问题
单机百万级请求。每条请求1kb,每秒100条请求。
12.动手实战优化自己公司线上系统jvm(Av333129672,P12)
提到了G1的关键,目标暂停时间, maxGcPauseMillions设置之后,对eden区的回收就不会整体回收了,而是在过程中通过算法计算回收的时间,如果达到目标最大时间,那么就进行分块回收。(虽然不会节约时间,可是分散了时间,用户感知没那么明显)

13.动手实战优化自己公司线上系统jvm(Av333129672,P13)

14.cpu多核并发缓存架构(Av333129672,P14)
cpu速度越来越快,内存速度没改变,在其中加个cpu缓冲区。
15.java多线程内存模型讲解(Av333129672,P15)
类似cpu多和并发缓存架构。
每个线程自己有一个工作内存,然后把主内存里面的变量复制到自己的工作内存里面,然后处理。
16.内存模型底层八大原子操作与缓存一致性协议(mesi)(Av333129672,P16)
read
load
write
store

17.volatile可见性底层原理(Av333129672,P17)
lock 如果lock了(加了volitel),就马上直接写回主内存。同时总线开启缓存一致性协议,然后其他的线程开始嗅探。如果发现资源发生改变了,立马让自己的失效,从而达成 可见性。
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)
单例模式,
提到了对象新建。
类加载检查(去常量表里面查看,如果没有就加载,然后分配)
分配内存(默认的指针碰撞,如果是有序的,空闲和非空闲不是在一起的,移动指针就可以起到划分内存了;如果不是有序的,则为一张表,然后从表中找到连续的内存来分配)
初始化为默认值
然后设置对象头(锁标记等等)
最后赋值,构造方法init
半初始化:(构造对象时,构造代码被重排序了,单线程内部没影响)还没有赋值呢,只是构造器初始化了一下,然后不为null了,就导致其他的 线程去使用了。
21.深入hotspot源码讲解jvm内存屏障(Av333129672,P21)
汇编那里加个lock指令实现的。
22.java多线程与并发编程技术图谱解析(Av333129672,P22)
这么整理自己的offer
在这里插入图片描述

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

24.讲透无锁、偏向锁、轻量级锁、重量级锁(Av333129672,P24)
互斥锁、悲观锁、同步锁、重量级锁
线程阻塞,上下文切换,操作系统线程调度(休眠,唤醒)。

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

无锁、自旋锁、轻量级锁、乐观锁
CAS compareAnd
25.从汇编底层深度理解cas机制(Av333129672,P25)

26.cas机制与aba问题(Av333129672,P26)
原子性:cas在java这个层面是不加锁的,在汇编层面是使用lock加锁保证原子性的。
aba:两个线程,一个执行特别快, 在我用之前,就已经用了并且把样子还原了。 但事实已经改变了。 automicStamp 引入版本号。
27.Synchronized底层的锁优化机制(Av333129672,P27)
无锁
偏向锁(只有一个线程,对象头存入线程id,如果是,就继续执行)
锁升级
轻量级锁(多个线程cas,竞争自旋,CPU打满)
重量级锁(重度竞争)

28.从hotspot底层对象结构理解锁膨胀升级过程(Av333129672,P28)
001
101
00
10
11(gc)
29.深入jdk源码理解longadder的分段cas优化机制(Av333129672,P29)

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)

38.常见的jvm面试问题解析(Av333129672,P38)

39.Class类文件核心结构剖析(Av333129672,P39)

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)
类装载系统
young gc stw时间很短

ps pold
serial serialold
parNew CMS
对于年轻代都是复制,对于老年代,除了特殊的CMS以外是标记清除,都是标记整理。
CMS
浮动垃圾 错标
只标第一个,后面再慢慢标记。
为了解决STW太长

50.jvm内存模型深度剖析(Av333129672,P50)

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

52.g1与zgc垃圾回收器剖析(Av333129672,P52)

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1125914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试框架之unittest使用详解!

这篇文章主要介绍了Python接口自动化浅析unittest单元测试原理,文中描述了单元测试,unittest模块特性、大致流程、源码及实战例子这几个模块,有需要的朋友可以借鉴参考下 以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是…

二叉树的各类实现判断二叉树的递归套路

如何判断一颗二叉树是否是搜索二叉树? 搜索二叉树 每个子树头节点的左孩子比它小,右孩子比它大 经典的搜索二叉树没有重复的数 判断 将二叉树按照中序遍历,判断是否为升序 1、先将整棵树中序遍历再判断是否升序 //中序遍历public stat…

如何获取ABAP的程序事件顺序的调用堆栈

难道有激情总结下之前做过的事情,话不多说直接上图 重点在于此函数 CALL FUNCTION SYSTEM_CALLSTACK IMPORTING ET_CALLSTACK L_CSTACK_TAB. " internal table

AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 梳理 AD9371 时钟,理解采样率和各个时钟之间的关系 …

【WCA-KELM预测】基于水循环算法优化核极限学习机回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

详解Windows系统下面如何查看CUDA、cuDNN、Python和各个软件包的版本

文章目录 简介查看CUDA版本查看cuDNN版本查看Python版本查看Python环境中已安装软件包的版本参考 简介 这个题目网络上有很多的讲解,但是查看CUDA、cuDNN版本和查看Python与自身各个软件包是分开的,且cuDNN版本的查看方式似乎已经过时【截止2023-10-23】…

测试面试必备:HTTP请求和响应详解!

一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同…

Windows新电脑安装环境快速运行Springboot项目

文章目录 简要步骤说明1、配置java运行环境2、配置maven环境3、下载git4、运行IDES Eclipse STS4.1 安装 lombok插件4.2 配置 maven setting.xml 地址4.3 配置 Java版本 5、顺利运行 Springboot项目 简要步骤说明 1、配置java运行环境 安装java11 2、配置maven环境 配置 setti…

【c++】遍历容器,哪一种方法速度最快?

终于有一个简单的每日一题!写完的时候甚至代码还没有编译结束!刚好借今天的每日一题探究一下一直以来的一些疑惑:容器的遍历。 题目大概是这样的: 我们一眼就看到了容器的遍历!!那么众所周知,容…

管理类联考——英语二——阅读篇——题材:经济

文章目录 2011 年,Text 2——题材:经济句意理解题-原词复现一般不选,但是要留意无中生有推断题-原词复现,注意是否“无中生有”“对象错误”“词意相反”推断题推断题主旨题-不了解阅读意思,很难做出选择 2011 年&…

R-CNN(CVPR2014)

文章目录 AbstractIntroductionObject detection with R-CNNModule designTest-time detection Visualization, ablation, and modes of errorSemantic segmentationConclusion 论文链接 源代码 Abstract 在经典PASCAL VOC数据集上测量的对象检测性能在过去几年中趋于稳定&…

MTK6737安卓核心板-MT6737核心板_4G安卓模块

MT6737核心板以竞争力的价格提供出色的性能和功耗效率,降低了BOM、GMO和内存成本,符合以价值为导向的市场需求。该核心板是一种先进的解决方案,为终端用户提供了高品质又经济实惠的体验。它与全球范围内的IMS兼容,支持VoLTE、ViLT…

【C++那些事儿】函数重载与C++中的“指针“——引用

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言,无疑是抽象且难度颇…

SparkSQL之LogicalPlan概述

逻辑计划阶段在整个流程中起着承前启后的作用。在此阶段,字符串形态的SQL语句转换为树结构形态的逻辑算子树,SQL中所包含的各种处理逻辑(过滤、剪裁等)和数据信息都会被整合在逻辑算子树的不同节点中。逻辑计划本质上是一种中间过…

面试时一些不能说的离职原因

“你为什么从上一家公司离职?”这个问题在面试时基本都会被问到,这是无法避免的问题。那么什么样的理由才能做到既反映实际情况,又能得到HR认可呢?以下的几种回答千万不能脱口而出。 1、毫无顾忌地说前公司的坏话 1)…

进阶JAVA篇- Map 系列集合的遍历方法与常用API

目录 1.0 Map 集合的说明 1.1 Map 集合的常用方法 1.2 Map 系列集合的特点 2.0 Map 系列集合的遍历方法(三种方法) 2.1 使用 keySet() 方法遍历 2.2 使用 entrySet() 方法遍历 2.3 使用 forEach() 方法遍历(Java 8) 1.0 Map 集合的…

数据结构与算法——选择排序法

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

镇魂街武神躯手游攻略,镇魂街武神躯神魂搭配

武神躯是《镇魂街》手游中令人敬畏的角色之一,技能的合理搭配至关重要。下面将详细介绍镇魂街武神躯手游攻略如何搭配武神躯的技能以取得最佳战斗效果: 关注【娱乐天梯】,获取内部福利号 1. 主动技能-刺客之心:这是武神躯的核心主…

python 桌面软件开发-matplotlib画图鼠标缩放拖动

继上一篇在 Java 中缩放拖动图片后,在python matplotlib中也来实现一个自由缩放拖动的例子: python matplotlib 中缩放,较为简单,只需要通过设置要显示的 x y坐标的显示范围即可。基于此,实现一个鼠标监听回调&#xf…

python安装的第三方库

安装第三方库的方式 先按“winR”并输入 cmd 打开命令运行窗口 输入命令: pip install 包名,比如要安装gym包就输入pip install gym 可能存在报错问题及解决办法 报错Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was …