JVM 02

news2025/3/29 8:31:53

今天是2025/03/23 19:07 day 10

总路线请移步主页Java大纲相关文章

今天进行JVM 3,4 个模块的归纳

首先是JVM的相关内容概括的思维导图

3. 类加载机制

加载过程
  1. 加载(Loading)

    • 通过类全限定名获取类的二进制字节流(如从JAR包、网络、动态代理生成等)。

    • 将字节流转化为方法区的运行时数据结构,生成Class对象作为访问入口。

  2. 验证(Verification)

    • 文件格式验证:检查魔数、版本号等是否符合JVM规范。

    • 元数据验证:语义校验(如是否有父类、是否继承final类等)。

    • 字节码验证:确保代码逻辑合法(如类型转换、跳转指令)。

    • 符号引用验证:确保符号引用能正确解析到目标类/方法/字段。

  3. 准备(Preparation)

    • 静态变量(static修饰)分配内存(方法区),并赋默认零值(如int=0,引用=null)。

    • 若字段被final修饰且是基本类型/字符串常量,直接赋程序设定的初始值(无需等到初始化阶段)。

  4. 解析(Resolution)

    • 将常量池中的符号引用(类、方法、字段的间接引用)替换为直接引用(内存地址偏移量)。

    • 解析可能发生在初始化之前(静态绑定)或之后(动态绑定,如虚方法调用)。

  5. 初始化(Initialization)

    • 执行类构造器<clinit>()方法,合并类中所有静态变量的赋值动作和静态代码块。

    • JVM保证父类的<clinit>()先于子类执行。

    • 初始化是触发类加载的最终步骤(如new、反射调用、主类加载等)。


类加载器
  1. 启动类加载器(Bootstrap ClassLoader)

    • 由C++实现,加载JAVA_HOME/lib下的核心类库(如rt.jar)。

    • 唯一不继承ClassLoader的加载器,Java代码中无法直接引用。

  2. 扩展类加载器(Extension ClassLoader)

    • Java实现,加载JAVA_HOME/lib/ext目录的扩展类。

    • sun.misc.Launcher$ExtClassLoader的实例。

  3. 应用程序类加载器(Application ClassLoader)

    • 加载用户类路径(ClassPath)下的类,是默认的类加载器。

    • sun.misc.Launcher$AppClassLoader实现。

  4. 自定义类加载器

    • 继承ClassLoader类,重写findClass()方法,实现从特定路径加载类。

    • 典型场景:热部署、模块化加载、加密类文件解密。


双亲委派模型
  • 工作原理: 子加载器收到加载请求后,先委派父加载器尝试加载,父加载器无法完成时,子加载器才自行加载。

  • 优点

    • 避免类重复加载(如java.lang.Object只会由Bootstrap加载一次)。

    • 防止核心类被篡改(自定义的java.lang.String不会被加载)。

  • 打破双亲委派

    • SPI机制(如JDBC驱动加载):使用线程上下文类加载器(TCCL)逆向委派。

    • OSGi模块化:自定义类加载器实现网状委派。


4. 执行引擎

解释器(Interpreter)
  • 逐行解释执行字节码,无需等待编译,启动速度快。

  • 适用于短生命周期或低频执行的代码(如一次性任务)。


JIT编译器(Just-In-Time)
  1. C1编译器(Client Compiler)

    • 轻量级优化,编译速度快,适合对启动速度敏感的应用(如GUI程序)。

    • 优化手段:方法内联、去虚拟化、冗余消除。

  2. C2编译器(Server Compiler)

    • 深度优化,生成高效本地代码,适合长时间运行的服务端应用。

    • 优化手段:逃逸分析、锁消除、循环展开。

  3. 分层编译(Tiered Compilation)

    • JDK7+默认策略,结合C1和C2:

      • Level 0:解释执行。

      • Level 1~3:C1编译(带基础性能监控)。

      • Level 4:C2编译(激进优化)。

    • 通过-XX:+TieredCompilation启用。


