JVM基础概念

news2024/9/25 23:16:37

一、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.coloradmin.cn/o/2126010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ 最接近的三数之和

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。 提示&#xff1a; 3 < nums.length < 1000-1000 < nums[i] < …

【计算机毕设-软件开发类】基于SpringBoot的食品安全管理平台

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 【联系方式】&#x1f447;&#x1f447;&#x1f447;最下边&#x1f447;&#x1f447;&…

c++188深拷贝和浅拷贝

在全局区字符串 浅拷贝 拷贝指针变量的值而不是内存空间 obj2已经析构了 又进行了一次析构 深拷贝&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Name { public:Name(const char* myp){//开辟一个内存把dhfka传入int le…

Java综合实践——学生成绩查询系统

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1&#xff0c;请看&#xff01; 本篇文章将带大家一起来写一个学生成绩查询系统。 目录 系统呈现效果 前…

亚马逊跨境蓝海选品思路和方法(实操建议版)

跨境电商中&#xff0c;“七分靠选品&#xff0c;三分靠运营”。这句话强调了产品在店铺中的重要性&#xff0c;选品的好坏直接影响到后续推广的成败。 如何正确选择产品我们先从思路入手&#xff0c;明确自己的选品思路。以下是几点选品思路的总结和使用店雷达选品的技巧。 …

硅外延片行业分析:未来几年年复合增长率CAGR为5.3%

硅外延晶片是通过在抛光晶片上添加数微米厚的单层碳化硅晶体层制成的。需要精确控制厚度、掺杂&#xff08;载流子浓度&#xff09;和缺陷密度&#xff0c;才能使半导体制造设备生产出高产量的功率器件。外延主要是为了增强晶片的功能。近年来&#xff0c;技术已成为制造高集成…

集运企业运营过程中有哪些痛点?集运系统如何解决?

在集运行业的激烈竞争中&#xff0c;企业面临着诸多运营痛点&#xff0c;这些痛点不仅影响了企业的运营效率&#xff0c;也制约了客户体验的提升。 易境通集运系统&#xff0c;作为一款专为集运行业设计的智能化管理系统&#xff0c;通过技术创新和流程优化&#xff0c;为集运…

ARMxy嵌入式边缘计算控制器支持Linux OS应用于AIOT

人工智能与物联网&#xff08;AIoT&#xff09;的融合正深刻改变着各个行业。而在这一变革中&#xff0c;ARMxy 嵌入式控制器以其卓越的性能和对 Linux OS 的支持&#xff0c;成为了 AIoT 应用的关键推动力量。 一、ARMxy 嵌入式控制器的优势 强大的处理能力 ARMxy 嵌入式控制…

会话好友区设计与开发(二)

会话好友区设计与开发&#xff08;二&#xff09; 前言 在上一集我们已经完成了对item的设计与开发&#xff0c;也详细解释了一些细节&#xff0c;但是我们上一集并没有对item进行显示&#xff0c;那么这一集我们会开发两个SessionFriendArea的方法以及使用一个宏开关进行测试…

《深入理解JAVA虚拟机(第2版)》- 第11章 - 学习笔记

第11章 晚期&#xff08;运行期&#xff09;优化 11.1 概述 频繁执行的方法或代码块&#xff0c;被认定为“热点代码”&#xff08;Hot Spot Code&#xff09;。为了提高热点代码的执行效率&#xff0c;在运行期&#xff0c;将热点代码编译成本地机器码并进行优化&#xff0c…

VD1012 单节锂离子充电电池保护IC 2.8V过放电压 SOT-353小封装芯片

VD1012内置高精度电压检测电路和延迟电路以及内置MOSFET&#xff0c;是用于单节锂离子/锂聚合物可再充电电池的保护IC。 本IC适合于对1节锂离子/锂聚合物可再充电电池的过充电、过放电和过电流进行保护。 VD1012具备如下特点:高精度电压检测电路 过充电检测电压 4.…

曝字节 AI 硬件团队首款自研产品为智能耳机,与豆包联动;OpenAI 神秘新模型或将在两周内发布丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

「OC」事件点击demo合集

「OC」事件点击demo合集 文章目录 「OC」事件点击demo合集前言可用鼠标移动的UIview突出的tabBar按钮扩大按钮的响应范围 前言 在前面通过学习事件响应流程&#xff0c;学习了许多新的内容&#xff0c;当然也学习了许多不同的用法&#xff0c;但在之前的文章之中并没有将运用到…

SDH信号的帧结构与复用

在OTN技术的学习中&#xff0c;涉及到了大量SDH的相关知识&#xff0c;例如映射&#xff0c;复用&#xff0c;开销等&#xff0c;所以简单的总结一下SDH的帧结构与复用用以辅助学习OTN技术。 DWDM&#xff08;密波&#xff09;大容量SDH&#xff08;同步数字体系&#xff09;的…

无源晶振的等效电路与电路结构解析

无源晶振&#xff0c;即不带内置振荡电路的晶体振荡器&#xff0c;它在电子设备中扮演着产生原始时钟频率的重要角色。以下是关于无源晶振的等效电路、电路结构及其关键参数的详细解析。 一、无源晶振的等效电路 无源晶振的等效电路主要包括静态电容C0、动态电容C1、谐振电阻R…

网络高级(学习)2024.9.11

目录 Modbus库函数 1.初始化和释放函数 2.功能函数 3.功能案例 Modbus RTU 1.特点 2.协议格式 3.编程思路 Modbus库函数 1.初始化和释放函数 modbus_t* modbus_new_tcp(const char *ip, int port) 功能&#xff1a;以TCP方式创建Modbus实例&#xff0c;并初始化 参数…

坐牢第三十八天(Qt)

1、使用Qt绘画事件处理画一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QPaintEvent>//画画处理事件 #include <QPainter>//画画 #include <QTime> //时间类 #include <QTimer>…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

初识Maven:Java项目管理工具

实际开发中&#xff0c;伴随着项目规模的增长&#xff0c;依赖管理和构建自动化变得至关重要&#xff0c;一套标准化的项目结构有助于更好的开发项目、简化这项任务&#xff08;真的不是强迫症&#xff09; Maven&#xff0c;作为 Apache Software Foundation 维护的项目管理工…

如何获取MySQL数据表的列信息

在数据库管理中&#xff0c;了解表的结构是至关重要的。在MySQL中&#xff0c;我们可以通过几种方式来获取数据表的列信息。这不仅可以帮助我们更好地理解表的结构&#xff0c;还可以在编写查询时提供便利。以下是三种常用的方法来获取MySQL数据表的列信息。 使用 SHOW COLUMN…