java配置openjdk_OpenJDK修订的Java内存模型

java配置openjdk

传统的Java内存模型涵盖了Java语言的语义保证。 在本文中,我们将重点介绍其中一些语义,并对它们进行更深入的了解。 我们还将尝试就本文中描述的语义传达更新现有Java内存模型(JMM)的动机。 与将来对JMM的更新有关的讨论在本文中将称为JMM9。

Java内存模型

JSR 133(以下称为JMM-JSR133)中定义的现有Java内存模型指定了共享内存的一致性模型,还有助于为开发人员提供定义,以便它们在表示JMM-JSR133时可以保持一致。 JMM-JSR133规范的目标是确保完善通过内存交互的线程的语义定义,以便进行优化并提供清晰的编程模型。 JMM-JSR133旨在提供定义和语义,以使多线程程序不仅是正确的,而且是高性能的,并且对现有代码库的影响最小。

考虑到这一点,我想遍历某些在JMM-JSR133中过度指定或未指定的语义保证,同时重点介绍与如何在JMM9中进行改进有关的社区讨论。

JMM9-顺序一致-无数据争用问题

JMM-JSR133讨论了有关动作的程序执行。 这样的执行将动作与命令结合起来以描述这些动作之间的关系。 在本文中,我想扩展一些命令和关系,然后讨论什么构成顺序一致的执行。 让我们从“程序顺序”开始-每个线程的程序顺序是一个总顺序,表示该线程将执行所有操作的顺序。 有时并不需要命令所有动作。 因此,我们有一些关系只是部分有序的关系。 例如,“在……之前发生”和“与……同步”是两个部分排序的关系。 当一个动作发生之前-在另一动作之前; 第一个动作不仅对第二个动作可见,而且在第二个动作之前被排序。 这两个动作之间的关系称为事前发生关系。 有时,需要订购一些特殊的动作,这些动作被称为“同步动作”。 易失性的读取和写入,监视锁定和解锁等都是同步操作的示例。 同步动作引起与该动作的“同步”关系。 同步关系是部分顺序,这意味着未包括所有对同步动作。 跨所有同步动作的总顺序称为“同步顺序”,每个执行都有一个同步顺序。

现在让我们讨论顺序一致执行-似乎在其所有读写操作中总以顺序发生的执行被称为顺序一致(SC)。 在SC执行中,读取将始终看到最后一次写入该特定变量所写入的值。 当SC执行不显示“数据争用”时,则该程序称为无数据争用(DRF)。 当程序有两个访问没有按事前发生关系排序时,并且当它们访问同一变量时,至少发生了一次写访问,就会发生数据争用。 用于DRF的SC意味着DRF程序的行为就好像它们是SC。 但是严格支持SC是以性能为代价的-大多数系统将重新排序内存操作以提高执行速度,同时“隐藏”昂贵操作的延迟。 同时,甚至编译器也可以对代码重新排序以优化执行。 为了保证严格的顺序一致性,无法对内存操作或代码优化进行所有此类重新排序,因此会降低性能。 JMM-JSR133已经合并了宽松的排序限制,并且由基础编译器进行了任何重新排序,高速缓存与内存的交互以及该程序无法观察到JIT本身。 </

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值