公开课学习——JVM虚拟机面试核心点与性能优化点

文章目录

      • jdk的体系结构图
      • Java语言的跨平台的特性,怎么实现的?
      • jvm内部组成呢?
      • pc的值怎么变得?
      • main方法的栈帧有一点点区别,Math()是new出来的,放在堆区,这个堆区的math和我们栈帧中的局部变量表什么关系?
      • 方法区(原空间)——常量,静态变量+类信息
      • 垃圾回收机制(gc)使用的算法——可达性分析算法
      • 调优工具——Arthas
      • STW——stop the world停掉用户线程(gc的时候会发生)
      • 为什么会设计STW机制?可以不要吗?
      • 案例
      • 单机几十万并发的系统JVM如何优化
      • 这里如何调优——借助垃圾收集器

在这里插入图片描述

jdk的体系结构图

在这里插入图片描述

Java语言的跨平台的特性,怎么实现的?

在这里插入图片描述
靠我们的Java虚拟机!

jvm内部组成呢?

在这里插入图片描述
调优主要是调内存区的。
new出来的对象放堆里,
栈(线程)放局部变量,自己独立使用
在这里插入图片描述
在这里插入图片描述
在一个线程中,每一个方法都有一个独立的栈帧内存空间。
线程栈里面存放的栈帧就是使用数据结构中的栈(FILO)存放的——和我们方法的嵌套调用的方法相吻合

栈帧内部除了放局部变量(放在局部变量表中)外,还会有其他的
在这里插入图片描述
pc是指向下一条指令,为什么需要这个pc呢?——多线程切换
当前线程执行的时候来了条优先级更高的指令,就要进行线程切换,这就是PC的作用。

pc的值怎么变得?

在这里插入图片描述
自增?NONONO。是由字节码执行引擎修改的。
动态链接作用——把符号引用转换成直接引用。
方法出口——方法的返回地址

main方法的栈帧有一点点区别,Math()是new出来的,放在堆区,这个堆区的math和我们栈帧中的局部变量表什么关系?

在这里插入图片描述
就是把堆中的地址放在栈中。
因为栈中有很多的局部变量,他们放在堆中,把堆中的地址放在栈中。——栈和方法区的关系

方法区(原空间)——常量,静态变量+类信息

new出来的对象还是要放在堆中,把地址放在方法区——方法区和堆之间的关系
在这里插入图片描述
在这里插入图片描述
粉色的是私有的,黄色的是共享的
在这里插入图片描述
在这里插入图片描述

垃圾回收机制(gc)使用的算法——可达性分析算法

在这里插入图片描述
非垃圾对象会被复制一份放到survivor区
内存的动态分配图
第二次垃圾回收,他们都存活着,那就继续复制
在这里插入图片描述
一个对象刚开始放在Edgn中,如果是垃圾就在Edgn中回收,如果继续存活,就放在年轻代中,在年轻代的存活周期就是在S0和s1中挪来挪去,超过15次,年轻代也放满了之后,就放到老年代,进行ygc
在这里插入图片描述
老年代如果也放满了就OOM(内存溢出)

调优工具——Arthas

在这里插入图片描述
下载这个arthas-boot.jar包

功能强大,能直接定位到死锁的代码位置,也可以在生产环境中直接修改变量的值,直接查看代码……

STW——stop the world停掉用户线程(gc的时候会发生)

gc一定程度对网站性能有影响——是因为STW——所以调优的根本目的是减少STW的发生

为什么会设计STW机制?可以不要吗?

蚂蚁金服一面,如果没有他,假如在gc执行的时候,没有STW,这时候一个用户线程执行结束了,那些原本是非垃圾的对象就变成了垃圾对象,就把gc整懵逼了。
所以有了STW,gc执行的时候,用户线程不会执行,对象是不是垃圾就确定了。

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
14s就放满了,假如在13s有线程在minor gc的时候没结束,依旧存活,那要放在S0,但不一定放在S0,有可能放在老年代。

大对象会直接放在老年代
在这里插入图片描述
假设每一次minor gc都有60M放进去,一会就满了,发生full gc
在这里插入图片描述
但这些一会就要成垃圾了,不应该放在老年代(老年代主要放长久存活的那些)。
那有没有办法解决这个问题呢?
当然可以,比如把年轻代调大,调整一下内存区的比例,在并发压力不是特别大的情况下,老年代很久很久才会发生full gc

单机几十万并发的系统JVM如何优化

kafka, rocketmq都可以抗住每秒10万的并发的。
如果使用这些一定要优化JVM的。
在这里插入图片描述

这里如何调优——借助垃圾收集器

在这里插入图片描述
后面广告太多,没在听啦

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

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

相关文章

37-代码测试(下):Go语言其他测试类型及IAM测试介绍

。 Go中的两类测试:单元测试和性能测试。 我就来介绍下Go 语言中的其他测试类型:示例测试、TestMain函数、Mock测试、Fake测试等, 示例测试 示例测试以Example开头,没有输入和返回参数,通常保存在example_test.go…

屏幕距离识别加语音提醒

效果 QQ录屏20240406131651 语音播放 import pygame pygame.mixer.init() #初始化 pygame.mixer.music.load(r"7359.wav") #文件位置 pygame.mixer.music.play(1) #播放语音 while pygame.mixer.music.get_busy(): # 在音频播放为完成之前不退出程序pass 完…

