当前位置: 首页 > news >正文

【图灵诸葛】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 )
演示了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)

相关文章:

【图灵诸葛】jvm笔记

2023年10月23日14:04:44 jvm 1.jdk体系结构图回顾(Av333129672,P1) jdk jre 底层是hotspot jvm 2.java虚拟机内部组成(Av333129672,P2) 堆 方法区 执行引擎 类加载 本地方法栈 线程栈(虚拟机栈) 3.java虚拟机栈讲解(Av333129672,P3) 程序计数器&#xf…...

数据安全小课堂开讲啦!看这里!

数据安全小课堂开讲啦!看这里! 1、什么是数据? 《数据安全法》第三条明确,本法所称的数据,就是指任何以电子或者其他方式对信息的记录。小到个人使用手机、电脑等电子产品时浏览的网页、下载的应用、存储的文件&…...

单片机矩阵键盘

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是矩阵键盘?1.独立键盘2.矩阵键盘变化1变化2变化3 3. 通过变型,举一反三,就可以实现4*4的矩阵键盘扫描 二、使用步骤…...

横坐标日期等间隔绘图 python示例代码

有两列数据,一列是日期,另一列是数值。日期是递增的,但是间隔不是均匀的。比如1月1日至2月1日有10组数据,2月1日至3月1日有100组数据,3月1日至4月1日有1000组数据。我想绘折线图,横坐标是日期,纵…...

photoshop2024免费插件Portraiture3

随着手机摄影的普及,修图可以说是现代人的必备生活技能之一了,现在谁发个朋友圈不把自己的照片修的美美的呢?那么如何拥有一张氛围感满满的照片呢?这不得不提图片处理软件中的王牌——photoshop。作为专业的图片处理软件&#xff…...

NewStarCTF2023week4-More Fast(GC回收)

打开链接,存在很多个类,很明显是php反序列化漏洞利用,需要构造pop链 , 关于pop链构造的详细步骤教学,请参考我之前的博客,真的讲得很详细也容易理解: http://t.csdnimg.cn/wMYNB 如果你是刚接…...

和鲸赞助丨第16届中国R会议暨2023 X-AGI大会通知

第16届中国 R 会议暨2023 X-AGI大会将于11月25-30日在中国人民大学召开,探讨数据科学和人工智能的相关进展,本次会议将采用线上会议和线下会议相结合的方式举办。 在过去的15年里,中国R会议一直致力于探讨数据科学在各学科、各行业的探索和实…...

Python第三方库 - Flask(python web框架)

1 Flask 1.1 认识Flask Web Application Framework( Web 应用程序框架)或简单的 Web Framework( Web 框架)表示一个库和模块的集合,使 Web 应用程序开发人员能够编写应用程序,而不必担心协议,线…...

c# sqlite 修改字段类型