热点代码检测
  • 方法调用计数器:统计方法调用次数,触发JIT编译(阈值:Client模式1500次,Server模式10000次)。

  • 回边计数器:统计循环体执行次数,触发OSR(栈上替换)编译。

  • 热度衰减:计数器半衰期(-XX:CounterHalfLifeTime),避免长期未触发的代码占用资源。


编译优化技术
  1. 方法内联(Inlining)

    • 将小方法(如Getter/Setter)直接嵌入调用处,减少栈帧开销。

    • -XX:MaxInlineSize(默认35字节)控制。

  2. 逃逸分析(Escape Analysis)

    • 判断对象是否仅在方法内部使用(未逃逸),若成立则:

      • 栈上分配:对象直接在栈上分配,避免堆内存压力。

      • 标量替换:将对象拆分为基本类型字段,消除对象头开销。

  3. 锁消除(Lock Elision)

    • 基于逃逸分析,若锁对象未逃逸(线程私有),直接移除同步操作。


本地方法接口(JNI)
  • 允许Java代码调用C/C++编写的本地方法(如native修饰的方法)。

  • 典型场景

    • 操作系统底层操作(如文件IO)。

    • 高性能计算(如矩阵运算)。

  • 缺点

    • 破坏平台无关性。

    • JNI调用开销较大(需切换上下文)。


  • 类加载机制通过双亲委派保障安全性和一致性,支持动态扩展(如SPI)。

  • 执行引擎通过解释器与JIT编译器的协同,平衡启动速度和运行效率,结合逃逸分析等优化技术提升性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321111.html

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

相关文章

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。 1、原因分析 2、解决办法 如果是使用的虚拟环境,需要下你提前激活虚拟环境,再进行下列操作。 因为需要…

《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1

AI大模型趣味实战 第7集&#xff1a;多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1 摘要 在信息爆炸的时代&#xff0c;如何高效获取和筛选感兴趣的新闻内容成为一个现实问题。本文将带领读者通过Python和Flask框架&#xff0c;结合大模型的强大…

基于Spring Boot的健身房管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

WSL Linux 子系统download

WSL各Linux 子系统下载 WSL Linux 最新下载 微软应用商店 | Microsoft StoreWSL Linux 历史版下载复制应用商店Linux地址到转换下载地址https://store.rg-adguard.net/ Version百度网盘离线下载OracleLinux提取

Qt中通过QLabel实时显示图像

Qt中的QLabel控件用于显示文本或图像&#xff0c;不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示&#xff1a; Widgets_Test.h&#xff1a; class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…

基于springboot的校园资料分享平台(048)

摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff0c;创建了一个计算机管理校园资料分享平台的方案…

CS2 demo manager 安装

CS2DM CS Demo Managerhttps://cs-demo-manager.com/PostgreSQL&#xff08;CS2DM需要17以上&#xff09; EDB: Open-Source, Enterprise Postgres Database Managementhttps://www.enterprisedb.com/downloads/postgres-postgresql-downloads 新CS2dm现在打开是这样的&…

奇怪的异形选项卡样式、弧形边框选项卡

<template><div :class"$options.name"><div class"tab">默认选项卡</div><div class"tab" active>选中选项卡</div><el-divider /><el-tabs v-model"tabActiveName" tab-click"(t…

3.23 代码随想录第二十四天打卡

122.买卖股票的最佳时机II (1)题目描述: (2)解题思路: class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i) {result max(prices[i] - prices[i - 1], 0);}return result;} }; (3)总结: 1.假…

Python---数据分析(Pandas十一:二维数组DataFrame统计计算二)

1、std 用于计算 DataFrame 中数值的标准差。 DataFrame.std(axis0, skipnaTrue, ddof1, numeric_onlyFalse, **kwargs) 描述说明axis {0 或 ‘index’, 1 或 ‘columns’, None}, 默认为 0。这个参数决定了计算标准差是在哪个轴上进行&#xff1a; 如果 axis0 或 axisindex&…

