final域的内存语义

news2025/4/28 18:42:45

重排序规则

1. 在构造函数内对一个final域的写入,与随后把这个被构造对象引用赋值给一个引用变量,着两个操作不能重排序

2. 初次读一个包含final域的对象的引用,与随后初次读取这个final域,这两个操作不能重排序

以下面实例作说明:

public class FinalExample {
    int i;
    final int j;
    static FinalExample obj;
    public FinalExapmle() {
        i = 1;
        j = 2;
    }

    public static writer() {
        obj = new FinalExample();
    }

    public static void reader() {
        FinalExample object = obj;
        int a = object.i;
        int b = object.j;
    }
}

final变量的写

 JMM禁止编译器把final域的写重排序到构造函数之外,编译器会在final域的写之后,构造函数的return之前,插入一个StoreStore内存屏障。

 

 上图显示了多线程情况下一种可能的执行顺序,final域写的重排序规则可以保证:在对象引用为任意线程可见之前,对象的final域已经被正确初始化过,而普通域不具有这个保证。

final变量的读 

 在一个线程中,初次读对象引用与初次读该对象的包含的final域,JMM禁止处理器重排序这两个操作。编译器会在读final域操作的前面插入一个LoadLoad屏障。

 

final域的重排序规则可以确保:在读一个final域变量之前,一定会先读取包含这个final域的对象的引用,上例中,如果对象的引用obj不为null则final域变量一定已经初始化完成了 

Final域为引用类型 

对于引用类型,在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被针对的引用赋值给一个引用变量,这两个操作不能重排序。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm作业管理系统

随着计算机以及网络的普及,教师与学生对辅助教学方式的要求也越来越高,在教学辅助方式上追求质量及效率。作为教学核心组成之一的作业管理也趋向更加便 捷快速的方式。 经过调查,现阶段高校进行作业管理的方式主要有三种: 情况一&…

SSM学生宿舍管理系统(附源码)

本次介绍的是一个基于SSMJSP开发的学生宿舍管理系统的设计与实现,界面简洁、程序逻辑清晰,适合作为毕业设计的模板参考! 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家 …

阿里妈妈star论文重点记录

论文地址:https://arxiv.org/pdf/2101.11427.pdf 1:业务实际应用 自 2020 年底以来,STAR 已部署在阿里巴巴展示广告系统,点击率提升8.0%和RPM增加6% 2:特点 星型拓扑促进跨多个domain的有效信息转换,在…

MATLB|抽水蓄能电站系统的最优竞价策略研究

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

Python自动化测试面试题——接口篇

目录 网络模型 OSI有哪几层,分别包含哪些协议? 协议 TCP,UDP的区别? TCP如何确保可靠传输? 三次握手与四次挥手? HTTP有哪些请求方法? HTTP常见的状态码有哪些? GET和POST的区别? Cookie和Session的区别? Token和Session的区别? HTTP和HTTPS的区别? 接口…

JavaScript(二):变量、数据类型、类型转换

变量一、变量的使用1.声明变量2.赋值3.变量的初始化4.变量的更新5.同时声明多个变量6.声明变量的特殊情况7.变量的命名规则二、数据类型数字型1.数字型Number2.数字型范围3.数字型的特殊值4.isNaA()字符串型String1.字符串型格式2.字符串型引号嵌套3.字符串转义符4.字符串长度5…

R语言相关分析和稳健线性回归分析

