Java中Unsafe类

(1w字一篇理解透Unsafe类)Java魔法类:Unsafe详解 文章介绍了Unsafe类的概念,功能,使用方法,包括了内存操作,内存屏障,对象操作,数组操作,CAS操作,线程调度,Class操作,系统信息等。 阅读详情

Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得Java这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。
Unsafe基本都是Native方法构成,为java语言对底层操作提供很大支持(在很多java源码类中都可以看到它的身影如ConcurrentHashMap,AtomicBoolean,LockSupport等类)。

查看Unsafe源码可以发现,Unsafe类使用单例设计模式(通过static只在类加载时初始化实例对象)

Unsafe 提供了获取实例方法(但是条件比较苛刻)

    public static Unsafe getUnsafe() {
        Class var0 = Reflection.getCallerClass();
        //内部会检查该CallerClass是不是由系统类加载器`BootstrapClassLoader`加载  若是则获取Unsafe对象,否则抛出SecurityException异常
        if (!VM.isSystemDomainLoader(var0.getClassLoader())) {
            throw new SecurityException("Unsafe");
        } else {
            return theUnsafe;
        }
    }

异常信息: 

如果需要安全获取unsafe对象可以通过Java命令行命令-Xbootclasspath/a把调用Unsafe相关方法的类A所在jar包路径追加到默认的bootstrap路径中,使得A被引导类加载器加载,从而通过Unsafe.getUnsafe方法安全的获取Unsafe实例。

java -Xbootclasspath/a: ${path}   // 其中path为调用Unsafe相关方法的类所在jar包路径 

如果在非系统类加载器`BootstrapClassLoader`加载的类中使用Unsafe可以通过反射来获取该类实例对象

        //获取Unsafe 第一个字段属性 其实就是Unsafe实例对象
        Field field =Unsafe.class.getDeclaredFields()[0];

        field.setAccessible(true);
        //获取实例对象
        Unsafe unsafe =  (Unsafe)field.get(null);

Unsafe类获取对象的方式已然知道了,那么Unsafe具体提供了哪些功能呢?

Java源码中使用到Unsafe类处:

1:内存管理

DirectByteBuffer是Java用于实现堆外内存(直接内存)的一个重要类,通常用在通信过程中做缓冲池,如在Netty、MINA等NIO框架中应用广泛。DirectByteBuffer对于堆外内存的创建、使用、销毁等逻辑均由Unsafe提供的堆外内存API来实现。

2:CAS

线程安全类AtomicBoolean

3: 线程调度

LockSupport类:

线程挂起:

线程重启:

4:数组操作

AtomicIntegerArray类:

5:内存屏障

StampedLock类:

6:系统管理 

java.nio.Bits类 计算待申请内存所需内存页数量的静态方法,其依赖于Unsafe中pageSize方法获取系统内存页大小实现后续计算逻辑,该类在私包中,无法正常初始化

 

Java Unsafe 类详解 cg Unsafe是 Java 提供的一个类,包含一些可以直接操作内存和线程的底层方法。与其名字一致,这些方法并不安全,因为它们可以直接访问和修改内存,而不受 JVM 的管理和约束。因此,使用Unsafe可能导致程序崩溃,数据损坏,甚至是安全问题。在 JVM 中,通常对内存和线程操作进行严格的限制,以确保代码的安全性和稳定性。但在某些情况下,我们需要绕过这些限制,例如进行高效的内存操作、开发高性能的并发数据结构或实现一些底层框架功能。Unsafe。 阅读详情

相关推荐

Java魔法类Unsafe详解

而在volatile写入中,使用的StoreLoad屏障,该屏障确保Store1立刻刷新数据到内存,这一操作先于Load2及后续的装载指令,并且,StoreLoad屏障会使该屏障之前的所有内存访问指令,包括存储指令和访问指令全部完成之后,才执行该屏障之后的内存访问指令。在上面的代码中,首先读取一个class文件并通过文件流将它转化为字节数组,之后使用defineClass方法动态的创建了一个类,并在后续完成了它的实例化工作,流程如下图所示,并且通过这种方式创建的类,会跳过JVM的所有安全检查。

zhuangjiaxing的博客 1016

Java中的Unsafe类详解

Unsafe 类提供了一些能够绕过 Java 语言安全机制的方法,例如直接操作内存、CAS(比较并交换)操作、分配和释放内存等。这使得开发者可以在某些情况下获得更高的性能,但同时也需要承担更大的风险和责任。

JAVA开发区的博客 3799

多模态变体—ALIGN:高效的图像-文本学习

