年薪30W的Java程序员都要求熟悉JVM与性能调优!

news2024/11/24 1:35:24

一、JVM 内存区域划分

1.程序计数器(线程私有)

程序计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当 CPU 需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。也就是说是用来指示执行哪条指令的。

由于在 JVM 中,多线程是通过线程轮流切换来获得 CPU 执行时间的,因此,在任一具体时刻,一个 CPU 的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么说,程序计数器是每个线程所私有的。

在 JVM 规范中规定,如果线程执行的是非 native 方法,则程序计数器中保存的是当前需要执行的指令的地址;如果线程执行的是 native 方法,则程序计数器中的值是 undefined。

由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。

异常情况:

不存在

2.Java 栈(线程私有)

3.本地方法栈(线程私有)

4.堆(线程共享)

5.方法区(线程共享)

6.直接内存(线程共享)

二、JVM 执行子系统

1.Class 类文件结构

1.1 Java 跨平台的基础

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联,Class 文件中包含了 Java虚拟机指令集和符号表以及若干其他辅助信息。

1.2 Class 类的本质

任何一个 Class 文件都对应着唯一一个类或接口的定义信息,但反过来说,Class 文件实际上它并不一定以磁盘文件的形式存在。Class 文件是一组以 8 位字节为基础单位的二进制流。

1.3 Class 文件格式

各个数据项目严格按照顺序紧凑地排列在 Class 文件之中,中间没有添加任何分隔符,这使得整个 Class 文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。Class 文件格式采用一种类似于 C 语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表。

无符号数属于基本的数据类型,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照 UTF-8编码构成字符串值。

表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“_info”结尾。表用于描述有层次关系的复合结构的数据,整个 Class 文件本质上就是一张表。

2.字节码指令

2.1 加载和存储指令

2.2 运算或算术指令

2.3 类型转换指令

2.4 创建类实例的指令

2.5 创建数组的指令

2.6 访问字段指令

2.7 数组存取相关指令

2.8 检查类实例类型的指令

2.9 操作数栈管理指令

2.10 控制转移指令

2.11 方法调用指令

2.12 方法返回指令

2.13 异常处理指令

2.14 同步指令

3.类加载机制

4.类加载器

4.1 系统的类加载器

4.2 双亲委派模型

5.Tomcat 类加载机制

6.方法调用详解

6.1 解析

6.2 静态分派

6.3 动态分派

6.4 基于栈的字节码解释执行引擎

三.垃圾回收器和内存分配策略

1.Java 中是值传递还是引用传递?

2.引用类型

3.基本垃圾回收算法

3.1.1 引用计数(Reference Counting):

比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为 0 的对象。此算法最致命的是无法处理循环引用的问题。

3.1.2 可达性分析清理

标记-清除(Mark-Sweep):此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。

复制(Copying): 此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。

标记-整理(Mark-Compact):此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,清除标记对象,并未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。

3.1 按照基本回收策略分

3.2 按分区对待的方式分

3.3 按系统线程分

4.分代处理垃圾

5.JAVA 中垃圾回收 GC 的类型

四、编写高效优雅 Java 程序

1.面向对象

1.1 构造器参数太多怎么办?

用 builder 模式,用在

(1)5 个或者 5 个以上的成员变量

(2)参数不多,但是在未来,参数会增加

Builder 模式:

属于对象的创建模式,一般有

(1)抽象建造者:一般来说是个接口,包含

1)建造方法,建造部件的方法(不止一个)

2)返回产品的方法

(2) 具体建造者

(3) 导演者,调用具体的建造者,创建产品对象

(4)产品,需要建造的复杂对象

对于客户端,创建导演者和具体建造者,并把具体建造者交给导演者,然后由客户端通知导演者操纵建造者进行产品的创建。

在实际的应用过程中,有时会省略抽象建造者和导演者。

1.2 不需要实例化的类应该构造器私有

1.3 不要创建不必要的对象

1.4 避免使用终结方法

1.5 使类和成员的可访问性最小化

1.6 使可变性最小化

1.7 复合优先于继承

1.8 接口优于抽象类

2.方法

2.1 可变参数要谨慎使用

2.2 返回零长度的数组或集合,不要返回 null

2.3 优先使用标准的异常

3.通用程序设计

五、性能优化

一个 web 应用不是一个孤立的个体,它是一个系统的部分,系统中的每一部分都会影响整

个系统的性能

