HotSpot虚拟机中的intrinsic是指什么?

Java注解之@IntrinsicCandidate IntrinsicCandidate是一个Java注解,用于标记一个方法或构造函数是一个内在的候选方法,即该方法或构造函数是由编译器自动生成的,而不是由开发人员手动编写的。例如,JVM可以将使用@IntrinsicCandidate注解的方法替换为JVM内置的方法,如System.arraycopy(),以提高数组复制的效率。具体来说,当JVM检测到使用了@IntrinsicCandidate注解的方法时,它会尝试将该方法替换为更高效的内置方法,以提高程序的性能。 阅读详情

前言

本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

正文

HotSpot 虚拟机将对标注了@HotSpotIntrinsicCandidate注解的方法的调用,替换为直接使用基于特定 CPU 指令的高效实现。
这些方法我们便称之为 intrinsic。

intrinsic 的实现

  1. 桩程序,可以在解释执行或者即时编译生成的代码中使用。
  2. 特殊的 IR 节点。即时编译器将在方法内联过程中,将对 intrinsic 的调用替换为这些特殊的 IR 节点,并最终生成指定的 CPU 指令。

在编译原理课程中,我们通常将编译器分为前端和后端。
其中,前端会对所输入的程序进行词法分析、语法分析、语义分析,然后生成中间表达形式,也就是 IR(Intermediate Representation )

已有 intrinsic 简介

最新版本的 HotSpot 虚拟机定义了三百多个 intrinsic。

在这三百多个 intrinsic 中,有三成以上是 Unsafe 类的方法。

关于 Unsafe 类请参考我的这篇博客——一篇文章搞懂 Java 中的 Unsafe 类

不过,我们一般不会直接使用 Unsafe 类的方法,而是通过 java.util.concurrent 包来间接使用。

举个例子,Unsafe 类中经常会被用到的便是 compareAndSwap 方法(Java 9+ 更名为 compareAndSet 或 compareAndExchange 方法)。

在 X86_64 体系架构中,对这些方法的调用将被替换为lock cmpxchg 指令,也就是原子性更新指令。

除了 Unsafe 类的方法之外,HotSpot 虚拟机中的 intrinsic 还包括下面的几种。

1. StringBuilder 和 StringBuffer 类的方法。

HotSpot 虚拟机将优化利用这些方法构造字符串的方式,以尽量减少需要复制内存的情况。

JDK9 的字符串底层原理是什么?

2. String类、StringLatin1类、StringUTF16类和Arrays类的方法。

HotSpot 虚拟机将使用 SIMD 指令(single instruction multiple data,即用一条指令处理多个数据)对这些方法进行优化。

举个例子,Arrays.equals(byte[], byte[])方法原本是逐个字节比较,在使用了 SIMD 指令之后,可以放入 16 字节的 XMM 寄存器中
(甚至是 64 字节的 ZMM 寄存器中)批量比较。

关于 SIMD 可以参考我的这篇博客——即时编译器的向量化优化是什么?SIMD 到底是什么?

3. 基本类型的包装类、Object类、Math类、System类中各个功能性方法,反射 API、MethodHandle类中与调用机制相关的方法,压缩、加密相关方法。

自动驾驶开发者必看:如何用Impromptu VLA数据集提升模型在乡村道路的表现(附实战代码) 本文为自动驾驶开发者提供了利用Impromptu VLA开源数据集提升模型在乡村道路等极端场景表现的实战指南。该数据集专门针对边界模糊道路、非常规障碍物等非结构化环境,通过精选的8万多个极端场景片段,帮助模型弥补数据分布偏差。文章详细介绍了环境搭建、数据准备、模型微调及性能评估的全流程,并附有实战代码,旨在系统性提升自动驾驶系统在长尾场景下的鲁棒性。 阅读详情

相关推荐

GMSL2 协议与技术 第一部分

默认情况下,自动的链路配置功能是使能的(AUTO_LINK = 1),这表示器件将试图锁定在single link模式,它将自动监测是否PHY-A或者PHY-B已经连接到了远端的器件,并且使能这个已连接的PHY,如果PHY-A和PHY-B同时连接到了远端的器件,它将使用首先探测到的连接进入single link 模式。另外,链路失锁同样也会发生在串行器或者解串器掉电的情况下,掉电的器件重新上电后,链路锁定会自动重新建立,而视频数据和控制通道的配置需要重新写入寄存器。

八哥望春的博客 4945

关于Java的@HotSpotIntrinsicCandidate和@IntrinsicCandidate注解

被它标记的方法表明JVM会对其做一些增强处理以提高它的执行性能,比如可能手工编写汇编或手工编写编译器中间语言来替换该方法的实现。虽然这里被声明为 native 方法,但是它跟 JDK 中其他的本地方法实现地方不同,固有方法会在 JVM 内部实现,而其他的会在 JDK 库中实现。在调用方面,由于直接调用 JVM 内部实现,不走常规 JNI lookup,所以也省了开销。

