转自JEP的@sun.misc.contended行为说明
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行为说明相关推荐
- Random(二)什么是伪共享?@sun.misc.Contended注解
目录 1.背景简介 2.伪共享问题 3.问题解决 4.JDK使用示例 1.背景简介 我们知道,CPU 是不能直接访问内存的,数据都是从高速缓存中加载到寄存器的,高速缓存又有 L1,L2,L3 等层级. ...
- 什么是伪共享?Java8如何使用@sun.misc.Contended避免伪共享?
什么是伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变 ...
- 聊聊java8中的@sun.misc.Contended与伪共享
"持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情" @[toc] 在前面学习ConcurrentHashMap的size方法的过程中 ...
- Java8的@sun.misc.Contended注解解决伪共享问题
本文源自转载:Java8的@sun.misc.Contended注解 目录 一.@sun.misc.Contended 介绍 二.单独使用一个缓存行有什么作用--避免伪共享 三.@sun.misc.C ...
- @sun.misc.Contended 解决伪共享问题
先来看下什么叫做伪共享,转载自并发编程网 – ifeve.com 链接地址: 伪共享(False Sharing) 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字 ...
- Java8的@sun.misc.Contended注解
@sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line). 这 ...
- @sun.misc.Contended避免伪共享(false sharing)
转载自:http://www.myexception.cn/program/1630142.html Java8中使用sun.misc.Contended注解来避免伪共享(false sharing) ...
- Java8中用sun.misc.Contended避免伪共享(false sharing)
转自:http://budairenqin.iteye.com/blog/2048257 关于伪共享这个概念,请先参照http://ifeve.com/falsesharing/ 伪共享的样子: Ja ...
- @sun.misc.Contended 伪共享
Java8中已经提供了官方的解决方案,Java8中新增了一个注解:@sun.misc.Contended.加上这个注解的类会自动补齐缓存行,需要注意的是此注解默认是无效的,需要在jvm启动时设置-XX ...
最新文章
- java 传入参数_java参数怎么传递参数
- iOS11解决导航栏影藏返回文字的方法
- leetcode:Minimum Depth of Binary Tree【Python版】
- php 张开收缩显示,js实现可以点击收缩或张开的悬浮窗
- 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
- 因变量 方差膨胀系数_请问如何计算潜变量的方差膨胀因子(VIF)?
- 代理网关设计与实现(基于NETTY)
- oracle移动硬盘盒,oracle-linux下挂载移动硬盘 NTFS类型
- 九度OJ 题目1011:最大连续子序列
- linux mpeg4ip 编译,CentOS6.2下编译mpeg4ip
- Django简单介绍-基础1
- 输入网址到出现页面的过程
- python获取扫描枪数据线_扫描枪常见接口数据线的连接方法
- 正交试验设计例题及答案_正交试验设计与数理统计作业.doc
- python语句分隔用什么符号_python语句用什么符号隔开
- 宽高不定div水平、垂直居中
- 【前端程序员的中秋节】中秋节,送你千盏孔明灯,万家灯火故事长
- 亚马逊刷单测评的正确方法是什么样的?
- Python之520爱的表白
- 摄影初学者挑选相机的常见问题[转]_我是亲民_新浪博客