JVM 02
今天是2025/03/23 19:07 day 10
总路线请移步主页Java大纲相关文章
今天进行JVM 3,4 个模块的归纳
首先是JVM的相关内容概括的思维导图

3. 类加载机制
加载过程
-
加载(Loading)
-
通过类全限定名获取类的二进制字节流(如从JAR包、网络、动态代理生成等)。
-
将字节流转化为方法区的运行时数据结构,生成
Class对象作为访问入口。
-
-
验证(Verification)
-
文件格式验证:检查魔数、版本号等是否符合JVM规范。
-
元数据验证:语义校验(如是否有父类、是否继承final类等)。
-
字节码验证:确保代码逻辑合法(如类型转换、跳转指令)。
-
符号引用验证:确保符号引用能正确解析到目标类/方法/字段。
-
-
准备(Preparation)
-
为静态变量(static修饰)分配内存(方法区),并赋默认零值(如int=0,引用=null)。
-
若字段被
final修饰且是基本类型/字符串常量,直接赋程序设定的初始值(无需等到初始化阶段)。
-
-
解析(Resolution)
-
将常量池中的符号引用(类、方法、字段的间接引用)替换为直接引用(内存地址偏移量)。
-
解析可能发生在初始化之前(静态绑定)或之后(动态绑定,如虚方法调用)。
-
-
初始化(Initialization)
-
执行类构造器
<clinit>()方法,合并类中所有静态变量的赋值动作和静态代码块。 -
JVM保证父类的
<clinit>()先于子类执行。 -
初始化是触发类加载的最终步骤(如
new、反射调用、主类加载等)。
-
类加载器
-
启动类加载器(Bootstrap ClassLoader)
-
由C++实现,加载
JAVA_HOME/lib下的核心类库(如rt.jar)。 -
唯一不继承
ClassLoader的加载器,Java代码中无法直接引用。
-
-
扩展类加载器(Extension ClassLoader)
-
Java实现,加载
JAVA_HOME/lib/ext目录的扩展类。 -
是
sun.misc.Launcher$ExtClassLoader的实例。
-
-
应用程序类加载器(Application ClassLoader)
-
加载用户类路径(ClassPath)下的类,是默认的类加载器。
-
由
sun.misc.Launcher$AppClassLoader实现。
-
-
自定义类加载器
-
继承
ClassLoader类,重写findClass()方法,实现从特定路径加载类。 -
典型场景:热部署、模块化加载、加密类文件解密。
-
双亲委派模型
-
工作原理: 子加载器收到加载请求后,先委派父加载器尝试加载,父加载器无法完成时,子加载器才自行加载。
-
优点:
-
避免类重复加载(如
java.lang.Object只会由Bootstrap加载一次)。 -
防止核心类被篡改(自定义的
java.lang.String不会被加载)。
-
-
打破双亲委派:
-
SPI机制(如JDBC驱动加载):使用线程上下文类加载器(TCCL)逆向委派。
-
OSGi模块化:自定义类加载器实现网状委派。
-
4. 执行引擎
解释器(Interpreter)
-
逐行解释执行字节码,无需等待编译,启动速度快。
-
适用于短生命周期或低频执行的代码(如一次性任务)。
JIT编译器(Just-In-Time)
-
C1编译器(Client Compiler)
-
轻量级优化,编译速度快,适合对启动速度敏感的应用(如GUI程序)。
-
优化手段:方法内联、去虚拟化、冗余消除。
-
-
C2编译器(Server Compiler)
-
深度优化,生成高效本地代码,适合长时间运行的服务端应用。
-
优化手段:逃逸分析、锁消除、循环展开。
-
-
分层编译(Tiered Compilation)
-
JDK7+默认策略,结合C1和C2:
-
Level 0:解释执行。
-
Level 1~3:C1编译(带基础性能监控)。
-
Level 4:C2编译(激进优化)。
-
-
通过
-XX:+TieredCompilation启用。
-
热点代码检测
-
方法调用计数器:统计方法调用次数,触发JIT编译(阈值:Client模式1500次,Server模式10000次)。
-
回边计数器:统计循环体执行次数,触发OSR(栈上替换)编译。
-
热度衰减:计数器半衰期(
-XX:CounterHalfLifeTime),避免长期未触发的代码占用资源。
编译优化技术
-
方法内联(Inlining)
-
将小方法(如Getter/Setter)直接嵌入调用处,减少栈帧开销。
-
受
-XX:MaxInlineSize(默认35字节)控制。
-
-
逃逸分析(Escape Analysis)
-
判断对象是否仅在方法内部使用(未逃逸),若成立则:
-
栈上分配:对象直接在栈上分配,避免堆内存压力。
-
标量替换:将对象拆分为基本类型字段,消除对象头开销。
-
-
-
锁消除(Lock Elision)
-
基于逃逸分析,若锁对象未逃逸(线程私有),直接移除同步操作。
-
本地方法接口(JNI)
-
允许Java代码调用C/C++编写的本地方法(如
native修饰的方法)。 -
典型场景:
-
操作系统底层操作(如文件IO)。
-
高性能计算(如矩阵运算)。
-
-
缺点:
-
破坏平台无关性。
-
JNI调用开销较大(需切换上下文)。
-
-
类加载机制通过双亲委派保障安全性和一致性,支持动态扩展(如SPI)。
-
执行引擎通过解释器与JIT编译器的协同,平衡启动速度和运行效率,结合逃逸分析等优化技术提升性能。
相关文章:
JVM 02
今天是2025/03/23 19:07 day 10 总路线请移步主页Java大纲相关文章 今天进行JVM 3,4 个模块的归纳 首先是JVM的相关内容概括的思维导图 3. 类加载机制 加载过程 加载(Loading) 通过类全限定名获取类的二进制字节流(如从JAR包、网络、动态…...
C++ :顺序容器
一、顺序容器概述 顺序容器通过元素在容器中的线性存储顺序来维护数据,允许通过位置(下标)访问元素。标准库提供6种核心顺序容器: 容器类型头文件底层结构特点vector<vector>动态数组快速随机访问,尾部高效增…...
身份证信息要素真伪认证-身份证二、三要素实名接口
在数字化时代,身份验证的准确性和安全性至关重要。身份证二、三要素实名接口作为一种高效且可靠的身份验证工具,正逐渐成为众多行业确保信息真实性、防范欺诈行为的关键手段。 身份证二、三要素实名接口主要验证身份证号码、姓名以及证件头像是否一致。通…...
pyecharts在jupyter notebook中不能够渲染图表问题。
在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。 1、原因分析 2、解决办法 如果是使用的虚拟环境,需要下你提前激活虚拟环境,再进行下列操作。 因为需要…...
【线程安全的单例模式和STL是否是线程安全/智能指针是否是线程安全】
文章目录 一、单例模式的特点二、饿汉模式实现单例三、懒汉模式实现单例四、STL线程安全吗?五、智能指针线程安全吗? 一、单例模式的特点 一个类,只应该实例化了一个对象,就是单例。 二、饿汉模式实现单例 举个饿汉模式的例子&…...
C++11 标准库 `find` 与 `find_if` 详解
一、std::find 函数 功能:在指定范围内查找特定值,返回第一个匹配元素的迭代器;若未找到,返回 end() 迭代器。 原型: template <class InputIt, class T> InputIt find(InputIt first, InputIt last, const T&…...
每日总结3.24
第十届蓝桥杯大赛软件赛省赛C/C 大学 B 组 183.完全二叉树的权值(找规律,临界值) #include <bits/stdc.h> using namespace std; int a[1000005]; int main() { int m;int d; cin>>m; int sum;int maxn0; for(int i1;i&…...
Redis分布式寻址算法
分布式寻址算法是分布式系统中用于确定数据应该存储在哪个节点的算法。这些算法对于实现高效的数据存取、负载均衡和系统扩展性至关重要。以下是几种常见的分布式寻址算法的解释: 1. Hash 算法 原理:通过哈希函数将数据的键(Key)…...
kotlin init执行顺序
一 代码 kotlin: package test.fclass Test1 { }class TestInit(s: String, i: Int) {var name: String? nullvar age 0private var a :Int 1init {this.name sthis.age iprintln("init代码块: $name, $age")}}转成java // Test1.java package test.f;import…...
详解Spark executor
在 Apache Spark 中,Executor(执行器) 是运行在集群工作节点(Worker Node)上的进程,负责执行具体的计算任务并管理数据。它是 Spark 分布式计算的核心组件之一,直接决定了任务的并行度和资源利用…...
单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
RAM 与 内存 RAM(Random Access Memory,随机存取存储器) 和 内存 这两个术语通常是 同义词,即 内存 常常指的就是 RAM。 1. RAM(内存) 定义:RAM 是计算机中的 主存储器,用于临时存…...
NVIDIA V100显卡支持Tensor Core技术,而Granite-3.1-8B模型在适当的条件下可以利用Tensor Core来加速数据处理
NVIDIA V100显卡支持Tensor Core技术,而Granite-3.1-8B模型在适当的条件下可以利用Tensor Core来加速数据处理。 要利用Tensor Core加速,需要满足以下一些条件: 软件支持:所使用的深度学习框架(如PyTorch、TensorFlo…...
《深度剖析:BERT与GPT——自然语言处理架构的璀璨双星》
在自然语言处理(NLP)的广袤星空中,BERT(Bidirectional Encoder Representations from Transformers)与GPT(Generative Pretrained Transformer)系列模型宛如两颗最为耀眼的星辰,引领…...
《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1
AI大模型趣味实战 第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1 摘要 在信息爆炸的时代,如何高效获取和筛选感兴趣的新闻内容成为一个现实问题。本文将带领读者通过Python和Flask框架,结合大模型的强大…...
JS 算术运算符
JavaScript 算术运算符 一、基础运算符及行为特性 1. 四则运算 加法 + 数值相加:5 + 3 → 8字符串拼接(隐式类型转换):"5" + 3 → "53"混合类型优先级:1 + true → 2(true转1)减法 -、乘法 *、除法 / 纯数值运算:5 - "2" → 3(字符串转…...
基于Spring Boot的健身房管理系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
WSL Linux 子系统download
WSL各Linux 子系统下载 WSL Linux 最新下载 微软应用商店 | Microsoft StoreWSL Linux 历史版下载复制应用商店Linux地址到转换下载地址https://store.rg-adguard.net/ Version百度网盘离线下载OracleLinux提取...
Qt中通过QLabel实时显示图像
Qt中的QLabel控件用于显示文本或图像,不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示: Widgets_Test.h: class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…...
Redis GEO 命令详解:轻松实现“附近的人“功能
目录 引言 Redis GEO命令概述 什么是GEO命令? 主要命令详解 命令应用示例 添加地点信息 查询两地距离 查询附近的城市 实现"查找附近的人"功能 功能需求与实现思路 基本需求 实现思路 命令实现方案 存储用户位置 查询附近的用户 Java代码实…...
基于springboot的校园资料分享平台(048)
摘要 随着信息互联网购物的飞速发展,国内放开了自媒体的政策,一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求,创建了一个计算机管理校园资料分享平台的方案…...
模板方法设计模式在事件处理中的应用
在软件设计中,设计模式提供了一种通用的解决方案来应对特定类型的问题。本文将介绍模板方法设计模式,并展示如何在事件处理场景中应用这一模式。我们将以 AbstractEventHandler 类为例,探讨其如何通过模板方法模式来实现灵活的事件处理机制。…...
CS2 demo manager 安装
CS2DM CS Demo Managerhttps://cs-demo-manager.com/PostgreSQL(CS2DM需要17以上) 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…...
elasticsearch 通用笔记
文章目录 一、前言二、内容说明1、目录简介2、本文例子前提内容 三、操作内容1、设置ES为服务2、查看健康度参数解析 3、索引相关查询3.1、查询指定索引内容3.1.1、匹配查询3.1.2、精确匹配(不尝试分词)3.1.3、范围查询3.1.4、id查询3.1.5、通配符及前缀…...
Java 24 学习
一、Java 24的核心新功能 1、语言特性增强 模式匹配与原始类型支持(JEP 488):允许在instanceof和switch中使用原始类型,简化模式匹配代码,尤其适用于AI推理场景912。 灵活的构造函数体(JEP 492ÿ…...
【前端 vue 或者麦克风,智能语音识别和播放功能】
前端 vue 或者麦克风,智能语音识别和播放功能 1. 终端安装 npm install recordrtc2.引入 import RecordRTC from recordrtc3.html(根据自己业务更改) <div class"Page"><el-form ref"mainFormRef" class&qu…...
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。这个参数决定了计算标准差是在哪个轴上进行: 如果 axis0 或 axisindex&…...
OpenCV平滑处理:图像去噪与模糊技术详解
引言 在图像处理中,噪声是一个常见的问题,它可能来自于图像采集设备、传输过程或环境干扰。为了去除噪声并改善图像质量,平滑处理(Smoothing)是一种常用的技术。OpenCV提供了多种平滑处理方法,包括均值滤波…...
【LeetCode】大厂面试算法真题回忆(36)--相同数字的积木游戏
题目描述 小华和小薇一起通过玩积木游戏学习数学。他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的距离…...
