当前位置: 首页 > news >正文

【JVM基础01】——介绍-初识JVM运行流程

目录

  • 1- 引言:初识JVM
    • 1-1 JVM是什么?(What)
      • 1-1-1 概念
      • 1-1-2 优点
    • 1-2 为什么学习JVM?(Why)
  • 2- 核心:JVM工作的原理(How)
    • ⭐2-1 JVM 的组成部分及工作流程
    • 2-2 学习侧重点
  • 3- 小结(知识点大纲):
    • 3-1 JVM 组成
    • 3-2 类加载器
    • 3-3 垃圾回收
    • 3-4 JVM实践


1- 引言:初识JVM

1-1 JVM是什么?(What)

1-1-1 概念

  • Java Virtual Machine :JAVA运行时环境(java 二进制字节码的运行环境)
  • Java 的二进制字节码的运行环境。我们都知道 Java 代码想要运行的话,就必须得先经过编译,之后编译成 .class 文件才能运行,JVM就是 .class 二进制字节码的运行环境。

1-1-2 优点

  1. 一次编译,到处执行
  • JVM实现一次编译,到处运行的原理是通过屏蔽操作系统的差异来实现的。具体来说,Java代码编译成二进制字节码后,这些字节码在不同操作系统上的JVM中都可以运行。
  • JVM作为一个软件层,运行在操作系统上,无论是 Windows 还是 Linux,真正运行 Java 代码的是JVM 而不是操作系统。因此,JVM 使得 Java 能够跨平台执行,实现了“一次编写,到处运行”。

image.png

  1. 自动内存管理,垃圾回收机制
  • JVM的第二个优点是自动内存管理和垃圾回收机制。与C语言需要程序员手动管理内存不同,Java虚拟机通过自动垃圾回收功能,大大减轻了程序员的负担,减少了内存泄漏的风险,从而提高了程序的稳定性和开发效率。

1-2 为什么学习JVM?(Why)

  • 学习 JVM 以便我们能够 深入理解Java,一旦掌握了 JVM,也就知道了 Java 的运行机制,特别对于排查问题的能力将会有大幅度提升。
    • ① 了解 JAVA 运行机制
    • ② 提升排查问题的能力(内存泄漏、CPU飙升等)

2- 核心:JVM工作的原理(How)

⭐2-1 JVM 的组成部分及工作流程

image.png


  1. Java源代码到类加载子系统

作用: 将Java源代码转化为JVM能够理解和执行的格式,并将这些格式正确加载到JVM中。

  • Java Source (Java源代码):编写的 Java 源代码文件,通常以 .java 为扩展名。
  • Java Class (Java类文件):通过Java编译器(javac)将Java源代码编译成字节码文件,通常以 .class 为扩展名。
  • 类加载子系统:负责将编译后的 .class 文件加载到 JVM 中,进行加载、验证、准备、解析和初始化。类加载子系统的作用是将 .class 文件转换为 JVM 可以执行的内部表示,并将其放入运行时数据区。

  1. 运行时数据区

作用: 运行时数据区是JVM在执行Java程序时所需的内存区域,包含了程序执行过程中所需的数据和信息。

  • Method Area/MetaSpace (方法区/元空间):存储类结构信息,如运行时常量池、字段和方法数据、方法和构造函数的字节码内容。
  • Heap (堆):用于存储对象实例和数组,是垃圾回收的主要区域。
  • PC Register (程序计数器):记录当前线程正在执行的字节码指令地址。
  • JVM Stacks (虚拟机栈):每个线程私有,用于存储局部变量、操作数栈、动态链接和方法调用等信息。
  • Native Method Stack (本地方法栈):每个线程私有,用于存储本地方法调用的信息。

  1. 执行引擎

作用: 执行引擎负责将字节码转换为机器码并执行,确保Java程序高效运行,并通过垃圾回收机制管理内存。

  • Interpreter (解释器):逐行解释执行字节码指令,将每条字节码指令翻译成相应的机器码并执行。
  • JIT Compiler (即时编译器):将热点代码(频繁执行的代码段)编译成机器码,提高执行效率。
  • GC (垃圾回收):负责自动回收不再使用的对象,释放内存空间,防止内存泄漏。

  1. 本地方法接口和本地库

作用: 本地方法接口和本地库使Java程序能够调用和执行平台相关的功能和库,扩展了Java的能力,使其可以与底层系统进行交互。

  • 本地方法接口 (JNI):允许Java代码调用本地(通常是 C 或 C++)代码,提供与操作系统或其他底层库的接口。
  • 本地库 (Native Libraries):提供本地方法实现的库文件,通常以动态链接库(如.dll.so)的形式存在。

2-2 学习侧重点

  • 对于 JVM 组成:主要关注 JVM 的运行时数据区。
  • 类加载器:类加载子系统中的类加载器
  • 垃圾回收:运行时数据区堆中对象的回收
  • JVM实践

3- 小结(知识点大纲):

3-1 JVM 组成

在这里插入图片描述

3-2 类加载器

在这里插入图片描述

3-3 垃圾回收

在这里插入图片描述

3-4 JVM实践

在这里插入图片描述

相关文章:

  • ESC(ELectronic Stability Control,电子稳定控制系统)
  • 数据的力量:Facebook如何通过数据分析驱动创新
  • IDEA关联数据库
  • 钡铼分布式 IO 系统 OPC UA边缘计算耦合器BL205
  • 【网络】Socket编程
  • 分布式唯一id的7种方案
  • Ubuntu22.04:安装Samba
  • Gitee使用教程2-克隆仓库(下载项目)并推送更新项目
  • SpringBoot解决Apache Tomcat输入验证错误漏洞
  • 视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案
  • 基于java+springboot+vue实现的学生选课系统(文末源码+Lw)129
  • [论文笔记] CT数据配比方法论——1、Motivation
  • qml 实现一个listview
  • 系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读
  • C++派生类对基类成员的访问
  • $translatePartialLoader加载失败及解决方式
  • 【RocksDB】TransactionDB源码分析
  • Android框架之Volley
  • C++类中的特殊成员函数
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 基本功--面试宝典
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS数组方法汇总
  • Lsb图片隐写
  • SpiderData 2019年2月25日 DApp数据排行榜
  • SQLServer之创建显式事务
  • TCP拥塞控制
  • 分享几个不错的工具
  • 新手搭建网站的主要流程
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 如何在招聘中考核.NET架构师
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (13)Hive调优——动态分区导致的小文件问题
  • (纯JS)图片裁剪
  • (分布式缓存)Redis哨兵
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)RocketMQ初步认识
  • .md即markdown文件的基本常用编写语法
  • .net core docker部署教程和细节问题
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net 怎么循环得到数组里的值_关于js数组
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .NET关于 跳过SSL中遇到的问题
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/motd and /etc/issue
  • @ComponentScan比较
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @SpringBootApplication 包含的三个注解及其含义
  • [\u4e00-\u9fa5] //匹配中文字符
  • []FET-430SIM508 研究日志 11.3.31
  • []Telit UC864E 拨号上网
  • [012-1].第12节:Mysql的配置文件的使用