介绍 下面以物种多样性为例子展示了如何在R语言中进行相关分析和线性回归分析。 怎么做测试 相关和线性回归示例 Data read.table(textConnection(Input),headerTRUE) 数据简单图 plot(Species ~ Latitude, dataData, pch16,xlab "Latitude", ylab "Specie…

web前端期末大作业:体育网页主题网站设计——体育兵乓球5页面HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ES运维常用指令,常用的故障诊断指令,es集群健康状况、集群节点分配信息、分片分配信息、分片未分配问题诊断、集群开启密码访问

目录 查询集群的健康状况 查看集群中所有节点的分配信息 查询集群/索引的文档总计数 查询集群的分片分配信息 查询集群中索引的分片数、文档数或集群中包含哪些索引 查询集群的快照存储信息 查看集群状态信息 查看集群统计信息 查看集群中所有节点的节点属性 查询分片…

javaScript 进阶之路 --- 《手写“回调地狱”》

前言: 可能初次看到这个标题,你会有些惊讶。我们不是要实现“手写 Promise ”吗?怎么变成了手写“回调地狱”了?“我老早看视频学习的时候就知道,我们要避免写成“回调地狱的格式,怎么到你这还要手写这玩意…

论文投稿指南——中国(中文EI)期刊推荐(第5期)

🚀 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI!🎄🎈 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中&#xf…

智能优化算法:蜣螂优化算法-附代码

智能优化算法:蜣螂优化算法 摘要:蜣螂优化算法( Dung beetle optimizer, DBO), 是由 Jiankai Xue 等于2022 年提出的一种群体智能优化算法。其灵感来源于蜣螂的生物行为过程,具有寻优能力强,收敛速度快的特点。 1.蜣螂优化算法 …

一款很火的智能化 Shell 工具多色彩优化命令显示结果可以替换系统默认的 Shell 工具,支持多平台免费开源使用

一款很火的智能化 Shell 工具多色彩优化命令显示结果可以替换系统默认的 Shell 工具,支持多平台免费开源使用。 Nushell,它是用Rust写的,安全性提高的同时,Bug率也降低了,NuShell 专注于实现以下目标: 1、…

【云原生】Prometheus AlertManager讲解与实战操作

文章目录一、概述二、AlertManager 架构三、AlertManager 部署1)下载2)配置3)启动服务4)与Prometheus集成四、在Prometheus中设置告警规则五、AlertManager 告警通道配置一、概述 Prometheus 包含一个报警模块,就是我们…

利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法

利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法。 内存作为计算机系统的组成部分,跟开发人员的日常开发活动有着密切的联系,我们平时遇到的Segment Fault、OutOfMemory、Memory Leak、GC等都与它有关。本文所说的内存,指的是计算机系统中的主存(Main Memo…

LIFT: Learned Invariant Feature Transform详细笔记

LIFT: Learned Invariant Feature Transform Paper: LIFT: Learned Invariant Feature Transform | SpringerLink Code: GitHub - cvlab-epfl/LIFT: Code release for the ECCV 2016 paper 文章目录Abstract思路来源LIFT文献来源方法:LIFTPipeline网络架构训练流程…

【网络】网络基础

文章目录依据覆盖范围的网络分类初识网络协议网络协议分层OSI分层模型TCP/IP分层模型网络协议栈中每一层的典型协议和典型设备应用层传输层网络层数据链路层物理层初识IP地址和MAC地址IP地址MAC地址网络是数据传输的解决方案。计算机数量由少变多,计算机由单台机器完…

火爆全球的网红OpenAI ChatGPT注册教程

地址:https://chat.openai.com/ 1. 登陆上去体验 写代码问题 Could you help me to write a C function to upload a file to ASW S3?回复 带代码和注释 Sure, here is an example of how you might write a C function to upload a file to Amazon S3: #incl…

Redis Cluster高可用集群部署

​欢迎光临我的博客查看最新文章: https://river106.cn Redis从3.0开始支持Redis Cluster集群部署,在3.0之前使用哨兵模式来实现Redis集群(利用Sentinel来监控master节点的状态,如果master节点异常,则将其中一台slave切换为master…

C语言中的void

文章目录一.void概要二.void应用场景2.1void能定义变量吗?2.2void这个类型有大小吗?2.3void*能定义变量吗?2.4void*使用2.5void*能不能进行对应的指针运算?2.6void和函数返回值2.7函数void类型的参数一.void概要 void就是空的意思…