JVM基础概念

ops/2024/10/22 15:29:33/

一、JVM概述

1. 为什么要学习JVM?

线上系统突然宕机,系统⽆法访问,甚⾄直接 OOM ;

线上系统响应速度太慢,优化系统性能过程中发现 CPU 占⽤过⾼,原因是因为 JVM 的 GC 次 数过于频繁;

新项⽬上线,需要对JVM的各种参数进行设置;

面对上述实际⼯作中产⽣的问题,都需要对 JVM 有全面的掌握和了解。

1.1. Java 跨平台

        Java 是⼀种可以跨平台的编程语⾔,我们通常把 CPU 处理器与操作系统构成的计算机系统整 体成为叫平台。

        不同的 CPU ,差异主要在底层指令集不同,指令集分为精简指令集( RISC )和复杂指令集 ( CISC )。每个 CPU 都有自己的特定指令集。

Java 可以跨平台的最主要原因是因为 JVM ,因为不同的平台,使⽤的 JVM 不⼀样。

        通常,我们编写的 Java 源代码在编译后会⽣成⼀个 Class ⽂件,称为字节码⽂ 件。 Java 虚拟机负责将字节码⽂件翻译成特定平台下的机器代码,然后运⾏。简单来 讲, Java 的跨平台就是因为不同版本的 JVM 。只要在不同的平台上安装相应的JVM,就可以运 ⾏字节码⽂件( .class )并运⾏我们编写的 Java 程序。

1.2 Java虚拟机

  • 虚拟机(Virtual Machine),虚拟计算机。他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
  • VMware属于系统虚拟机,完全对物理计算机的仿真,提供一个可运行完整操作系统的平台。程序虚拟机的典型代表是java虚拟机,专门为执行某个计算机程序而设计。在java虚拟机中执行的指令称为java字节码指令。
  • Java虚拟机是一种执行java字节码文件的虚拟机,它拥有独立的运行机制。
  • Java技术的核心就是Java虚拟机,因为所有的java程序都要在java虚拟机内部运行。
  • JVM ( Java Virtual Machine )是 Java 平台的基础,它有⾃⼰的指令集,并在运⾏ 时操作不同的内存区域( JVM 内存模型)。 JVM 虚拟机运⾏于操作系统之上,将字节码加载到 J VM 内存模型中,通过解释器将字节码翻译成当前平台 CPU 能识别的机器码⾏。每⼀条 Java 指 令, Java 虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪⾥。
  • JVM 是运⾏在操作系统之上的,所以,它与硬件没有直接交互。

1.3 JVM的特点

  1. 一次编译到处运行;
  2. 自动内存管理;
  3. 自动垃圾回收功能;

1.4 JVM整体组成部分

  1. 类加载器(ClassLoader)
  2. 运行时数据区(Runtime Data Area)
  3. 执行引擎(Execution Engine)
  4. 本地库接口(Native Interface)

 

        程序在执行之前先要把 java 代码转换成字节码(class 文件),jvm 首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中的运行时数据区(Runtime Data Area) ,而字节码文件是 jvm 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU 去执行,而这个过程中需要调用其他语言的接口 本地库接口(NativeInterface) 来实现整个程序的功能,这就是这 4 个主要组成部分的职责与功能。
       而我们通常所说的 JVM 组成指的是 运行时数据区(Runtime Data  Area) ,因为通常需要程序员调试分析的区域就是“运行时数据区”,或者更具体的来说就是“运行时数据区”里面的 Heap(堆)模块。

 1.5Java代码执行流程

 JAVA 程序的执行过程简单来说包括:

1. JAVA 源代码编译成字节码;

2. 字节码校验并把 JAVA 程序通过类加载器加载到 JVM 内存中;

3. 在加载到内存后针对每个类创建 Class 对象;

4. 字节码指令和数据初始化到内存中;

5. 找到 main 方法,并创建栈帧;

6. 初始化程序计数器内部的值为 main ⽅法的内存地址;

7. 程序计数器不断递增,逐条执⾏JAVA字节码指令,把指令执⾏过程的数据存放到操作数栈中 (入栈),执行完成后从操作数栈取出后放到局部变量表中,遇到创建对象,则在堆内存中分配 ⼀段连续的空间存储对象,栈内存中的局部变量表存放指向堆内存的引⽤;遇到⽅法调⽤则再创 建⼀个栈帧,压到当前栈帧的上⾯。


http://www.ppmy.cn/ops/111330.html

相关文章

QT实现TCP/UDP通信

服务器端&#xff1a; 客户端&#xff1a; 服务器&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug&…

基于Springboot的无接触外卖配送系统

文未可获取一份本项目的java源码和数据库参考。 一、选题的依据、意义&#xff0c;理论或实际方面的价值 1.选题的依据和意义 为了最大限度减少人员流动&#xff0c;有效防止疫情扩散&#xff0c;切实保障城区居民生活所需&#xff0c;美团外卖、饿了么等平台相继推出了“无接…

【目标检测】labelimg图像标注软件的使用流程

一、labelimg检测图片标注 1、下载labelimg.exe 链接&#xff1a;https://pan.baidu.com/s/1yk8ff56Xu40-ZLBghEQ5nw 提取码&#xff1a;vj8f 下载的文件是编译好的&#xff0c;可执行的labelImg.exe文件。直接将文件放在windows环境下&#xff0c;双击可执行。&#xff08;如果…

5. Fabric 设置画布大小

1. 设置宽度 canvas.setWidth(width)2. 设置高度 canvas.setHeight(height)3. 设置大小 canvas.setDimensions({width,height })4. 画布的缩放 canvas.on(mouse:wheel, (opt) > {const delta opt.e.deltaY // 滚轮&#xff0c;向上滚一下是 -100&#xff0c;向下滚一下…

PostgreSQL的repmgr命令参考(2)

PostgreSQL的repmgr命令参考(2) 1 repmgr node status 显示节点基本信息和复制状态的概述。此命令必须在本地节点上运行。 [pg12test1 repmgr]$ repmgr -f /home/pg12/conf/repmgr.conf node status Node "test1":PostgreSQL version: 12.9Total data size: 24 MB…

海外云手机有哪些推荐?

随着云手机的发展&#xff0c;越来越多的企业和个人开始使用云手机来满足他们的海外业务需求。用户可以通过云手机实现方便、快捷的海外访问&#xff0c;一般用来进行tiktok运营、亚马逊电商运营、海外社媒运营等操作。海外云手机平台有很多&#xff0c;以下是一些比较好的云手…

路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于A*算法的往返式全覆盖路径规划的改进算法 matlab实现代码 往返式全覆盖路径规划&#xff0c;通过建立二维栅格地图&#xff0c;设置障碍物&#xff0c;以及起始点根据定义往返式路径规划的定义的优先级运动规则从…

每天五分钟深度学习PyTorch:不同的神经网络层设置不同的学习率

本文重点 我们前面学习了基本网络模型的搭建,获取网络模型的子结构,以及优化器optim,我们发现我们设置优化器的时候,是对整个模型设置的,也就是说整个模型的参数学习率是一样,本节课程我们学习如何给不同的网络层设置不同的学习率。主要还是通过优化器optim来实现的,本…