Session

文章目录 1.Session基本介绍1.Session有什么用?2.Session基本原理3.Session可以做什么?4.如何理解Session?5. Session基本使用 2.Session底层机制1.示意图2.创建session底层机制1.有sessionid,但没session对象1.由于访问了jsp的主页面&#…

vue实现富文本编辑器的具体方法

可以实现富文本的插件:vue-quill-editor、editor-for-vue 我们以 editor-for-vue 为例实现: 传送门:wangEditor官网地址 安装: npm install wangeditor/editor --save npm install wangeditor/editor-for-vue --save具体使用方…

分布式锁的原子性问题

4.6 分布式锁的原子性问题 更为极端的误删逻辑说明: 线程1现在持有锁之后,在执行业务逻辑过程中,他正准备删除锁,而且已经走到了条件判断的过程中,比如他已经拿到了当前这把锁确实是属于他自己的,正准备删…

【matlab非线性规划工具箱安装2 GloptiPoly 3.10工具箱】

【matlab非线性规划工具箱安装2 GloptiPoly 3.10工具箱】 该博客是非线性手眼标定代码中所依赖的matlab工具箱的安装内容,除了进行手眼标定以外,该工具箱还可以用于其他的非线性规划问题 在安装该工具箱之前请先安装SeDuMi 手眼标定传送门&#xff1a…

实验案例一:交换机的初始配置

1、实验环境 实验用具包括一台 Cisco 交换机,一台 PC,一根 Console 线缆。 2、需求描述 如图 5.17 所示,实验案例一的配置需求如下。 通过 PC 连接并配置一台 Cisco 交换机在交换机的各个配置模式之间切换将交换机主机的名称改为 BDON 3、…

上门服务小程序|上门服务系统|上门服务软件开发流程

在如今快节奏的生活中,上门服务小程序的需求越来越多。它们向用户提供了方便、高效的服务方式,解决了传统服务行业中的很多痛点。如果你也想开发一个上门服务小程序,以下是开发流程和需要注意的事项。 1、确定需求:在开始开发之前…

✌2024/4/3—力扣—整数反转

代码实现: int reverse(int x) {long num 0;while (x ! 0) {num num * 10 x % 10;x x / 10;}if ((int)num ! num) {return 0;}return (int)num; }

Spring Cloud微服务入门(五)

Sentinel的安装与使用 安装部署Sentinel 下载Sentinel: https://github.com/alibaba/Sentinel/releases Sentinel控制台 https://localhost:8080 用户和密码为sentinel 使用Sentinel 加依赖: 写配置: 输入: java -Dserver.po…

UI自动化测试-pytest框架

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Lua热更新(AssetBundle)

AssetBundle 新版本导入ab包报错,则删除其中的Tests文件夹。 给资源分组 打包设置:平台、路径、重复打包清空文件夹、复制到streaming文件夹 建议勾选 建议使用LZ4压缩方式 用来观察文件中的包大小,不常用 参数总结: 这六个只做了解,重要的是上面的

Struts2的入门:新建项目——》导入jar包——》jsp,action,struts.xml,web.xml——》在项目运行

文章目录 配置环境tomcat 新建项目导入jar包新建jsp界面新建action类新建struts.xml,用来配置action文件配置Struts2的核心过滤器:web.xml 启动测试给一个返回界面在struts.xml中配置以实现页面的跳转:result再写个success.jsp最后在项目运行 配置环境 …

【数据分享】我国第七次人口普查的100m分辨率人口栅格数据(免费获取\tif格式\2020年)

人口空间分布数据是我们在各项研究中经常使用的数据。之前我们分享过来源于LandScan数据集的2000-2022年的1km精度的人口空间分布栅格数据(可查看之前的文章获悉详情)! 相较于LandScan全球人口数据集,我国历次人口普查的数据对于…

SpringBoot通用模块--文件上传开发(阿里云OSS)

文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务,需要有存储的支持,那…

基于支持 GPT 的服务的初创公司

Kafkai:多语言长篇内容生成,AI写作的新趋势 介绍 随着生成式预训练 Transformer (GPT) 的出现,技术世界正在见证范式转变。 这种人工智能驱动的创新不仅仅是一种转瞬即逝的趋势,而是一种趋势。 它已成为科技行业的基石&#xff0c…

【C语言】简单介绍进制和操作符

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 本文简要介绍进制和操作符,愿能为您提供帮助!文章…

异常的种类

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 Oracle 运行时错误可以分为 Oracle 错误和用户自定义错误,与此对应,根据异常产生的机制和原理,可将 Oracle 的系统异常分为 3 种 预定义…

使用VPN时,Java程序无法访问远程网络的解决办法

应用场景: 电脑连接VPN之后,Java程序无法连接远程服务,比如第三方接口、远程数据库连接、远程微服务等。我个人遇到的情况有连接海康威视SDK,influxdb以及一些微服务。 解决办法: 启动Java时加入参数:-D…

比较好玩的车子 高尔夫6

https://www.sohu.com/a/484063087_221273 四万多如愿收获手动挡高尔夫6,可靠性、经济性、操控性兼顾_搜狐汽车_搜狐网 2.基本上其他人也不知道到底是什么相关的车子信息