1.常用的性能评价/测试指标

1.1 响应时间

提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。

常用操作的响应时间列表:

1.2 并发数

同一时刻,对服务器有实际交互的请求数。

和网站在线用户数的关联:1000 个同时在线用户数,可以估计并发数在 5%到 15%之间,也就是同时并发数在 50~150 之间。

1.3 吞吐量

对单位时间内完成的工作量(请求)的量度

1.4 关系

系统吞吐量和系统并发数以及响应时间的关系:

理解为高速公路的通行状况:

吞吐量是每天通过收费站的车辆数目(可以换算成收费站收取的高速费),并发数是高速公路上的正在行驶的车辆数目,响应时间是车速。车辆很少时,车速很快。但是收到的高速费也相应较少;

随着高速公路上车辆数目的增多,车速略受影响,但是收到的高速费增加很快;

随着车辆的继续增加,车速变得越来越慢,高速公路越来越堵,收费不增反降;

如果车流量继续增加,超过某个极限后,任务偶然因素都会导致高速全部瘫痪,车走不动,当然后也收不着,而高速公路成了停车场(资源耗尽)。

2.常用的性能优化手段

2.1 避免过早优化

2.2 进行系统性能测试

2.3 寻找系统瓶颈,分而治之,逐步优化

2.4 前端优化常用手段

3 应用服务性能优化

3.1 缓存

3.1.1 缓存的基本原理和本质

3.1.2 合理使用缓冲的准则

3.1.3 分布式缓存与一致性哈希

3.2 异步

3.2.1 同步和异步,阻塞和非阻塞

3.2.2 常见异步的手段

3.3 集群

3.4 应用相关

3.4.1 代码级别

3.4.2 并发编程

3.4.3 资源的复用

3.4.4 JVM

3.4.5 GC 调优

3.4.6 调优实战

3.4.7 存储性能优化

上面的这些问题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。

关于JVM与性能调优总结了将近50页pdf文档,欢迎关注我的公种浩:程序员追风,获取这些整理的资料!

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

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

相关文章

自动化测试 | 窗口截图

driver.get_screenshot_as_file 是 Selenium WebDriver 的一个方法,它允许你将当前浏览器窗口(或标签页)的截图保存为文件。这个方法对于自动化测试中的截图验证非常有用,因为它可以帮助你捕获测试执行过程中的页面状态。 以下是…

EcoVadis认证内容有哪些?EcoVadis认证申请流程?

EcoVadis认证是一个国际性的可持续发展评估平台,旨在帮助全球企业和供应链评鉴其在环境、社会和治理(ESG)方面的表现。该认证框架由法国的检验、认证和检测机构必维集团(Bureau Veritas)创建,得到了众多跨国…

python34_可变字符串

可变字符串 说明 在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,智能创建新的字符串对象。 但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO对象或 array 模块impo…

光伏开发:一充一放和两充两放是什么意思?

一充一放 一充一放是指储能设备在一次充电过程中充满电,并在一次放电过程中将电能全部释放。这种模式的原理相对简单,充电时电能转化为化学能或其他形式的能量储存,放电时则将这些能量转化回电能供应给负载。一充一放模式适用于对储能设备充…

国家医保局印发《长期护理保险专家库管理暂行办法》

银发经济『新趋势大数据』 AgeNews 每日银发产业大事件速览 2024-10-10 星期四 AgeClub整理 国家医保局印发《长期护理保险专家库管理暂行办法》 北京出台《关于加强“老老人”服务保障的若干措施》 《2024全景生态流量秋季报告》:茶饮、生鲜市场均迎来70后扩…

【有啥问啥】 群体智能(Swarm Intelligence):从自然到人工智能的深度探索