因为sqlite不支持直接修改字段类型, 所以只能创建新的表,再将原始数据复制过去。具体操作步骤如下: 第一步, 将表“tableName”的名称修改为 “oldTable” string queryString string.Format("ALTER TABLE {0} RENAME TO …...

[Pytorch] 保存模型与加载模型

1、保存模型 # 定义模型 model BPNetModel(n_featuren_feature,n_hiddenn_hidden,n_outputn_output) #调用网络# 保存模型 torch.save(model, BPNetModel0.pth) 2、加载模型 import torch## 读取模型 model torch.load(BPNetModel0.pth) 3、保存模型参数 #调用网络 mode…...

AES解密报错,Input length must be multiple of 16 when decrypting with padded cipher

# 项目场景:对登录用户名、密码前端加密,后端解密失败 --- # 问题描述 在做login登录页面的用户名和密码加密时,前端加密后端解密,但是抛出`报错:Input length must be multiple of 16 when decrypting with padded cipher`,仔细检查过偏移向量,没有问题,但还是不行,…...

电子学会C/C++编程等级考试2023年05月(三级)真题解析

C/C等级考试&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&am…...

【2023_10_21_计算机热点知识分享】:机器学习中的神经网络

今天的分享主题是机器学习中的神经网络。神经网络是一种模拟人类神经系统的计算模型&#xff0c;它由一系列的神经元组成&#xff0c;每个神经元接收一组输入&#xff0c;经过计算后产生一个输出。神经网络的学习过程是通过调整神经元之间的连接权重来实现的&#xff0c;这个过…...

app开发者提升第四季度广告收入的方法

第四季度将迎来双十一、双十二、圣诞、元旦为主的电商购物季&#xff0c;这是一年中利用线上消费为全新年度和全新预算做好准备的最佳时机&#xff0c;从过往的变现成功案例中汇总了优化要点&#xff0c;帮助开发者在第四季度和未来一年获取更多广告收益。 https://www.shensh…...

#电子电器架构 —— 车载网关初入门

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数7000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他…...

系统工程利用计算机作为工具

系统工程利用计算机作为工具&#xff0c;对系统的结构、元素、&#xff08;18&#xff09;和反馈等进行分析&#xff0c;以达到最优&#xff08;19&#xff09;、最优设计、最优管理和最优控制的目的。霍尔&#xff08;A.D.Hall&#xff09;于1969年提出了系统方法的三维结构体…...

MathType7.4绿色和谐版数学公式编辑器

MathType 是一个功能强大、所见即所得的数学公式编辑器&#xff0c;可以在 Word、PowerPoint 等办公软件中轻松输入各种复杂的物理公式、化学方程式和符号。由 MathType 创建的公式能与 Office 文档完美结合&#xff0c;显示效果很好&#xff1b;MathType 可在任何支持 OLE 对象…...

JAVA代码审计-纵向越权漏洞分析

查看这个cms系统后台管理员 添加用户的页面 点击添加管理员 这个模块只有管理员拥有&#xff0c;普通用户没有这个模块。 打开源码分析是否存在越权漏洞。 ------------------------------------------------------------------------------------------------------------ …...

【PG】PostgreSQL逻辑备份(pg_dump)

目录 命令格式 连接选项 参数选项 使用举例 pg_dump是用于备份一种PostgreSQL数据库的工具。即使数据库正在被并发使用&#xff0c;它也能创建一致的备份。pg_dump不阻塞其他用户访问数据库&#xff08;读取或写入&#xff09;。 pg_dump只备份单个数据库。要备份一个集簇…...

JVM、JRE、JDK

JVM JVM&#xff08;Java Virtual Machine&#xff09;是Java虚拟机的缩写&#xff0c;他是Java编程语言运行时环境&#xff0c;负责执行Java字节码。另外作为JVM虚拟机&#xff0c;它在各种操作系统上提供统一的平台&#xff0c;这帮助Java应用程序可以独立于操作系统底层运行…...

02-性能方案设计

需求分析与测试设计 根据具体的性能测试需求&#xff0c;确定测试类型&#xff0c;以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通&#xff0c;初步确定压测方案及具体的性能指标QA完成性能测试设计后&#xff0c;需产出测试方案文档发送邮件到项目组&…...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)

React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#xff0c;详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#x…...

Linux实现线程同步的方式有哪些?

什么是线程同步&#xff1f; 想象一下超市收银台&#xff1a;如果所有顾客&#xff08;线程&#xff09;同时挤向同一个收银台&#xff08;共享资源&#xff09;&#xff0c;场面会一片混乱。线程同步就是给顾客们发"排队号码牌"&#xff0c;确保&#xff1a; 有序访…...

git删除本地分支和远程分支

删除本地分支 git branch -d 分支名删除远程分支 git push origin --delete 分支名...

01-VMware16虚拟机详细安装

官网地址&#xff1a;https://www.vmware.com/cn.html 1.1 打开下载好的 .exe 文件&#xff0c; 双击安装。 1.2 点击下一步 1.3 先勾选我接受许可协议中的条款&#xff0c;然后点击下一步 1.4 自定义安装路径&#xff0c;注意这里的文件路径尽量不要包含中文&#xff0c;完成…...

深入理解卷积神经网络:从原理到应用

在人工智能领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;无疑是计算机视觉领域的璀璨明珠。从 1998 年 Yann LeCun 提出 LeNet-5 实现手写数字识别&#xff0c;到 2012 年 AlexNet 在 ImageNet 大赛上创造历史性突破&#xff0c;CNN…...

高性能MYSQL:复制同步的问题和解决方案

一、复制的问题和解决方案 中断MySQL的复制并不是件难事。因为实现简单&#xff0c;配置相当容易&#xff0c;但也意味着有很多方式会导致复制停止&#xff0c;陷入混乱并中断。 &#xff08;一&#xff09;数据损坏或丢失的错误 由于各种各样的原因&#xff0c;MySQL 的复制…...

Elasticsearch 常用操作命令整合 (cURL 版本)

Elasticsearch 常用操作命令整合 (cURL 版本) 集群管理 查看集群健康状态 curl -X GET "localhost:9200/_cluster/health?pretty"查看节点信息 curl -X GET "localhost:9200/_cat/nodes?v"查看集群统计信息 curl -X GET "localhost:9200/_clus…...

408第一季 - 数据结构 - 栈与队列

栈 闲聊 栈是一个线性表 栈的特点是后进先出 然后是一个公式 比如123要入栈&#xff0c;一共有5种排列组合的出栈 栈的数组实现 这里有两种情况&#xff0c;&#xff0c;一个是有下标为-1的&#xff0c;一个没有 代码不用看&#xff0c;真题不会考 栈的链式存储结构 L ->…...

AI编程在BOSS项目的实践经验分享

前言 在人工智能技术革新浪潮的推动下&#xff0c;智能编程助手正以前所未有的速度重塑开发领域。这些基于AI的代码辅助工具通过智能提示生成、实时错误检测和自动化重构等功能&#xff0c;显著提升了软件工程的全流程效率。无论是初入行业的开发者还是资深程序员&#xff0c;…...