qq_41084438的博客 748

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 427

【17】HotSopt虚拟机的intrinsic

intrinsic的方法除了原本较为低效的JDK方法以外,还会额外维护一套高效实现。但不同版本的虚拟机所实现的intrinsic(即若当前版本的JVM刚好实现了这个intrinsic方法,则使用高效方法,否则会降级为抵消的JDK版本)不少标记为intrinsic的方法都是native方法,原本对这些native方法的调用需要经过JNI(Java native interface),性能开销巨大,经过即时编译器的intrinsic优化,这部分JNI开销将消失不见。在Hotspot虚拟机中,所有被注解。

成年老猿的专栏 634

从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数

本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。

weixin_33737134的博客 521

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 546

HotSpotIntrinsicCandidate

即时编译器是 Java 虚拟机的一部分,它的作用是将字节码(Bytecode)编译成特定平台的机器码,以提高程序的运行效率。HotSpot 是 Oracle JDK 和 OpenJDK 使用的 JIT 编译器。内联是一种编译优化技术,它将一个方法的代码直接插入到调用该方法的地方,而不是生成调用指令。这样可以减少方法调用的开销,并且允许编译器对代码进行更深层次的优化。

赵KK的博客 783

【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测

最后,比较AGRI观测反射率和查找表计算的反射率反演得到的1小时分辨率AOD数据。然后,使用广泛应用的MODIS DT和DB产品进行对比,图 5显示了它们逐像元尺度的对比,AGRI LaGA算法可以捕捉亚洲地区AOD高低值空间分布格局,比如南亚次大陆、中南半岛、塔克拉玛干沙漠和华北平原是AOD高值区域(平均AOD高于0.3),中国西北、中国南方、中国东北和韩国地区为AOD中值地区(平均AOD在0.2到0.3之间),北纬45度以上以及日本地区为AOD低值区域(平均AOD小于0.2),与全球平均AOD值接近。

JData_Engineer的博客 372

HotSpot虚拟机的intrinsic

最新版本的HotSpot虚拟机定义了三百多个intrinsic。在这三百多个intrinsic中,有三成以上是Unsafe类的方法。不过,我们一般不会直接使用Unsafe类的方法,而是通过包来间接使用。举个例子,Unsafe类中经常会被用到的便是方法(Java 9+更名为或方法)。在X86_64体系架构中,对这些方法的调用将被替换为指令,也就是原子性更新指令。除了Unsafe类的方法之外,HotSpot虚拟机中的intrinsic还包括下面的几种。和类的方法。

qq_33240556的博客 1094

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

该系统的核心是基于STM32F103RCT6微控制器,这是一种高性能、低功耗的嵌入式处理器,适用于各种复杂的控制和数据处理任务。系统利用先进的传感器技术,如光电传感器PulseSensor模块来准确测量人体脉搏血氧饱和度及心率(PPG),同时采用AD8232生物电信号采集模块捕捉并处理人体的心电图信号(ECG),从而全面反映用户的心脏活动状态。

1万+

宇树G1开发实践--PPT汇报(遥控版)

本文介绍了一种基于遥控器交互的机器人演示控制系统。系统通过DDS中间件接收遥控器信号,采用位掩码边沿检测技术实现按键精准响应,将不同按键映射为播放控制命令(暂停/重播、跳转、跳过等)。核心交互逻辑包含主播放循环、命令处理和暂停机制,支持播放过程中的实时控制。与自动顺序播放版相比,该系统显著提升了演示灵活性,适用于需要人机互动的演讲场景。使用前需确保网络连接和设备安全,并熟悉按键功能映射。该系统实现了专业级的人机协同演示体验。

m0_47999117的博客 680

JVM——HotSpot虚拟机的intrinsic

JVM——HotSpot虚拟机的intrinsic:从字节码到CPU指令的性能飞跃

从知识输入到知识输出 1052

ICC2 user guide(二)Placement and Optimization

ICC2 place阶段user guide

m0_61544122的博客 9214

【随便聊聊 JVM原理】 虚拟机做的那些优化 - intrinsic

记录了我所了解的JVM intrinsic底层相关

Genmer的博客 1910

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

全网最新最全的Java即时编译器优化手段大全

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 JIT 对 Java 编译的基本单元是整个方法,通过对方法调用的计数统计,甄别出热点方法,编译为本地代码。 常见的优化手段有方法内联,去虚化,基于逃逸分析的栈上分配,锁消除和标量替换,字段读取存储优化,死代码消除,和循环优化相关的循环判断外提以及循环剥离, 向量化优化,还有HotSpot 虚拟机中的 in

Shockang的博客 4万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

即时编译器的向量化优化是什么?SIMD 到底是什么?