群体智能(Swarm Intelligence):从自然到人工智能的深度探索 什么是群体智能? 群体智能(Swarm Intelligence)是一个迷人的研究领域,它专注于社会性生物(如蚂蚁、蜜蜂、鸟类等&#…

uniapp学习(004-1 组件 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第26p-第p30的内容 文章目录 uniapp和vue差异对比写几个组件并且引用props传值添加类型约束约束类型并且添加默…

JVM性能调优-JVM工具使用

命令行工具 jps jps -q 只看进程id jps -l 显示java进程的完整类名 jps -m 查看传递给主类main()的参数 jps -v 列出虚拟机启动时的jvm参数 以上参数可以组合使用 jstat 查看JVM统计信息 例:jstat -gc -t 19788 1000 10 -gc:打印gc统计信息 ;-t&am…

使用激光跟踪仪提升码垛机器人精度

标题1.背景 码垛机器人是一种用于工业自动化的机器人,专门设计用来将物品按照一定的顺序和结构堆叠起来,通常用于仓库、物流中心和生产线上,它们可以自动执行重复的、高强度的搬运和堆垛任务。 图1 码垛机器人 传统调整码垛机器人的方法&a…

王松绿读《归潮》:岭南文化根脉中流动的文学镜像

王松绿 ,生于河南。后于琼从军为文近二十载。现居三亚。 岭南文化根脉中流动的文学镜像 王松绿 小说《归潮》,打破了作者陈崇正向来善于营造的多重宇宙和多线叙事的阅读迷障,故事角色与作者一起,实现了叙事方式、故事内容…

跨平台游戏的特点

跨平台游戏已成为视频游戏行业的主要趋势,这是由于对各种设备和操作系统之间无缝游戏的需求日益增长。这种方法允许玩家在多个平台(如游戏机、PC和移动设备)上享受他们最喜欢的游戏,同时保持相同的体验和进度。随着越来越多的开发…

SpringBoot开发部署(热部署+常规部署+Docker部署)

开发热部署 SpringBoot模板引擎的页面默认是开启缓存的,如果修改了页面,则刷新页面是得不到修改后的页面的 在application.properties中关闭模板引擎缓存 Thymeleaf spring.thymeleaf.cachefalseFreeMarker spring.freemarker.cachefalseGroovy spring…

Android -- [SelfView] 自定义多色渐变背景板

Android – 自定义多色渐变背景板 前言: Android 自带的 xml 文件内 gradient 设置渐变最多只有三种颜色,使用方便但范围受限,不能很好满足各种需求; 本款多色渐变背景板应运而生:* 1. 支持圆角模式,矩形模…

同望OA tooneAssistantAttachement.jsp 任意文件读取漏洞复现

0x01 产品简介 同望OA,即同望科技打造的智企云协同管理系统,是一款高效的企业协同移动办公系统。秉承“互联网++企业管理”理念,定位于以移动互联办公为基础的企业协同管理软件平台。它旨在通过内置常用标准模块与专项管理模块应用,安全快速地打通管理与业务通道,实现管理…

微软最新 Office 办公软件2025下载 – Microsoft 365 正版优惠订阅

​ 以前 Office 365 是微软打造的「办公软件订阅」服务。订阅后,用户可以在多个平台使用Word、Excel、PowerPoint、OneDrive云存储网盘等正版办公应用。 微软希望这种订阅方式能够推广到更多的产品和用户,于是决定将 Office 365 升级为全新的「Microsoft…

【数据结构】6道经典链表面试题

目录 1.返回倒数第K个节点【链接】 ​代码实现 2.链表的回文结构【链接】 代码实现 3.相交链表【链接】 代码实现 4.判断链表中是否有环【链接】 代码实现 常见问题解析 5.寻找环的入口点【链接】 代码实现1 ​代码实现2 6.随机链表的复制【链接】 代码实现 1.…

51单片机的无线通信智能车库门【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块红外传感器光照传感器时钟模块步进电机蓝牙按键、LED、蜂鸣器等模块构成。适用于智能车库自动门、无线控制车库门等相似项目。 可实现功能: 1、LCD1602实时显示北京时间和自动/手动模式,以及验证是否成…

盘点2024年双十一最值得入手的好物,双十一购物清单宝藏好物推荐

随着2024年双十一购物节的脚步逐渐临近,消费者们正摩拳擦掌,准备迎接这场年度最大的购物狂欢。在这个特别的日子里,各大品牌纷纷推出前所未有的优惠活动,各种好物琳琅满目,让人眼花缭乱,为了帮助大家在这海…

机器学习、深度学习评价指标汇总:TP、TN、FP、FN、AP、mAP、IoU、mAP@3、Prec@10、 Acc@10

系列文章目录 文章目录 系列文章目录一、真正例(True Positive)、假正例(False Positive)、真负例(True Negative)和假负例(False Negative)是评估分类模型性能的重要概念。1. 定义2…

基于多种机器学习的酒店客户流失预测模型的研究与实现

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍实现过程 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 项目背景: 在当今竞争激烈的酒店行业中,预测和防止客户流…