首页 > 其他分享 >【JVM_01】——初识JVM运行流程

【JVM_01】——初识JVM运行流程

时间:2024-07-15 14:57:55浏览次数:18  
标签:01 Java 字节 回收 初识 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实践

在这里插入图片描述

标签:01,Java,字节,回收,初识,JVM,运行,加载
From: https://blog.csdn.net/weixin_44382896/article/details/140438876

相关文章

  • 认识JVM
    类加载器运行时数据区执行引擎执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令JVM架构图......
  • 数组001 基本语法
    #include<iostream>usingnamespacestd;//1、数组声明方式:////1.1只声明://数据类型数组名[数组长度]:intarr[10];//里面的元素未初始化,显示的结果不确定////1.2声明的时候初始化:////1.2.1数据类型数组名[数......
  • 01用户中心
    一.用户中心页面显示继承父模板user子应用定义视图类,传递参数控制页面显示定义urls修改模板内页面跳转,反向解析:二.登录装饰器和登录后页面跳转内置认证类校验登录在urls.py调用校验方法,路径中使用方法包住函数类如果没有登录的话会跳转到登录页,后面拼......
  • [b01lers2020]Life on Mars 1
    sql注入,信息搜集打开之后大脑一片空白,不知道入手点在哪,信息什么都查不到,最后抓包抓到了东西发现抓包的时候出现了两个参数,直接在网页上访问一下发现爆装备了,在这里我卡了挺久的,最后是看其他师傅的wp发现这里是sql注入,就是一个最基础的整形注入,确定了之后我们直接上sqlma......
  • [SUCTF 2018]GetShell 1
    自增绕过,文件上传打开是一个白的页面,开始信息收集,可以在前端代码中看到,index.php?act=upload尝试访问之后发现是文件上传发现是直接给了源码的,代码解释:这段PHP代码用于处理一个通过HTML表单上传的文件,并检查该文件的内容是否包含任何黑名单中的字符。下面是逐行解释:if($co......
  • 《昇思25天学习打卡营第06天|qingyun201003》
    日期心得什么是函数式自动微分,在日常的模型训练中,涉及到复杂的数学公式如何转换为机械语言,通过本次的学习,使我了解到了如何去做梯度计算,通过梯度计算,设计损失函数,有一步步优化代码。昇思MindSpore基础入门学习函数式自动微分(AI代码解析)函数式自动微分神经网络的......
  • 【408真题】2011-25
    “接”是针对题目进行必要的分析,比较简略;“化”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。涉及到的知识全部来源于王道各科教材(2025版)(408神功练成中……)文章目录一、接:本题分析二、化:套路总结一、接:本题分析2011-25分析【答】D【解......
  • 【408真题】2011-28
    “接”是针对题目进行必要的分析,比较简略;“化”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。涉及到的知识全部来源于王道各科教材(2025版)(408神功练成中……)文章目录一、接:本题分析二、化:套路总结一、接:本题分析2011-28分析【答】D【解......
  • SP4063 MPIGS - Sell Pigs / P4638 [SHOI2011] 银行家题解
    考虑使用网络流。建立源点\(S\)和汇点\(T\)。每个人作为一个点,将它们与汇点\(T\)连接,权值为需要的猪的数量。然后对于每个人,如果和之前的某个人开了相同的猪圈,那么就将之前的那个人的点与这个人的点连接。如果猪圈还没有被开过,就从源点\(S\)连接这个点,权值为猪圈猪的初......
  • Windows Server 2022 中SQL查询报错:error setting locale info for codepage 65001(取
    解决问题:刚开始我以为是SQLServer升级过程中遇到错误,后面仔细检查错误日志,发现我忽略了一个重要的错误信息“Thecodepage65001isnotsupportedbytheserver.”,codepage65001对应的编码为UTF-8,而数据库排序规则为Chinese_PRC_CI_AS,对应的codepage为936。原来这台SQLSe......