ALIGN 论文介绍了该模型的关键技术。无人工标注数据:使用互联网数据进行训练,不依赖人工清洗的数据集。高效的对比学习策略:采用大规模图像-文本配对数据,通过对比学习优化嵌入空间。支持零样本(zero-shot)学习:可以在没有专门训练的情况下执行多种任务,如分类、检索等。可扩展性强:ALIGN 采用高效的 CNN 或 Transformer 作为编码器,适用于大规模计算。

Azperk的博客 1218

java:Unsafe

底层的源码中,经常可见Unsafe,Unsafe类是java用于内存管理的类,但操作不当,可能导致内存泄漏等问题,官方亦不推荐过多使用Unsafe,故而名为Unsafe。

a232884c的博客 2073

LlamaIndex 入门实战

LlamaIndex是一个“数据框架”,用于帮助构建LLM应用程序。它提供了各种工具,包括数据连接器,用于摄取现有数据源和数据格式(API,PDF,文档,SQL等),以及用于将数据结构化(索引,图形)以便与LLM轻松使用的方式。此外,LlamaIndex还提供了高级的检索/查询接口,可以输入任何LLM输入提示,并返回检索到的上下文和增强知识的输出。它还允许与外部应用程序框架(如LangChain,Flask,Docker,ChatGPT等)轻松集成。

AIGC搞起 1万+

Blender地形建模实战:5步搞定Gazebo仿真地形(附避坑指南)

本文提供了一份详细的Blender地形建模实战指南,旨在帮助开发者快速创建Gazebo仿真地形。文章通过五个核心步骤,从环境准备、地形雕刻、模型优化导出,到创建Gazebo模型包及问题排错,系统讲解了如何将Blender中的地形模型成功导入Gazebo进行机器人仿真,并重点分享了关键的避坑经验。

weixin_28475533的博客 344

Java中的Unsafe类

介绍并总结了Unsafe的几类功能方法,比如并发相关,内存相关,Class相关,并举例说明

在路上 2932

FPGA 核脉冲梯形成型 Verilog 实现:从 MATLAB 到 50MHz 采样率部署

本文详细解析了FPGA实现核脉冲梯形成型的完整流程,从MATLAB仿真到50MHz采样率的Verilog硬件部署。重点探讨了梯形成型算法对负指数信号的优化处理,包括定点数量化、流水线架构设计及资源优化技巧,为核辐射探测与高能物理实验提供高效解决方案。

weixin_30920513的博客 389

Java 魔法类 Unsafe 详解

Unsafe详解

xuejun_1996的博客 1467

学习笔记:物理信息神经网络(PINN)

PINN 的强大在于它打破了传统数值方法的限制,将神经网络的非线性拟合能力与物理方程的严谨性结合起来。它在处理高维、数据稀缺、复杂物理约束的场景下尤其出色。当然,PINN 也有收敛慢、梯度消失等挑战,比如,复杂 PDE 可能导致梯度传播困难,收敛慢(梯度消失)、于具有快速变化特征的系统,如冲击波,标准 PINN 可能精度不足,需要改进策略,比如自适应采样或多尺度特征提取。但随着研究深入,这些问题正在不断被解决。物理或化学方程为什么往往是偏微分方程?什么是物理信息神经网络(PINN)?x_%7Bi%7D。

qq_52635735的博客 1万+

一个最简单的 ALV Tree 树控件例子,无需依赖任何第三方代码

此行代码声明报表程序,程序名称为。在 SAP ABAP 中,报表(report)程序表示该程序具有独立执行、输出及打印功能。在实际开发过程中可根据公司命名规范确定报表名称,例如销售报表、库存报表等。这段代码声明了一个结构类型。id:数据类型为char18,用于存放节点标识符。text:数据类型为char40,用于存放节点显示文本。在实际场景中,例如构造产品目录时,id可以表示产品编号,而text则可以显示产品名称,这样便于用户直观识别。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

Java双刃剑之Unsafe类详解

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。//获得对象锁//释放对象锁//尝试获得对象锁方法用于获得对象锁,用于释放对象锁,如果对一个没有被加锁的对象执行此方法,会抛出异常。方法尝试获取对象锁,如果成功则返回true,反之返回false。

2401_84103216的博客 1057

【C语言笔记初级篇】第一章:C语言快速入门及注意事项

(1)第一个C语言程序 A:利用vs2010写C语言程序 1:按以下步骤新建工程 2:添加源文件,“.c”文件 B:第一个C语言代码 1:以下是基本的C语言程序 2:由于没有设置连接器,所以打印结果没有显示,按照如下步骤链接控制台 (2)数据类型 A:基本数据类型及占用字节 B:一些概念的梳理 概念一:关于计算机的单位 位(bit):计算机通过电路的开关和闭合处理信息,电路通...

