final IN JVM AND JMM

这篇具有很好参考价值的文章主要介绍了final IN JVM AND JMM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Simply put

In JMM (Java Memory Model), the final keyword is used to ensure visibility and immutability in a multi-threaded environment. In Java, the final keyword can be used to modify variables, methods, and classes, as follows:

  1. Modifying variables: A variable that is marked as final is immutable, meaning its value cannot be changed after initialization. In a multi-threaded environment, using final variables ensures that their values are visible to all threads.

  2. Modifying methods: A method that is marked as final cannot be overridden by a subclass, meaning its behavior is fixed across the entire inheritance hierarchy.

  3. Modifying classes: A class that is marked as final cannot be subclassed, meaning its behavior is fixed across the entire inheritance hierarchy.

In JMM, using the final keyword ensures visibility and immutability in a multi-threaded environment. Specifically, when a thread initializes a final variable, other threads can immediately see the value of that variable. Additionally, because final variables are immutable, they do not require synchronization in a multi-threaded environment, which can improve performance.

JVM 说明

在JVM中,如果使用的是常量池中的字面量(例如字符串、整数等),它们会被缓存在运行时常量池中,并且常量池的地址是固定的,因此这些常量的内存地址是不会改变的。

但是,对于使用常量池中的符号引用来访问常量的情况,由于执行时需要进行解析,并根据符号引用指向的地址找到具体的常量值,因此这些常量的内存地址可能会改变。

在JMM中,由于常量池中的数据已经经过缓存,因此不需要进行同步操作即可进行读取,这对于多线程编程来说是非常有利的。JMM规定了对常量池读取操作的具体执行顺序和内存模型,保证了在多线程情况下常量池的一致性和正确性。

总之,常量池的数据在JVM中的地址是固定的,但是符号引用的解析过程可能会导致常量的内存地址发生改变。在JMM中,常量池的读取操作具有一致性和正确性,可以直接被多个线程访问。

JMM说明

在JMM中,final关键字有以下几个用途:

定义不可变类型的常量:
使用final关键字可以将一个变量定义为常量,使得它的值不能被改变,从而实现不可变类型的常量。

final关键字通常用于声明静态常量或成员常量,常量的值在编译时就确定了,因此不需要在运行时进行同步操作,保证了线程安全性。

声明不可变类型的变量:
使用final关键字可以将一个已经被初始化的变量标记为不可变类型,这个变量的值不能被重新赋值,从而有效地避免了并发修改带来的问题。

保证多线程情况下的可见性:
final关键字可以保证在多线程情况下的可见性和正确性。

当一个final变量被初始化后,它的值对所有线程都是可见的,因此在多线程环境下,读取final变量的值不需要进行同步操作。
同时,final变量的值不能被改变,因此也避免了由于并发修改导致的问题。

总之,在JMM中,final关键字用于保证常量和变量的不可变性、线程安全性和可见性,是一种非常有用的保障机制。文章来源地址https://www.toymoban.com/news/detail-487423.html

到了这里,关于final IN JVM AND JMM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 谷歌的开源供应链安全

    本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上 演讲内容 [1] 的摘录与整理。 SCORED 是 Software Supply Chain Offensive Research and Ecosystem Defenses 的简称, SCORED 23 [2] 于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 💡 谷歌在开源软件供应链安全方面的工作 🔐 介绍供应链安

    2024年02月03日
    浏览(72)
  • http-server使用,启动本地服务器 & 使用serve包本地启动

    http-server使用,启动本地服务器 使用serve包本地启动 直接打开html文件,跨域不渲染图片 1、简介 官网:https://github.com/http-party/http-server http-server是一个简单的零配置命令行 http服务器 。 它足够强大,足以用于生产用途,但它既简单又易于破解,可用于测试,本地开发和学习。

    2024年02月02日
    浏览(57)
  • 使用QFIL升级高通芯片的Android系统

    系统信息 芯片是SC806,系统是Android7.1.2,QFIL工具集是升级Android系统的工具;以下是具体的升级步骤; 一,方式一:使用 QFIL 升级: 1,安装QDART和QPST驱动 一路下一步就好,傻瓜式安装; 2,找到QFIL软件工具 3,进入QFIL工具之后点击Configuration,然后点击FireHose Configuration,再出

    2024年02月05日
    浏览(46)
  • Node.js 安装和配置(完整详细版)

    在Windows上安装和配置Node.js: 下载Node.js安装程序: 前往Node.js官方网站(https://nodejs.org/),在主页上找到\\\"Downloads\\\"(下载)选项。然后选择适用于Windows的\\\"Windows Installer\\\"(Windows安装程序)。 运行安装程序: 下载完成后,双击安装程序(.msi文件),会出现安装向导。按照向导

    2024年02月12日
    浏览(42)
  • uniapp 自定义发行 动态修改 manifest.json

    这边需求是 : 根据不同的打包环境 设置不同的标题以及路径。方便各种调试。防止 每次 手动 每次修改 manifest.json 出错  uniapp 自定义发行: 添加自定义发行之后 Hbuilder 编辑器会自动多 出来 按钮 : 官方文档:概述 | uni-app官网 我这里的配置是这样: package.json 这里主要用于

    2024年02月11日
    浏览(88)
  • 导出手机微信聊天记录全攻略

    12-5 在我们日常使用微信的过程中,有时候很需要把聊天记录导出到电脑的Excel表格中,或者导出到网页中。 但是有个软件叫【 微信聊天记录挖掘机 】,可以把微信电脑版的聊天记录导出,那在手机微信中的聊天记录怎么办呢? 其实微信本身就带有迁移功能,只需要把手机

    2024年02月04日
    浏览(62)
  • AWS api查询账单

    作为运维要经常关注公司账户消耗情况,账户多了看账单的时间都需要优化,搞个脚本定期推送AWS账单,后续在搞监控,AWS就是api不太好找 代码执行结果 结合企业微信推送到企业微信,每天关注费用消耗

    2024年02月16日
    浏览(29)
  • 小米4手机刷入linux系统

    首先刷入开发版miui系统,参考https://www.miui.com/download.html,刷完系统后需要通过recovery清楚所有数据。 第二步申请小米miui系统解锁,申请解锁参考https://www.miui.com/unlock/index.html,然后如果解锁失败,可以从https://miuiver.com/miunlock/下载不同的版本去尝试解锁。 第三步解锁后,可

    2024年02月11日
    浏览(45)
  • 根据aop实现自定义缓存注解

    自定义注解 切面 使用

    2024年02月13日
    浏览(55)
  • 基于海洋捕食者算法MPA实现复杂地形无人机避障三维航迹规划附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年02月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包