OpenCV平滑处理:图像去噪与模糊技术详解

引言 在图像处理中&#xff0c;噪声是一个常见的问题&#xff0c;它可能来自于图像采集设备、传输过程或环境干扰。为了去除噪声并改善图像质量&#xff0c;平滑处理&#xff08;Smoothing&#xff09;是一种常用的技术。OpenCV提供了多种平滑处理方法&#xff0c;包括均值滤波…

使用Python将视频转化为gif

使用Python将视频转化为gif 一、前言二、准备三、测试 一、前言 最近想把喜欢的视频片段作成gif&#xff0c;就试着用Python做了下&#xff0c;感觉效果还行&#xff0c;这里做个记录。 二、准备 先下载安装对应的库&#xff0c;命令如下&#xff1a; pip install moviepy …

HTTP长连接与短连接的前世今生

HTTP长连接与短连接的前世今生 大家好&#xff01;作为一名在互联网摸爬滚打多年的开发者&#xff0c;今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时&#xff0c;对这些概念一头雾水&#xff0c;希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…

批量将 PPT 文档中的图片提取到文件夹

在 PPT 文档中我们可以插入很多的图片来丰富我们的幻灯片页面&#xff0c;但是当我们需要将 PPT 幻灯片中的图片提取出来的时候&#xff0c;会非常的麻烦&#xff0c;因为我们需要打开 PPT 然后将图片保存起来。会非常的耗费我们的时间和精力。今天给大家介绍的就是一种批量将 …

yolo目标检测算法在DJI上的研究分析(大纲)

yolo目标检测算法在DJI上的研究分析 面向边缘计算的实时目标检测系统设计与部署 第一章 绪论 1.1 研究背景与意义 目标检测技术需求&#xff1a; DJI设备&#xff08;如无人机、摄像头&#xff09;在安防、巡检、农业等场景中的广泛应用现有YOLO算法在高分辨率图像或资源受限…

MyBatisPlus(SpringBoot版)学习第二讲:基本CRUD

目录 1.BaseMapper 2. 基本CRUD 1. 插入一条记录 2. 删除 1>. 根据ID删除 2>. 根据实体&#xff08;ID&#xff09;删除 3>. 根据columnMap条件删除 4>. 根据entity条件删除 5>. 根据ID批量删除 3. 修改 1>. 根据ID修改 2>. 根据whereEntity条…

基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Bitcoin Thunderbolt 内测通道开启,加速比特币交易新时代

比特币作为全球领先的加密货币&#xff0c;一直占据着去中心化金融的核心地位。然而&#xff0c;随着比特币生态的不断扩展&#xff0c;其交易速度和扩容问题逐渐成为制约发展的关键瓶颈。为解决这一难题&#xff0c; 比特币雷电网络&#xff08;Bitcoin Thunderbolt&#xff0…

QT笔记----QCheckBox

文章目录 概要1、QCheckBox 的基本概念2、单个QCheckBox3、多个QCheckBox同时应用3.1、实现效果3.2、实现Demo 概要 在 Qt 应用程序开发中&#xff0c;QCheckBox 是一个常用的用户界面元素&#xff0c;它允许用户在两种状态&#xff08;选中和未选中&#xff09;之间进行切换&a…

GR00T N1——英伟达开源的通用人形VLA:类似Helix的快与慢双系统,且可类似ViLLA利用海量的无标注视频做训练

前言 就在昨天3.19日的凌晨&#xff0c;英伟达发布的GR00T N1还是很有含金量的(上午已有好几个朋友私我了)&#xff0c;由此可以看到很多相关工作的影子&#xff0c;比如helix π0 LAPA&#xff0c;具体而言&#xff0c;其具有双系统架构 VLM模块(系统2)通过视觉和语言指令解…