java - 什么是Java的-XX :+UseMembar parameter

标签 java concurrency jvm jvm-arguments

我在各种地方(论坛等)看到这个参数,常见的答案是它有助于高并发服务器。尽管如此,我还是找不到 sun 的官方文档来解释它的作用。另外,它是在 Java 6 中添加的还是在 Java 5 中存在的?

(顺便说一句,许多热点 VM 参数的好地方是 this page)

更新:Java 5 不使用此参数启动。

最佳答案

为了优化性能,JVM 在代码中使用了一个“伪内存屏障”来充当跨多个处理器同步时的屏蔽指令。可以恢复到“真正的”内存屏障指令,但这会对性能产生明显(和坏)的影响。

-XX:+UseMembar 的使用导致 VM 恢复为真正的内存屏障指令。这个参数本来是打算暂时存在的,作为新的伪屏障逻辑的验证机制,结果发现新的伪内存屏障代码引入了一些同步问题。我相信这些问题现在已得到解决,但在此之前,解决这些问题的可接受方法是使用恢复标志。

该错误是在 1.5 中引入的,我相信该标志存在于 1.5 和 1.6 中。

我已经从各种邮件列表和 JVM 错误中用 google-fu'ed 得到了这个:

关于java - 什么是Java的-XX :+UseMembar parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120088/

相关文章:

java - 使用多个属性查找匹配对象

java - Spring Integration DSL 中的路由

java - 在 Spring application.properties 文件中声明对象列表

java - 是否有可能为特定的 JVM 实例获得真正唯一的 ID?

java - Restful 网络服务 - NoClassDefFoundError : org/glassfish/jersey/ExtendedConfig

java - 通过引用延迟初始化的非 volatile 字符串进行访问是线程安全的吗?

java - concurrntHashMap 能否同时保证真正的线程安全和并发?

dictionary - 当操作返回 Future 时如何使用 putIfAbsent

java - 如何在同时安装32位和64位JVM的情况下使用32位JVM强制运行Jar文件?

java - 即使没有内存不足,我也会遇到 java.lang.OutOfMemoryError 吗?