首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以通过Java编译器优化消除易失性

可以通过Java编译器优化消除易失性
EN

Stack Overflow用户
提问于 2020-01-07 16:28:31
回答 1查看 193关注 0票数 3

Java编译器(版本5或更高版本)执行的优化可以删除变量的“易失性”声明吗?

更准确地说,在下列任何情况下,可将易失性变数转换为非易失性变数:

如果没有多线程,即应用程序从未使用多个线程?如果一个易失性变量由一个线程写入,但任何其他线程从未访问该变量,则为

  • ?如果一个易失性变量被多个线程读取,但从未修改(只读,不写),则为

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-07 16:41:09

volatile关键字要求在读取和写入变量时满足某些保证。谈论“删除声明”-no是没有意义的,这是不可能的,因为只有当编译器在源代码中忽略声明时才有意义。

但是,如果您在一个上下文(例如,单线程)中运行代码,您无法判断运行时正在积极地满足这些需求,那么运行时可以跳过这些额外的工作。

在您的示例中,可能在编译时确定的唯一情况是只写入且从不读取的变量。在这种情况下,编译器可以跳过写(如果写了一个变量,而没有人来读它,它会发出声音吗?),但是Java内存模型仍然对发生的情况做出了一些保证--在编写volatile变量的关系之前,这些关系仍然需要维护,所以在编译时优化它是没有意义的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59632364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档