您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

可变修改成员变量的性能 {php源码}

  • 时间:2022-09-14 00:15 编辑: 来源: 阅读:281
  • 扫一扫,手机访问
摘要:可变修改成员变量的性能 {php源码}
今天偶然看到了ConcurrentLinkedQueue的内部类。节点,发现它的两个成员变量item,next被volatile修改了,赋值是由sun的misc包下的UNSAFE类做的。 我很好奇,为什么会有这样的操作?(个人预计是性能考虑)。这里有一个测试。 UNSAFE类的含义:sun.misc.Unsafe是JDK内部使用的工具类。 它将Java的少量“不安全”功能暴露给Java层代码,使JDK可以更多地使用Java代码来实现少量原本与平台相关、只能使用原生语言(如C或C++)才能实现的功能。 这个类不应该在JDK核心类库之外使用。 JVM的实现可以自由选择如何实现Java对象的“布局”,即Java对象的所有部分都放在内存的什么地方,包括对象的实例字段和少量元数据。 sun.misc.Unsafe中访问对象字段的方法给出了对象布局的大致轮廓。它提供了objectFieldOffset()方法来获取一个字段相对于Java对象“起始地址”的偏移量,还提供了getInt、getLong、getObject等方法,可以通过使用前面获取的偏移量来访问Java对象的一个字段。 Oracle/Sun HotSpot VM使用的不安全对象可以参考本博客:http://mishadoff . com/blog/Java-magic-part-4-Sun-dot-misc-dot-Unsafe/experiment:1。unsafe.putObject(this,ItemOffset,item)直接在对象的itemOffset位置设置item的引用(超过访问权限)2。unsafe.putorderobject (this,next offset,val)将item的引用设置在对象的item偏移量位置,但是,该方法的可见性比直接使用putObject方法稍低,其他线程需要一段时间才能看到putOrderedObject使用了store-store barrier。而且putObject也会用到存储加载屏障(如果你不了解Java中的指令屏障,可以直接参考Java并发编程的艺术)。我参考了ConcurrentLinkedQueue类的内部类写了一个类似的类,如下:class unsafe node 我愉快地运行了测试用例,结果立即报告了一个错误...have_no_choice.png //不安全赋值性能测试simple date format SDF = new simple date format(" yyyy-mm-DD HH:mm:ss ");system . out . println(SDF . format(new Date()));for(int I = 0;我& lt整数。MAX _ VALUEi++){ UnsafeNode & lt;整数& gtnode = new UnsafeNode & lt& gt㈠;} system . out . println(SDF . format(new Date()));Unsafe_Fail.png嗯,觉得我不安全.....正如Unsafe类的注释中所写的:尽管该类和所有方法都是公共的,但该类的使用是有限的,因为只有受信任的代码才能获得它的实例。我只能通过反射做到:field the unsafe instance = unsafe . class . getdeclaredfield(" the unsafe ");theunsafeinstance . set accessible(true);sun . misc . UNSAFE UNSAFE =(UNSAFE)theunsafeinstance . get(UNSAFE . class);测试节点,非节点代码更改如下:类不安全节点 Unsafe_Success.png我会用普通的赋值方法来完成volatile变量的赋值。新的数据结构节点类如下:ClassNormalNode 下次,我会告诉你魔法发生的来源。 Sun.misc.Unsafe类,做不安全文章详解。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部