jdk源码之Unsafe

 

前言/背景

在最近的学习当中,愈发感到很多知识点介于一种似懂非懂的尴尬阶段。也就有了一种开始写博客的冲动,开始新的学习之路。希望在这里总结自己的学习,同时能够得到大家的指正。

概述

这里只讨论jdk8及以前,jdk9克隆出一个新的 jdk.internal.misc.Unsafe 类来替代前者的功能,并且完全不暴露给用户。Unsafe类扩展了java语言的表达能力,便于在java层面可以实现原本需要在底层(C层)才能完成的操作。主要包括内存的申请/访问/释放、atomic/volatile等操作。该类设计成单例,并作了访问控制,不过我们可以通过反射拿到它。

 

源码/知识点

  • 内存分配:
    • 分配内存,重新分配内存,拷贝内存,释放内存
    • 获取内存地址,获取内存地址指向的整数,将整数写向指定的内存地址
  • 非常规实例化:不需要调用构造方法
  • 直接操作数组、普通对象、变量:可以通过指针、偏移量直接操作对象、变量
  • 多线程同步
    • monitorEnter、tryMonitorEnter、monitorExit
    • compareAndSwapObject、compareAndSwapInt、compareAndSwapLong
  • 线程的挂起和恢复:park与unpack方法
  • 内存屏障:用于避免指令重排序

总结

在我们的开发中不会直接使用到这个类,但在AQS、并发原子类,以及netty,kafaka底层实现中,都有这个类,所以了解学习这个开“后门”的类还是很有必要的。

参考链接

  • https://www.cnblogs.com/pkufork/p/java_unsafe.html
  • http://www.docjar.com/docs/api/sun/misc/Unsafe.html(源码地址)

 

转载于:https://www.cnblogs.com/lucas2/p/9279838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值