Java查漏补缺
魔法类Unsafe
Unsafe是sun.misc包下的一个类
它可以绕过JVM安全机制,直接操作内存
Unsafe = Java里的C语言指针为什么叫
Unsafe
因为他做的事绕过了JVM,很危险- 可以像C语言的指针一样,直接操作堆外内存,手动分配和释放
- 可以跳过访问控制(private也能改)
Unsafe功能使用
直接操作堆外内存(核心功能)
操作的内存不受GC管理CAS(无锁并发)
unsafe类里有CAS(CompareAndSwap)方法,可以实现无锁并发,
是AtomicInterger,ConcurrentHashMap的底层实现
本质就是CPU指令级别原子操作线程调度(park/unpark)
方法park/unpark可以实现线程的阻塞和恢复
可以实现ReentrantLock和AQS修改对象字段(可以绕过private控制)
unsafe.putInt(obj,offset,0)
可以修改private字段,不走setter和安全检查跳过构造方法实现类加载
User u= (User)unsafe.allocateInstance(User.class)
不会执行构造方法,也可以类加载创建实例
Unsafe在哪里用到了
JUC并发包
AtomicInterger-> CAS
park/unpark-> AQS
CAS + 直接内存操作 实现了ConcurrentHashMapNetty
使用堆外内存提高IO性能
由于它不安全且不是标准 API,JDK9 之后推荐使用 VarHandle 等方式替代。
- 标题: Java查漏补缺
- 作者: yin_bo_
- 创建于 : 2026-04-01 22:26:38
- 更新于 : 2026-04-06 18:26:15
- 链接: https://www.blog.yinbo.xyz/2026/04/01/面试题/Java查漏补缺/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。