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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【iOS逆向与安全】某音App直播间自动发666 和 懒人自动看视频

1.目标 由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就花了几分钟做了一个。 2.操作环境 越狱iPhone一台 frida m…

循环队列c语言版

一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…

身份证读卡器ubuntu虚拟机实现RK3399 Arm Linux开发板交叉编译libdonsee.so找不到libusb解决办法

昨天一个客户要在RK3399 Linux开发板上面使用身份证读卡器,由于没有客户的开发板,故只能用本机ubuntu虚拟机来交叉编译,用客户发过来的交叉编译工具,已经编译好libusb然后编译libdonsee.so的时候提示找不到libusb,报错…

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet,并在里面建立data_set文件夹用来保存数据集,在data_set文件夹下创建新文件夹"flower_data",点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…

交换机基础(四):MSTP负载均衡配置案例

如图所示是某个企业内部核心网络的结构图,目前企业中有20个VLAN, 编号为VLAN1~VLAN20, 为了确保内部网络的可靠性,使用 了冗余链路和MSTP 协议。为了能更好地利用网络资源和带宽,现管理员希望通过配置MSTP 的负载均衡实现网络带宽…

MySQL---表的增查改删(CRUD基础)

文章目录 什么是CRUD?新增(Create)单行数据 全列插入多行数据 指定列插入 查询(Retrieve)全列查询指定列查询查询字段为表达式起别名查询去重查询排序查询条件查询分页查询 修改(Update)删除&…

运维 | 使用 Docker 安装 Jenkins | Jenkins

运维 | 使用 Docker 安装 Jenkins | Jenkins 前言 本期内容主要是为了学习如何通过 Docker 安装Jenkins,仅作为记录与参考,希望对大家有所帮助。 准备工作 系统:CentOS 7.9配置:4c8g 快速安装 下面以 Docker 方式安装 Jenkin…

DCU上如何运行大模型以及用到的docker命令

第一步:需要连接到官方(https://developer.hpccube.com/)提供的vpn 第二步:通过termius进入到项目 第三步:遇到问题 1.docker空间太小了,得换地方:参考这个centos设置docker 目录_mob64ca12f73101的技术博客_51CTO博…

【Qt样式(qss)-5】qss混乱,错乱,不生效的一种原因

前言: 之前写过一些关于qss的文章: 【Qt样式(qss)-1】手册小结(附例:软件深色模式)_深蓝色主题qss表-CSDN博客 【Qt样式(qss)-2】使用小结(软件换肤&#…

算法、语言混编、分布式锁与分布式ID、IO模型

一、算法初识 数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构(数据的组织形式),写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题,使用不同的算法,也…

实验六:DHCP、DNS、Apache、FTP服务器的安装和配置

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置,在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接:linux安装jdk8详细步骤-CSDN博客 Jdk来源:linu…

【Docker】Docker学习之一:离线安装Docker步骤

前言:基于Ubuntu Jammy 22.04 (LTS)版本安装和测试 1、Docker安装 1.1、离线安装 步骤一:官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz步骤二:解压安装包; tar -zxvf docker…

java中的异常,以及出现异常后的处理【try,catch,finally】

一、异常概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…

光流法动目标检测

目录 前言 一、效果展示 二、光流法介绍 三、代码展示 总结 前言 动目标检测是计算机视觉领域的一个热门研究方向。传统的方法主要基于背景建模,但这些方法对于光照变化、遮挡和噪声敏感。因此,研究人员一直在寻找更加鲁棒和有效的技术来解决这一问题。…

IAR For ARM 安装教程

电脑环境 安装包下载 1、官网下载 ①搜索 IAR ②切换产品,选择Arm ③选择IAR Embedded Workbench for Arm ④免费试用 2、网盘下载 EWARM-CD-8202-14838.exe(访问密码: 1666) https://url48.ctfile.com/f/33868548-961057458-611638?p1666 软件下载 1、点击安…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Flask后端开发(一)-基础知识和前期准备

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…

13.4web自动化测试(Selenium3+Java)

一.定义 用来做web自动化测试的框架. 二.特点 1.支持各种浏览器. 2.支持各种平台(操作系统). 3.支持各种编程语言. 4.有丰富的api. 三.工作原理 四.搭环境 1.对照Chrome浏览器版本号,下载ChromeDriver,配置环境变量,我直接把.exe文件放在了jdk安装路径的bin文件夹下了(j…

LSM Tree 深度解析

我们将深入探讨日志结构合并树,也称为LSM Tree:这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构,例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…

分享10个创意满满的产品设计网站

在当今的互联网时代,新颖性和创造力是最受关注的,无论一个产品有多好,但没有创意的包装都很难“看到太阳”。因此,创意产品的设计非常重要,今天小将为您带来10个非常有创意的产品设计网站。话不多说,上干货…