当前位置:网站首页>【JVM调优实战100例】01——JVM的介绍与程序计数器
【JVM调优实战100例】01——JVM的介绍与程序计数器
2022-07-02 17:23:00 【半旧518】
前 言
作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端
专栏简介:实战案例驱动介绍JVM知识,教你用JVM排除故障、评估代码、优化性能
文章简介:介绍JVM的作用、JVM、JRE、JDK的区别,常见的JVM与JVM学习路线
1.JVM简介
1.1 JVM的作用
JVM的作用如下:
- 一次编写,处处运行
- 自动管理内存,垃圾回收
- 数组下标越界检查,如果允许使用数组下标越界的内存分配方式,那么就可能出现内容覆盖的情况,因此JVM为数组下标越界检查提供了支持机制。
- 提供多态的底层支持。虚方法表存放着各个方法的实际入口地址。如果某个方法在子类中没有被重写,那子类的虚方法表里面的地址入口和父类相同方法的地址入口是一致的,都指向父类的实际入口地址。如果子类重写了这个方法,子类方法表中的地址将会替换为指向子类实现版本的入口地址。
1.2 JVM、JRE、JDK
三者的区别、联系如下图。
1.3 常见的JVM
JVM遵守一系列规范,如有需要,可以自己开发一个JVM,很多大公司有自己的JVM,常见的JVM如下表。其底层实现不尽相同,我们接下来都是针对Hotspot进行讲解。
1.4 JVM的学习路线
如下图,JVM主要包括三个部分:类加载器,JVM内存结构与执行引擎。一个类经过编译后,必须有类加载器进行加载。类被放在方法区,类的实例对象则被放在堆中,堆中对象在调用方法时会用到虚拟机栈、程序计数器和本地方法栈。方法执行时,每行代码由执行引擎中的程序解释器解释执行,方法中的热点代码(频繁调用)会由JIT即时编译器进行优化编译,GC则负责对堆中不再被引用的对象进行垃圾回收。有时JVM还需要与操作系统进行交互,本地方法接口负责这一职责。学习时将按照由易到难的顺序,如下图标注学习:先学习JVM的内存结构,在介绍垃圾回收的过程,再学习java编译过程(如优化),再学习类加载的过程与常见的类加载器,最后介绍程序运行时的优化,即解释器与即时编译器部分。
2.程序计数器
作用:
程序计数器的作用就是记住程序下一条要执行的jvm指令的地址。计算机中java代码到执行的过程是:源代码转为字节码,二进制字节码转为jvm指令,交给解释器,解释器通过程序计数器获取要解释的字节码地址,将指令转为机器码,由CPU执行;同时程序计数器移到了下一条要执行的指令。java是多线程的,正是程序计数器保证了如果线程失去了cpu,重新获取cpu后解释器就可以知道下一条要执行的指令在哪。

程序计数器具有如下特点:
线程私有,每一个线程都有自己的程序计数器,记录当前线程代码执行到哪了。
java虚拟机中唯一一个不会存在内存溢出的部分。
边栏推荐
- [Yugong series] July 2022 go teaching course 001 introduction to go language premise
- [daily question] first day
- 徹底搞懂基於Open3D的點雲處理教程!
- R语言dplyr包filter函数筛选dataframe数据、如果需要筛选的数据列(变量)名称中包含引号则需要使用!!sym语法处理、否则因为无法处理引号筛选不到任何数据
- Slam | how to align timestamps?
- Implementation shadow introduction
- A simple PHP personal card issuing program v4.0
- Nm01 function overview and API definition of nm module independent of bus protocol
- What is cloud primordial? This time, I can finally understand!
- SLC、MLC、TLC 和 QLC NAND SSD 之间的区别:哪个更好?
猜你喜欢

After 22 years in office, the father of PowerShell will leave Microsoft: he was demoted by Microsoft for developing PowerShell

LightGroupButton* sender = static_ cast<LightGroupButton*>(QObject::sender());

任职 22 年,PowerShell 之父将从微软离职:曾因开发 PowerShell 被微软降级过

Troubleshooting: kubectl reports an error validationerror: unknown field \u00a0

Redis (7) -- database and expiration key

CDN acceleration and breaking J anti-theft chain function
![[daily question] first day](/img/8c/f25cddb6ca86d44538c976fae13c6e.png)
[daily question] first day

Leetcode interview question 16.15 Abacus wonderful calculation

Redis (6) -- object and data structure

文字编辑器 希望有错误的句子用红色标红,文字编辑器用了markdown
随机推荐
Redis(7)----数据库与过期键
QQmlApplicationEngine
@Component 拿不到dao层
StretchDIBits函数
How to set vscode to delete the whole line shortcut key?
Uncover the whole link communication process of dewu customer service im
UML 类图
Implementation shadow introduction
消除IBM P750小机上的黄色报警灯[通俗易懂]
A simple PHP personal card issuing program v4.0
Distance measurement - Jaccard distance
Which securities company has a low, safe and reliable online account opening commission
彻底搞懂基于Open3D的点云处理教程!
After 22 years in office, the father of PowerShell will leave Microsoft: he was demoted by Microsoft for developing PowerShell
Leetcode(81)——搜索旋转排序数组 II
M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
options should NOT have additional properties
How to write controller layer code gracefully?
Installation of thingsboard, an open source IOT platform
Typical application of "stack" - expression evaluation (implemented in C language)