前言 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定Java虚拟机 正文 向量化优化借助的是 CPU 的 SIMD 指令,即通过单条指令控制多组数据的运算。 它被称为 CPU 指令级别的并行。 HotSpot 虚拟机运用向量化优化的方式 第一种是使用 HotSpot intrinsic,在调用特定方法的时候替换为使用了 SIMD 指令的高效实现。 Intrinsic 属于点覆盖,

Shockang的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

模块二 高效实现

在前面的文章中,我曾使用了不少工具来辅助讲解,也收到了不少同学留言,说不了解这些工具,不知道都有什么用,应该怎么用。那么今天我便统一做一次具体的介绍。本篇代码较多,你可以点击文稿查看。今天我主要介绍了 Java 的内存模型。Java 内存模型通过定义了一系列的 happens-before 操作,让应用程序开发者能够轻易地表达不同线程的操作之间的内存可见性。在遵守 Java 内存模型的前提下,即时编译器以及底层体系架构能够调整内存访问操作,以达到性能优化的效果。

小小博客 471

(八)向量化

public class Foo { public void foo(byte[] src,byte[] dst){ for(int i=0;i<src.length/4;i+=4){ dst[i]=src[i]; dst[i+1]=src[i+1]; dst[i+2]=src[i+2]; ...

wuchengguo0671的博客 320

深入拆解 Java 虚拟机

开篇词 | 为什么我们要学习Java虚拟机? 01 | Java代码是怎么运行的? 02 | Java的基本类型 03 | Java虚拟机是如何加载Java类的? 04 | JVM是如何执行方法调用的?(上) 05 | JVM是如何执行方法调用的?(下) 06 | JV...

weixin_34406796的博客 130

深入解析@IntrinsicCandidate:Java性能优化的秘密武器

本文深入解析了Java性能优化的秘密武器@IntrinsicCandidate注解,揭示了其在JDK内部方法中的特殊作用。通过触发JVM的深度优化,如将Java方法替换为高效的本地代码,显著提升性能。文章结合实战案例,展示了在字符串操作和数学运算中的性能提升,并指出了平台兼容性和调试复杂度等注意事项,为开发者提供了优化Java应用的最佳实践。

weixin_33670786的博客 259

JVM详解之:HotSpot VM中的Intrinsic methods

文章目录简介什么是Intrinsic Methods内置方法的特点多样性兼容性java语义的扩展Hotspot VM中的内置方法intrinsic方法和内联方法intrinsic方法的实现Graal总结 简介 内置方法是什么呢?它和inline method有什么关系呢?内置方法是怎么实现的呢?所有的问题都可以在本文找到答案。 什么是Intrinsic Methods 什么是内置方法呢? 维基百科给出的定义是这样的: 在计算机软件中,按照编译器理论,固有方法(或内置方法)是可在给定编程语言中使用的方法,该编

程序那些事 2万+

hotspot标签 js_HotSpot VM中的Intrinsic methods | 程序那些事

简介内置方法是什么呢?它和inline method有什么关系呢?内置方法是怎么实现的呢?所有的问题都可以在本文找到答案。什么是Intrinsic Methods什么是内置方法呢?维基百科给出的定义是这样的:在计算机软件中,按照编译器理论,固有方法(或内置方法)是可在给定编程语言中使用的方法,该编程语言的实现由编译器专门处理。通常,它可以将自动生成的指令序列替换为原始方法调用,类似于内联方法。与内...

weixin_35591093的博客 139

java intrinsic_JVM详解之:HotSpot VM中的Intrinsic methods

简介内置方法是什么呢?它和inline method有什么关系呢?内置方法是怎么实现的呢?所有的问题都可以在本文找到答案。什么是Intrinsic Methods什么是内置方法呢?维基百科给出的定义是这样的:在计算机软件中,按照编译器理论,固有方法(或内置方法)是可在给定编程语言中使用的方法,该编程语言的实现由编译器专门处理。通常,它可以将自动生成的指令序列替换为原始方法调用,类似于内联方法。与内...

weixin_33369808的博客 272

JDK 16新特性:@IntrinsicCandidate注解如何提升Java性能(附HotSpot VM优化实例)

本文深入解析了JDK 16引入的@IntrinsicCandidate注解如何作为HotSpot VM的性能优化“契约”,将高频Java方法调用(如System.arraycopy、Integer.bitCount)替换为高度优化的机器指令,从而显著提升程序性能。文章通过HotSpot VM优化实例,阐述了内在方法的机制、约束及其对开发者编写高性能代码的实践启示。

beer8的博客 156
上一篇: 一篇文章搞懂逃逸分析,栈上分配,标量替换,同步消除,锁消除之间的区别
下一篇: JDK9 的字符串底层原理是什么?
Shockang
Shockang 优质创作者: 大数据技术领域 优质创作者: 大数据技术领域
博客等级 码龄11年 1万+粉丝 660原创
评论 32
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值