公开课学习——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.mfbz.cn/a/529250.html

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

相关文章

B端:权限管理,远非增删改查审,一文告诉你细节。

增删改查审是B系统权限的常用功能,但绝非是全部功能,权限管理从属于用户管理体系,本文就详细分享权限管理都有啥,该如何设计。 一、什么是权限管理 B端的权限管理是指针对企业内部员工或合作伙伴的权限控制和管理。这包括对员工…

HarmonyOS 应用开发-使用colorPicker实现背景跟随主题颜色转换

介绍 本示例介绍使用image库以及effectKit库中的colorPicker对目标图片进行取色,将获取的颜色作为背景渐变色,通过swiper组件对图片进行轮播, 效果图预览 使用说明 直接进入页面,对图片进行左右滑动,或者等待几秒&a…

YOLOv5标签值含义根据标签将检测框色块替换(马赛克)

以一个检测人脸的图片为例: 检测后生成的标签txt如下, 此时,如何根据标签值将检测到的人脸同色块替换呢? 关键是获取检测框的左上角坐标和右下角坐标。 img Image.open(D:/PythonWokspace/JINX/datasets_transform/dataset/im…

MySQL-7.mysql约束

约束用于确保数据库中的数据满足特定的商业规则。 MySQL约束包含五种:not null、unique、primary key、foreign key、check 7.1 primary key 主键 字段名 字段类型 primary key 用于唯一的标识表的行数据,当定义主键约束后,该列不能重复。 pr…

赛氪网成为中国翻译协会理事单位

环球赛乐(北京)科技有限公司(赛氪网)正式成为中国翻译协会理事单位! 中国翻译协会,简称TAC,自1982年成立以来,始终致力于推动全国翻译事业的发展。作为一个由翻译工作相关的机关、企事业单位、社会团体及个…

第十课 Excel

最上方标题栏: 显示共工作薄名称,如果显示兼容模式是没有办法使用高级功能的。分辨高版本和低版本可以通过后缀名进行分辨;显示xlsx就是高版本工作薄,如果显示xls的话就是低版本工作薄了。如果同事老板都使用的是低版本的话我们发…

单点登录系统设计

一、介绍 token鉴权最佳的实践场景就是在单点登录系统上。 在企业发展初期,使用的后台管理系统还比较少,一个或者两个。 以电商系统为例,在起步阶段,可能只有一个商城下单系统和一个后端管理产品和库存的系统。 随着业务量越来…

openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警

文章目录 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 Plan Hint的结果会体现在计划的变化上,可以通过explain来查看变化。 …

transformer上手(1) —— transformer介绍

1 起源与发展 2017 年 Google 在《Attention Is All You Need》中提出了 Transformer 结构用于序列标注,在翻译任务上超过了之前最优秀的循环神经网络模型;与此同时,Fast AI 在《Universal Language Model Fine-tuning for Text Classificat…

MQ的延迟队列

1,场景 1.定时发布文章 2.秒杀之后,给30分钟时间进行支付,如果30分钟后,没有支付,订单取消。 3.预约餐厅,提前半个小时发短信通知用户。 A -> 13:00 17:00 16:30 延迟时间: 7*30 * 60 * …

【STL】顺序容器与容器适配器

文章目录 1顺序容器概述1.1array1.2forward_list1.3deque 2.如何确定使用哪种顺序容器呢?3.容器适配器的概念4.如何定义适配器呢? 1顺序容器概述 给出以下顺序容器表: 顺序容器类型作用vector可变大小的数组,支持快速访问&#…

Dev-C++详细安装教程及中文设置(附带安装包链接)

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍*************安装包链接在文章末尾***************** Dev-C详细安装教程…

指针 运算偏移

思维导图: 题目: 1.变量的指针,其含义是指该变量的 B 。 A)值 B)地址 C)名 D)一个标志 2.已有定义int k2;int *ptr1,*ptr2;且ptr1和ptr2均…

【实用工具】使用飞书机器人监控工程日志

1.创建一个飞书群聊,设置-->群机器人-->添加机器人-->自定义机器人-->修改机器人名称-->添加 2.复制webhook地址 3.编写日志请求代码 import logging import requests import json import os from datetime import datetime import time import sub…

机器-学习

获取数据数据处理特征工程机器学习模型调优 一:机器学习的定义 二:工作流程 三:工作流程解释 pandas numpy matplotlib 四:机器学习算法分类 4.1 监督学习 4.1.2 回归问题 目标值是连续的 4.1.2 分类问题 目标值是离散的 4.2…

软件测试面试真的很水的,不用焦虑

文档获取方式: 这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点击下方小卡片免费获取。

网工内推 | 深信服、宁德时代,最高20K招安全工程师,包吃包住

01 深信服科技 招聘岗位:安全服务工程师 职责描述: 1.负责现场安全服务项目工作内容,包含渗透测试、安全扫描、基线核查、应急响应等; 2.协助用户完成安全测试漏洞整改、复测工作; 3.为用户提供网络、主机、业务系统等…

Redis高级-分布式缓存

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 0.目标 1.Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)…

Mogdb双网卡同步最佳实践

大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时,我们都会对网卡做冗余考虑,比如使用双网卡,比如public、心跳网络。这样的目的主要是为了安全,避免淡点故障。当然也网卡Bond不仅是可以做主备还可以支持负载均衡…

蓝桥杯第十一届c++大学B组详解

目录 1.字符串排序 2.门牌制作 3.即约分数 4.蛇型填数 5.跑步锻炼 6.七段码 7.成绩统计 8.回文日期 9.字串分值和 10.平面切分 1.字符串排序 题目解析:这个题目真没搞懂。有会的大佬教我一下谢谢。 2.门牌制作 题目解析:出过超级多这类题目&am…
最新文章