当前位置:网站首页>【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虚拟机中唯一一个不会存在内存溢出的部分。
边栏推荐
- Use MNIST in tensorflow 2_ 784 data set for handwritten digit recognition
- Stretchdibits function
- The difference between SLC, MLC, TLC and QLC NAND SSD: which is better?
- 夜神模擬器+Fiddler抓包測試App
- LightGroupButton* sender = static_cast<LightGroupButton*>(QObject::sender());
- Ali was wildly asked by the interviewer on three sides. Redis dared not write 'proficient' on his resume anymore
- 迷你高尔夫球场:伦敦休闲旅游好去处
- UE4 用spline画正圆
- 在Tensorflow2中使用mnist_784数据集进行手写数字识别
- Leetcode (81) -- search rotation sort array II
猜你喜欢

UE4 用spline画正圆

Leetcode interview question 16.17 Continuous sequence

全链路数字化转型下,零售企业如何打开第二增长曲线

深度学习数学基础

鸿蒙第四次学习

Looking for innocence in New York -- a beautiful day at the discovery center of Legoland, New Jersey

Redis (7) -- database and expiration key

Uncover the whole link communication process of dewu customer service im
![27: Chapter 3: develop Passport Service: 10: [registration / login] interface: after the registration / login is OK, save the user session information (uid, utoken) to redis and cookies; (one main poi](/img/b9/2066a13b160252114c2881007094f8.png)
27: Chapter 3: develop Passport Service: 10: [registration / login] interface: after the registration / login is OK, save the user session information (uid, utoken) to redis and cookies; (one main poi

Leetcode interview question 16.15 Abacus wonderful calculation
随机推荐
@Component cannot get Dao layer
如何设置VSCode删除整行快捷键?
饭卡 HDU2546
学生抖音宣传母校被吐槽“招生减章”,网友:哈哈哈哈哈哈
CDN acceleration and breaking J anti-theft chain function
LightGroupButton* sender = static_cast<LightGroupButton*>(QObject::sender());
Server PHP environment building tutorial, PHP server environment building graphic explanation
Deep learning mathematics foundation
Redis(6)----对象与数据结构
27:第三章:开发通行证服务:10:【注册/登录】接口:注册/登录OK后,把用户会话信息(uid,utoken)保存到redis和cookie中;(一个主要的点:设置cookie)
R语言ggplot2可视化分面图(facet):gganimate包基于transition_time函数创建动态散点图动画(gif)
After 22 years in office, the father of PowerShell will leave Microsoft: he was demoted by Microsoft for developing PowerShell
Relax again! These fresh students can settle directly in Shanghai
Unity learning shader notes [82] black and white processing of enhanced single channel color rendering
在纽约寻找童真——新泽西州乐高乐园探索中心的美好一天
如何清理废弃pv和其对应的文件夹
Singapore summer tourism strategy: play Singapore Sentosa Island in one day
RTE11- 中断解耦功能
[Northwestern Polytechnic University] information sharing of the first and second postgraduate examinations
Leetcode interview question 16.11 Diving board