【JVM调优实战100例】01——JVM的介绍与程序计数器

简介: 文章目录1.JVM简介1.1 JVM的作用1.2 JVM、JRE、JDK1.3 常见的JVM1.4 JVM的学习路线2.程序计数器

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后解释器就可以知道下一条要执行的指令在哪。的作用就是记住程序下一条要执行的jvm指令的地址。计算机中java代码到执行的过程是:源代码转为字节码,二进制字节码转为jvm指令,交给解释器,解释器通过程序计数器获取要解释的字节码地址,将指令转为机器码,由CPU执行;同时程序计数器移到了下一条要执行的指令。java是多线程的,正是程序计数器保证了如果线程失去了cpu,重新获取cpu后解释器就可以知道下一条要执行的指令在哪。


程序计数器具有如下特点

线程私有,每一个线程都有自己的程序计数器,记录当前线程代码执行到哪了。

java虚拟机中唯一一个不会存在内存溢出的部分

相关文章
|
15天前
|
监控 Java
【JVM】深入理解JVM调优
【JVM】深入理解JVM调优
8 0
|
7月前
|
存储 Java 编译器
【面试题精讲】JVM-运行时数据区-程序计数器
【面试题精讲】JVM-运行时数据区-程序计数器
|
9月前
|
Java
JVM学习笔记(4)——JVM调优
JVM学习笔记(4)——JVM调优
72 0
|
10月前
|
算法 架构师 Java
01-为什么要学习JVM?为什么必须学习JVM
对于大多数Java工程师来说JVM也几乎成了面试必问的一个技术方向,比如什么JVM的内存模型,垃圾回收算法,生产环境遇到的JVM问题,各种参数的优化之类等。还有当系统出现莫名其妙的进程崩溃,异常描述为OOM内存溢出,又该如何解决?当系统出现频繁的FullGC,导致系统卡死,又该如何下手?
60 0
01-为什么要学习JVM?为什么必须学习JVM
|
11月前
|
SQL 设计模式 缓存
JVM -学习分享篇
JVM学习分享
77 0
|
12月前
|
Java 编译器
【JVM调优实战100例】01——JVM的介绍与程序计数器
【JVM调优实战100例】01——JVM的介绍与程序计数器
|
12月前
|
消息中间件 Java Kafka
jvm性能调优 - 02JVM中内存区域
jvm性能调优 - 02JVM中内存区域
45 0
|
安全 前端开发 Java
JVM学习三
2.编译javap 通过javap工具,我么可以反编译class文件,从而看到java的字节码信息: javap -v xxx.class 从字节码文件中,我们可以看到类的文件的相关信息,版本信息、字段、常量池信息、属性信息、方法信息,继承信息和标识信息等。 通常原始java代码,编译后变成字节码文件,常量信息,会放入常量池中,运行时放入到运行时常量池中。而运行常量池类似hash表,在里面可以看到里面的常量的信息。方法字节码载入方法区,main线程开始运行,分配栈帧内存。而栈帧的数据结构是栈,先进后出的特点。接着执行引擎完成字节码操作。 在编译过程期间,会自动生成和转换一些代码,方便运行。
76 1
JVM学习三
|
缓存 监控 算法
JVM学习一
jvm的内存结构:可以看到我们的java文件会首先编译成class文件,经过类加载器进行加载,然后经过jvm的相关区域:f方法区、堆、虚拟机栈、程序计数器、本地方法栈等地,可以进行本地方法接口进行调用,执行引擎,进行编译,执行程序。当中涉及到垃圾回收。
60 0
JVM学习一
|
监控 数据可视化 Java
JVM学习二
jvm监控排查问题相关工具: jps、jstat、jinfo、jhat、jstack、jconsole、jmap、MAT、Btrace、psi_probe监控tomcat,通过gceasy查看和GCViewer查看GC,从而解决问题。
85 0
JVM学习二