快乐江湖的博客 3737

Java Unsafe 类详解

Unsafe类在 Java 中提供了一种底层的操作机制,允许开发者直接访问和操作内存、线程和对象。尽管Unsafe提供了许多强大的功能,但由于其操作的不安全性,使用时需要非常谨慎。在实际开发中,应尽量避免滥用Unsafe,确保代码的安全性和稳定性。通过本文的介绍,我们了解了Unsafe的基本概念、工作原理以及它的各种应用场景。希望大家在使用Unsafe时能够做到谨慎使用,避免滥用,从而充分发挥其优势,同时规避潜在的风险。

专注Java和MySQL领域知识分享 1241

【AI智能体】Spring AI Tool 从使用到实战详解

Spring AI Tool

congge 5864

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

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

Java Unsafe类

是 JVM 自带的引导类加载器,负责加载核心 Java 类库,无法直接通过 Java 代码访问或操作它。它处于整个类加载器层次结构的顶层,通过双亲委派机制确保了 Java 核心类库的安全和稳定性。

qq_53395217的博客 1290

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java unsafe 类_Java的Unsafe类

本文转载自:https://www.cnblogs.com/pkufork/p/java_unsafe.html最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下。Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、Had...

weixin_39645343的博客 173

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java Unsafe类的使用

Unsafe类的作用 Unsafe类是rt.jar包中的类,它提供了原子级别的操作,它的方法都是native方法,通过JNI访问本地的C++库。它的出现是为了解决在高并发下的数据同步问题。synchronize关键字修饰的代码块被加了独占锁,相同时间只能有一个线程访问其中的内容,在高并发下这必然会导致大量线程挂起,从用户态转为内核态,带来很大的消耗而且操作效率低下。CAS算法的出现使得在不使用sy...

马一凡的博客 3550

Java Unsafe类 学习

1 Unsafe类介绍 JDK 的 rt.jar 包中的 sum.msic.Unsafe 类提供了硬件级别的原子性操作,Unsafe 类中的方法都是native 方法,它们使用 JNI 的方式访问本地C++ 实现库。 Unsafe类不属于Java标准,但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Hadoop、Kafka等。 使用Uns...

猎人在吃肉 995

java unsafe 类_说说Java的Unsafe类

本文主要内容Unsafe类介绍Unsafe的主要功能总结1、Unsafe类介绍第一次看到这个类时被它的名字吓到了,居然还有一个类自名Unsafe?读完本文,大家也能发现Unsafe类确实有点不那么安全,它能实现一些不那么常见的功能。Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题。过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的...

weixin_40001372的博客 134

java unsafe 类_Java Unsafe类的使用

Java Unsafe类的使用Unsafe类的作用Unsafe类是rt.jar包中的类,它提供了原子级别的操作,它的方法都是native方法,通过JNI访问本地的C++库。它的出现是为了解决在高并发下的数据同步问题。synchronize关键字修饰的代码块被加了独占锁,相同时间只能有一个线程访问其中的内容,在高并发下这必然会导致大量线程挂起,从用户态转为内核态,带来很大的消耗而且操作效率低下。CA...

weixin_30923011的博客 282

17. Java Unsafe 类的使用

本节对 Unsafe 类的使用进行讲解,上一小节内容已经对 Unsafe 类的常用方法有了大体的概括,本节主要内容点如下:Unsafe 类的简介,对 UnSafe 类有一个整体的认识;Unsafe 类的创建以及创建过程中避免的异常机制,这是开始使用 UnSafe 类的前提;了解 Unsafe 类操作对象属性方法的使用,这是本节内容的重点之一;了解 Unsafe 操作数组元素方法的使用,也是本节内容的重点之一。本节内容意在了解并掌握 Unsafe 类的常用方法的使用。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 1044

java unsafe 告警,Java安全之Unsafe类

搜索热词Java安全之Unsafe类0x00 前言前面使用到的一些JNI编程和Javaagent等技术,其实在安全里面的运用非常的有趣和微妙,这个已经说过很多次。后面还会发现一些比较有意思的技术,比如ASM和Unsafe这些。这下面就先来讲解Unsafe这个类的使用和实际当中的一些运用场景。0x01 Unsafe概述Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全...

weixin_42382944的博客 625

java unsafe park_Java中Unsafe类详解

http://www.cnblogs.com/mickole/articles/3757278.htmlJava不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:1、通过Unsafe类可以分配内存,可以释放内存;类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充...

weixin_36083434的博客 1080
上一篇: Java中的逃逸分析
下一篇: Java中引用的概念
F_Hello_World
博客等级 码龄11年 38粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值