当前位置:网站首页>拿捏JVM性能优化(自己笔记版本)
拿捏JVM性能优化(自己笔记版本)
2022-08-04 03:10:00 【是老薛啊】
1.什么是JVM
是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机
为什么要进行优化JVM?
因为我们的java代码都是运行在jvm上面的,所以要让代码运行的效率很快,那就让jvm优化跑的快,所谓的优化也就是进行一些参数的配置
2.JVM的组成
从上图看可以大致看出大致有:
3类加载器子系统
是什么?
就是用于加载类的一个子系统而已
3.1关于类加载器子系统的加载过程(常见的一道面试题)
A加载----我(第一人称类加载器)先去寻到字节码文件然后进行读取在内存上面,我有两种加载的方式,方式一 ,隐式加载只要你是new去创建对象的,我就隐式的把对应的类加载到jvm里,方式二,显示加载我直接就通过class.forName()方法把这个类加载到jvm里
B验证---当我把这个类加载到jvm里的时候,我要验证这个字节码文件是不是真的字节码,我通过元数据,字节码,符号引用等进行验证
C准备--当验证完你是一个真正的字节码文件之后,我还会先去看看你的类里面有没有被static修饰的变量,有那我就先给你分配内存空间并且初始值设置为0或null,如果在这里你有自己的赋值,我在这里还是给你内存空间和初始值,因为第五步在赋值你自己的值,这里只是给你分配内存空间,如果你即有final和static修饰,那在这里就直接给你赋值
D解析--刚刚在进行验证的时候有进行符号引用验证,这里是把你类里面有些符号引用的(比如引用完全限定名)直接去引用
E初始化--对在准备阶段里面的一些变量进行初始化的赋值
3.2类的加载器有哪些
3.3加载的顺序:
4种加载器那他的加载顺序是怎么样的呢?
双亲委派:
大致意思是:一层一层进行使用类加载器,先从老大启动类加载器去寻找这个类有就加载,没有就到老二扩展类加载器进行寻找加载,有加载没有到老三应用类进行加载,有加载,无到自定义加载器加载,还有没有的话,就报ClassNotFountException错误。
为什么要这样呢?
为了安全,为了系统中的类不会被覆盖,优先加载到虚拟机上面,同时也保证了我们扩展我们的功能
4.运行时数据区
4.1程序计数器
注意:它不是用来计数的,它是用来确定指令的执行顺序,是唯一 一个jvm没有规定任何OOM的区块(所以不会发生内存溢出的区域)我的理解是好比是4x100的接力比赛,它就是每个选手之间指引,指引下一步的发生,通过程序计数器,将一个个选手完成接力,可以连接成一个完整的接力比赛,从而完成整个比赛的执行
包括任何的分支、循环、跳转、异常处理、线程恢复等操作都需要依赖于当前线程的程序计数器来指引
4.2虚拟机栈
每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,是线程私有的
虚拟机会为每个线程分配一个虚拟机栈,每个虚拟机栈中都有若干个栈帧,每个栈帧中都存储了局部变量表,操作数栈,动态链接,返回地址等
每个方法执行,伴随着进栈
方法执行结束后,伴随着出栈。
对于栈来说会有内存溢出的问题
本地方法栈和虚拟机栈其他一样,不同的点在于虚拟机栈执行的是java方法,本地方法栈执行的是本地方法(Native Method)
4.3方法区
方法区主要是来存储虚拟机架子啊的类信息,常量,静态变量,及一些编译之后的代码等,
在jdk1.3-1.6之间方法区是堆的一个逻辑部分
为了和堆的区分也叫永久性
在jdk1.7把原来在方法区里面的静态变量和字符串常量移到堆内存中
在jdk1.8之后方法区不存在,将原来的东西给移送到元空间,元空间没有存在于堆内存上,而已在本地的内存上
4.4堆空间
堆空间是一个所有的线程都共享的,存放对象的区域
5 垃圾回收机制-GC
5.1垃圾回收识别算法
因为不是所有的东西都是垃圾,所有要先进行识别是不是垃圾要进回收
A-引用计数算法(标记):
给每一个对象一个计数器,当有人用它的时候就在计数器上+1,当有一个地方不在使用它的时候就-1
弊端:如果是两个对象相互的引用,其他地方都没有在引用这两个对象,那就无法进行判断这两对象是否有用
B-可达性分析算法:
可达性算法是根据GC Root 的对象为起点出发 GC Roots是垃圾收集的起点,比如虚拟机栈里面的本地变量表中引用的对象,或者是方法去静态属性引用的对象,方法区中常量引用的对象,本地方法里的对象都可作为GC Root
当一个对象没有引用链直接或间接到GC Roots 说明这个对象为死对象可被回收
如图:D,E没有任何的引用链,所以会被回收
注意:虽然D E 没有到GC的引用链 但是当达成可达性分析算法时,会先判断对象是否执行了 finalize 方法,如果未执行,则会先执行 finalize 方法,我们可以在此方法里将当前对象与 GC Roots 关联,这样执行 finalize 方法之后,GC 会再次判断对象是否可达,如果不可达,则会被回收,如果可达,则不回收!(finalize 方法只会被执行一次)
5.2垃圾回收算法
A-标记清除
两步走:1.先把要进行清除的对象进行标记,2.把标记的对象进行清除
弊端:两个过程,效率不高,清除之后还有很多内存碎片不干净
B-复制算法
先把内存分为相等的内存空间A和B,当A的空间用完,把这侧的存活的对象复制到B,再把A的内存空间全部清理
弊端:实际使用的空间少一半
C-标记整理算法
先把可以用的对象进行标记,然后把所以被标记的对象向一段移动,最后清除可用对象边界以外的内存
D-分代收集算法
新生代使用minor gc 老年代使用full gc
E-Minor GC 和Full GC
Minor GC 是新生代使用的回收算法,这种回收很快,
Full GC 是老年代使用的回收算法,并且会伴随至少一次的Minor GC 这种的每次暂停时间比较长,
5.3常见的垃圾收集器
A-Serial 新生代收集器
采用复制算法进行垃圾收集,当在进行垃圾收集的时候,会使所以的线程必须暂停
B-ParNew 新生代收集器
是Serial的多线程的版本,基本和Serial一样,相比于Serial 它是尽可以去缩短所以线程的等待时间
C-Parallel Scavenge 新生代收集器
是多线程的收集器,它是尽可能去达成一个可控制的吞吐量,(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间))
D-Serial Old 老年代收集器
是单线程收集器,采用的是标记整理算法
E-CMS 老年代收集器
主要的目的是最短回收停顿时间为目的的收集器
F-G1 收集器
G1 不同于其他的收集器不是新生代和老年代的,是整个堆内存的
5.4JVM的优化的主要的核心:使用较小的内存占用来获得较高的吞吐量或者较低的延迟
后续更新,优化的具体方式和设置相关的参数,这里目的让读者大致了解JVM和为什么要进行优化
欢迎进行学习交流,不足之处请指出,喜欢麻烦点赞+收藏,谢谢各位大佬了
边栏推荐
- 仿牛客论坛项目梳理
- 外卖店优先级
- STM8S105k4t6c--------------点亮LED
- FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)
- 案例 | 重庆银行流动数据安全挑战及应对实践
- unsafe.Pointer, pointer, reference in golang
- 自定义通用分页标签01
- ingress 待完善
- Ant - the design of the Select component using a custom icon (suffixIcon attribute) suffixes, click on the custom ICONS have no reaction, will not display the drop-down menu
- 十一种概率分布
猜你喜欢
一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
MCU C language -> usage, and meaning
sqoop ETL工具
Mini program + new retail, play the new way of playing in the industry!
数据安全峰会2022 | 美创DSM获颁“数据安全产品能力验证计划”评测证书
系统太多,多账号互通如何实现?
There are n steps in total, and you can go up to 1 or 2 steps each time. How many ways are there?
pytorch applied to MNIST handwritten font recognition
【医保科普】维护医保基金安全,我们可以这样做
案例 | 重庆银行流动数据安全挑战及应对实践
随机推荐
三分建设,七分管理!产品、系统、组织三管齐下节能降耗
Based on the statistical QDirStat Qt directory
STM8S105k4t6c---------------Light up LED
In the season of going overseas, the localization of Internet tips for going overseas
Brush esp8266-01 s firmware steps
【 observe 】 super fusion: the first mention of "calculate net nine order" evaluation model, build open prosperity of power network
Architecture of the actual combat camp module three operations
2022支付宝C2C现金红包PHP源码DEMO/兼容苹果/安卓浏览器和扫码形式
自制蓝牙手机app控制stm8/stm32/C51板载LED
Ant - the design of the Select component using a custom icon (suffixIcon attribute) suffixes, click on the custom ICONS have no reaction, will not display the drop-down menu
"Introduction to nlp + actual combat: Chapter 8: Using Pytorch to realize handwritten digit recognition"
ingress 待完善
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
说说数据治理中常见的20个问题
MCU C language -> usage, and meaning
TOML配置文件格式,YAML最有力的竞争者
基地址:环境变量
【MD5】采用MD5+盐的加密方式完成注册用户和登录账号
MySQL 查询练习(1)
外卖店优先级