JEP-142: Reduce Cache Contention on Specified Fields

用在类上

类的代码

 @Contendedpublic static class ContendedTest2 {private Object plainField1;private Object plainField2;private Object plainField3;private Object plainField4;}

对象的大小

  TestContended$ContendedTest2: field layoutEntire class is marked contended@140 --- instance fields start ---@140 "plainField1" Ljava.lang.Object;@144 "plainField2" Ljava.lang.Object;@148 "plainField3" Ljava.lang.Object;@152 "plainField4" Ljava.lang.Object;@288 --- instance fields end ---@288 --- instance ends ---

在类的前后各加128字节

用在field上

    public static class ContendedTest1 {@Contendedprivate Object contendedField1;private Object plainField1;private Object plainField2;private Object plainField3;private Object plainField4;}
   TestContended$ContendedTest1: field layout@ 12 --- instance fields start ---@ 12 "plainField1" Ljava.lang.Object;@ 16 "plainField2" Ljava.lang.Object;@ 20 "plainField3" Ljava.lang.Object;@ 24 "plainField4" Ljava.lang.Object;@156 "contendedField1" Ljava.lang.Object; (contended, group = 0)@288 --- instance fields end ---@288 --- instance ends ---

在变量的前后各加128字节

用在多个field上

    public static class ContendedTest4 {@Contendedprivate Object contendedField1;@Contendedprivate Object contendedField2;private Object plainField3;private Object plainField4;}
   TestContended$ContendedTest4: field layout@ 12 --- instance fields start ---@ 12 "plainField3" Ljava.lang.Object;@ 16 "plainField4" Ljava.lang.Object;@148 "contendedField1" Ljava.lang.Object; (contended, group = 0)@280 "contendedField2" Ljava.lang.Object; (contended, group = 0)@416 --- instance fields end ---@416 --- instance ends ---

两个变量总共padding 了3次,两个变量中间一次,第一个变量前和第二个变量后,每次都是128字节。

分组,注释中value的作用

    public static class ContendedTest5 {@Contended("updater1")private Object contendedField1;@Contended("updater1")private Object contendedField2;@Contended("updater2")private Object contendedField3;private Object plainField5;private Object plainField6;}
   TestContended$ContendedTest5: field layout@ 12 --- instance fields start ---@ 12 "plainField5" Ljava.lang.Object;@ 16 "plainField6" Ljava.lang.Object;@148 "contendedField1" Ljava.lang.Object; (contended, group = 12)@152 "contendedField2" Ljava.lang.Object; (contended, group = 12)@284 "contendedField3" Ljava.lang.Object; (contended, group = 15)@416 --- instance fields end ---@416 --- instance ends ---

同组的变量之间不padding,不同组之间的padding规则和上面用在多个field上一样。

转自JEP的@sun.misc.contended行为说明相关推荐

  1. Random(二)什么是伪共享?@sun.misc.Contended注解

    目录 1.背景简介 2.伪共享问题 3.问题解决 4.JDK使用示例 1.背景简介 我们知道,CPU 是不能直接访问内存的,数据都是从高速缓存中加载到寄存器的,高速缓存又有 L1,L2,L3 等层级. ...

  2. 什么是伪共享?Java8如何使用@sun.misc.Contended避免伪共享?

    什么是伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变 ...

  3. 聊聊java8中的@sun.misc.Contended与伪共享

    "持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情" @[toc] 在前面学习ConcurrentHashMap的size方法的过程中 ...

  4. Java8的@sun.misc.Contended注解解决伪共享问题

    本文源自转载:Java8的@sun.misc.Contended注解 目录 一.@sun.misc.Contended 介绍 二.单独使用一个缓存行有什么作用--避免伪共享 三.@sun.misc.C ...

  5. @sun.misc.Contended 解决伪共享问题

    先来看下什么叫做伪共享,转载自并发编程网 – ifeve.com 链接地址: 伪共享(False Sharing) 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字 ...

  6. Java8的@sun.misc.Contended注解

    @sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line). 这 ...

  7. @sun.misc.Contended避免伪共享(false sharing)

    转载自:http://www.myexception.cn/program/1630142.html Java8中使用sun.misc.Contended注解来避免伪共享(false sharing) ...

  8. Java8中用sun.misc.Contended避免伪共享(false sharing)

    转自:http://budairenqin.iteye.com/blog/2048257 关于伪共享这个概念,请先参照http://ifeve.com/falsesharing/ 伪共享的样子: Ja ...

  9. @sun.misc.Contended 伪共享

    Java8中已经提供了官方的解决方案,Java8中新增了一个注解:@sun.misc.Contended.加上这个注解的类会自动补齐缓存行,需要注意的是此注解默认是无效的,需要在jvm启动时设置-XX ...

最新文章

  1. java 传入参数_java参数怎么传递参数
  2. iOS11解决导航栏影藏返回文字的方法
  3. leetcode:Minimum Depth of Binary Tree【Python版】
  4. php 张开收缩显示,js实现可以点击收缩或张开的悬浮窗
  5. 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
  6. 因变量 方差膨胀系数_请问如何计算潜变量的方差膨胀因子(VIF)?
  7. 代理网关设计与实现(基于NETTY)
  8. oracle移动硬盘盒,oracle-linux下挂载移动硬盘 NTFS类型
  9. 九度OJ 题目1011:最大连续子序列
  10. linux mpeg4ip 编译,CentOS6.2下编译mpeg4ip
  11. Django简单介绍-基础1
  12. 输入网址到出现页面的过程
  13. python获取扫描枪数据线_扫描枪常见接口数据线的连接方法
  14. 正交试验设计例题及答案_正交试验设计与数理统计作业.doc
  15. python语句分隔用什么符号_python语句用什么符号隔开
  16. 宽高不定div水平、垂直居中
  17. 【前端程序员的中秋节】中秋节,送你千盏孔明灯,万家灯火故事长
  18. 亚马逊刷单测评的正确方法是什么样的?
  19. Python之520爱的表白
  20. 摄影初学者挑选相机的常见问题[转]_我是亲民_新浪博客

热门文章

  1. 微信小程序获取微信公众号文章2
  2. ubuntu 14.04编译安装nginx 1.14.2
  3. opencv学习系列——图像对比度亮度调节
  4. 更相减损法(求最大公约数)
  5. Win7系统新的命令行PowerShell揭秘
  6. CentOS 7 下安装FreePBX 14
  7. Jupyter安装和启动与使用
  8. opencv-python学习(三)图片的平滑滤波处理
  9. 编辑距离算法理解(动态规划的思想)
  10. 洛谷 P5725 求三角形