Java 为什么'-XX:+;使用LWPsynchronization';对Windows操作系统的stamplock造成负面影响?

Java 为什么'-XX:+;使用LWPsynchronization';对Windows操作系统的stamplock造成负面影响?,java,jvm,synchronization,performance-testing,jmh,Java,Jvm,Synchronization,Performance Testing,Jmh,我想用java实现一个简单的速率限制器来学习如何使用jmh。一个简单的github项目在'https://github.com/William1104/rate-limiter" 有趣的是,当启用“-XX:+UseLWPSynchronization”选项时,某些实现(使用stamplock)的吞吐量会受到影响。基准测试是在Windows计算机上执行的,我希望它对非Solaris系统没有影响。然而,测试结果显示不同。我能知道有谁能帮我弄清楚到底发生了什么吗 以下是我的机器上的测试结果作为参考:

我想用java实现一个简单的速率限制器来学习如何使用jmh。一个简单的github项目在'https://github.com/William1104/rate-limiter"

有趣的是,当启用“-XX:+UseLWPSynchronization”选项时,某些实现(使用stamplock)的吞吐量会受到影响。基准测试是在Windows计算机上执行的,我希望它对非Solaris系统没有影响。然而,测试结果显示不同。我能知道有谁能帮我弄清楚到底发生了什么吗

以下是我的机器上的测试结果作为参考:

带有选项:
-server,-XX:+UnlockDiagnosticVMOptions,-XX:+UseNUMA

基准 (rateLimiterType) 模式 碳纳米管 分数 错误 单位 RaterLimiterBenchmark.thread_1 StampLockLongArrayRateLimiter thrpt 90 21487.385 ▒ 1082.163 操作/质谱 RaterLimiterBenchmark.thread_1 StampLockInstantarray速率限制器 thrpt 90 13162.330 ▒ 1585.555 操作/质谱 RaterLimiterBenchmark.thread_1 同步长阵列卫星限制器 thrpt 90 15362.934 ▒ 227.704 操作/质谱 RaterLimiterBenchmark.thread_1 同步标准速率限制器 thrpt 90 17281.675 ▒ 2148.057 操作/质谱 RaterLimiterBenchmark.thread_10 StampLockLongArrayRateLimiter thrpt 90 6868.653 ▒ 146.372 操作/质谱 RaterLimiterBenchmark.thread_10 StampLockInstantarray速率限制器 thrpt 90 8189.747 ▒ 335.517 操作/质谱 RaterLimiterBenchmark.thread_10 同步长阵列卫星限制器 thrpt 90 6643.004 ▒ 103.568 操作/质谱 RaterLimiterBenchmark.thread_10 同步标准速率限制器 thrpt 90 5252.975 ▒ 190.363 操作/质谱 RaterLimiterBenchmark.thread_100 StampLockLongArrayRateLimiter thrpt 90 7352.890 ▒ 2109.446 操作/质谱 RaterLimiterBenchmark.thread_100 StampLockInstantarray速率限制器 thrpt 90 8675.814 ▒ 922.653 操作/质谱 RaterLimiterBenchmark.thread_100 同步长阵列卫星限制器 thrpt 90 6509.368 ▒ 157.212 操作/质谱 RaterLimiterBenchmark.thread_100 同步标准速率限制器 thrpt 90 5042.867 ▒ 192.971 操作/质谱
谢谢你的评论。我使用不同的设置重新运行基准测试。如果我们在每次迭代中以1秒的时间再次执行JMH,我会得到以下结果:

带有选项:-server,-XX:+UnlockDiagnosticVMOptions,-XX:+UseNUMA,-XX:-UseLWPSynchronization

基准 (rateLimiterType) 模式 碳纳米管 分数 错误 单位 RaterLimiterBenchmark.thread_1 StampLockLongArrayRateLimiter thrpt 90 23573.282 ▒ 364.739 操作/质谱 RaterLimiterBenchmark.thread_1 StampLockInstantarray速率限制器 thrpt 90 23062.260 ▒ 1035.395 操作/质谱 RaterLimiterBenchmark.thread_1 同步长阵列卫星限制器 thrpt 90 34667.411 ▒ 246.003 操作/质谱 RaterLimiterBenchmark.thread_1 同步标准速率限制器 thrpt 90 36426.369 ▒ 1248.360 操作/质谱 RaterLimiterBenchmark.thread_10 StampLockLongArrayRateLimiter thrpt 90 13592.158 ▒ 76.319 操作/质谱 RaterLimiterBenchmark.thread_10 StampLockInstantarray速率限制器 thrpt 90 14564.306 ▒ 474.613 操作/质谱 RaterLimiterBenchmark.thread_10 同步长阵列卫星限制器 thrpt 90 13524.610 ▒ 155.850 操作/质谱 RaterLimiterBenchmark.thread_10 同步标准速率限制器 thrpt 90 13080.967 ▒ 309.736 操作/质谱 RaterLimiterBenchmark.thread_100 StampLockLongArrayRateLimiter thrpt 90 13224.529 ▒ 459.035 操作/质谱 RaterLimiterBenchmark.thread_100 StampLockInstantarray速率限制器 thrpt 90 13890.278 ▒ 456.182 操作/质谱 RaterLimiterBenchmark.thread_100 同步长阵列卫星限制器 thrpt 90 12672.925 ▒ 314.118 操作/质谱 RaterLimiterBenchmark.thread_100 同步标准速率限制器 thrpt 90 12245.120 ▒ 296.395 操作/质谱
运行100个线程的测量?('This is fine'meme)
-XX:+UseLWPSynchronization
确实对Windows没有影响。因为它甚至没有被读取,而且“true”是标志的默认值。嗨@apangin,谢谢你的评论。我将重新运行基准测试,以确保我观察到的是稳定的。我可以知道测量需要多长时间吗?有什么建议或参考吗?非常感谢。