java中的Unsafe

简书 占小狼
转载请注明原创出处,谢谢!

前言

Java最初被设计为一种安全的受控环境。尽管如此,HotSpot还是包含了一个后门sun.misc.Unsafe,提供了一些可以直接操控内存和线程的底层操作。Unsafe被JDK广泛应用于java.nio和并发包等实现中,这个不安全的类提供了一个观察HotSpot JVM内部结构并且可以对其进行修改,但是不建议在生产环境中使用。

如何使用

Unsafe类是如此地不安全,以至于JDK开发者增加了很多特殊限制来访问它。

  1. 私有的构造器
  2. 工厂方法getUnsafe()的调用器只能被Bootloader加载,否则抛出SecurityException 异常

不过,我们可以通过反射机制轻松获取Unsafe的一个实例。

public static Unsafe getUnsafe() {
   try {
           Field f = Unsafe.class.getDeclaredField("theUnsafe");
           f.setAccessible(true);
           return (Unsafe)f.get(null);
   } catch (Exception e) { 
       /* ... */
   }
}

一些有用的方法

  1. objectFieldOffset:能够获取到指定实例变量的在对象内存中的偏移量
long offset = UNSAFE.objectFieldOffset(UnsafeTest.class.getDeclaredField("state"));
  1. compareAndSwapInt:通过比较并替换的机制,修改指定偏移量内存的值
UNSAFE.compareAndSwapInt(unsafeTest, offset, 0, 1)
  1. park:挂起某一线程
  2. unpark:唤醒某一线程

未完...

END。
我是占小狼。
在魔都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
读完我的文章有收获,记得关注和点赞哦,如果非要打赏,我也是不会拒绝的啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 10,701评论 1 34
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,494评论 11 349
  • 姓名:周君会 学号:17011210526 转载自: http://www.jianshu.com/p/...
    lotus儿阅读 6,192评论 1 9
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 6,445评论 0 8
  • 四个收获 了解了管理效果的知识,知道通过管理效果的知识可以应用到不同的领域去解决问题。 每一个阅读层次,都有状态,...
    奋翼阅读 3,401评论 0 49

友情链接更多精彩内容