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

news2024/11/25 3:53:04

文章目录

      • 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.coloradmin.cn/o/1580605.html

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

相关文章

SpringBoot之集成Redis

SpringBoot之集成Redis 一、Redis集成简介二、集成步骤2.1 添加依赖2.2 添加配置2.3 项目中使用 三、工具类封装四、序列化 (正常都需要自定义序列化)五、分布式锁 一、Redis集成简介 Redis是我们Java开发中,使用频次非常高的一个nosql数据库…

【频繁模式挖掘】Apriori算法(附Python实现)

一、实验内容简介 该实验主要使用频繁模式和关联规则进行数据挖掘,使用Apriori算法和Python语言来编写和设计程序,然后用不同规模的数据集来检验效果,最后分析和探讨实验结果,看其是否达到了理想的效果。 二、算法说明 关联规则…

2024年生成式人工智能的现状:进展、挑战与未来展望的深入分析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

wireshark抓包新手使用教程

Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

【C++航海王:追寻罗杰的编程之路】探寻实用的调试技巧

目录 1 -> 什么是bug? 2 -> 调试是什么?有多重要? 2.1 -> 调试是什么? 2.2 -> 调试的基本步骤 2.3 -> Debug和Release的介绍 3 -> Windows环境调试介绍 3.1 -> 调试环境的准备 3.2 -> 学会快捷键…

不牺牲算法,不挑剔芯片,这个来自中科院的团队正在加速国产AI芯片破局

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 不降低大模型算法精度,还能把芯片的算力利用效率提升 2~10 倍,这就是…

java swing毕业设计题目管理系统eclipse开发Mysql数据库CS结构java编程

一、源码特点 java swing毕业设计题目管理系统 是一套完善的窗体设计系统,对理解SWING java 编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。 应用技术:javamysql 开发工具&#xff…

杨笛一新作:社恐有救了,AI大模型一对一陪聊,帮i人变成e人

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 在社交活动中,大语言模型既可以是你的合作伙伴(partner)&#xff0…

SSL证书价格为什么差异如此大?

SSL证书市场品牌和种类众多,用户在选择证书的时候,也能随心所欲的购买到心仪的证书品牌类型。但是也有不少用户在选购的时候,也不禁有疑问:不同的证书品牌和类型为什么价格相差如此之大?确实,有的证书很便宜…

重磅来袭!2024CWE北京门窗幕墙展

CWE中国(北京)国际系统门窗及幕墙博览会 CWE China(Beijing)International System Doors Windows and Curtain Walls Expo 2024 年 8 月 29-31 日 北京,中国国际展览中心顺义馆 展会概况: 2024年CWE中国…

低代码开发平台推荐:国内超好用的十款实测评测

随着互联网技术的飞速发展,低代码平台逐渐成为企业数字化转型的利器。这类平台简化了开发过程,让非专业开发者也能参与到应用构建中来。本文将为您盘点国内十大低代码平台有:Zoho creator、,帮助您更好地选择适合自己企业的低代码…

【目标检测】-入门知识

1、回归与分类问题 回归问题是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树…

Win10系统下的EDGE浏览器启用IE模式

Win10系统下的EDGE浏览器目前已弃用IE内核,这样在访问某些较老的网站会有兼容性问题,本文记录了在EDGE浏览器中启用IE模式的操作方法。 一、启用EDGE浏览器的IE模式 要打开Internet Explorer模式,执行以下步骤: 1、在Microsoft Edge的地址栏…

同城O2O:开发外卖跑腿小程序的技术探索

当下,开发一款功能完善、用户体验良好的外卖跑腿小程序成为了很多互联网企业的首要任务。今天小编将从技术角度对开发外卖跑腿小程序进行探索,为开发者提供一些技术上的思路和方法。 1.技术选型 在开发外卖跑腿小程序时,选择合适的技术栈至关…

Docker使用— Docker部署安装Nginx

Nginx简介 Nginx 是一款高性能的 web 服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器,由俄罗斯开发者伊戈尔塞索耶夫(Igor Sysoev)编写,并在2004年10月4日发布了首个公开版本0.1.0。Nginx…

C++--运算符重载

运算符重载 在类中重新定义运算符,赋予运算符新的功能以适应类的运算,就称为运算符重载。 运算符重载是一种形式的C多态,它使得对象操作更直观,本质上也是属于函数重载。 实际上,我们已经在不知不觉之中使用了运算符重载。例如,加…

Facebook直播延迟过高是为什么?

在进行Facebook直播 时,高延迟可能会成为一个显著的问题,影响观众的观看体验和互动效果。以下是一些导致Facebook直播延迟过高的可能原因: 1、网络连接问题 网络连接不稳定或带宽不足可能是导致Facebook直播延迟的主要原因之一。如果您的网络…

Jackson 各种注解使用示例

参考资料 Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上,指定json对象属性名3.2 作用于entity方法上,指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…

限流的实现方式

1、tomcat 设置最大链接数 2、Nginx 漏桶算法 3、网关,令牌桶算法

Linux使用宝塔面板安装MySQL结合内网穿透实现公网连接本地数据库

文章目录 推荐前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…