IDEA 配置-XX:-RestrictContended参数

1. 配置原因

在JDK 8 提供了一种消除伪内存共享的方式:

  1. 在code中添加sun.misc.Contended注解;
  2. 将JVM参数配添加上-XX:-RestrictContended;
    则实现了一个小的测试程序,用于测试上述配置的效果;

2. 配置方法

配置方法很简单,将上述参数添加到配置文件中即可(特别强调,需要使用JDK8 ,JDK12 不支持):
添加修改

  1. 上述文件打开方式为:工具栏中 Help --> Edit Custom Vm Options
  2. -XX参数中 boolean类型在-XX:+RestrictContended为该属性设置为true,-XX:-RestrictContended,为设置为false;
  3. 上述参数为JVM虚拟机启动时使用;

3. 问题调试

上述参数修改后,在code中添加好注解,发现一个问题:
注解类找不到
Contended类找不到,则肯定编译不过啊,这个问题需要解决:

3.1 排查方向:

  1. 需要确认是否为上述JVM参数没有添加成功?其实这个可能性比较小,因为从JVM建立的角度来讲,这些参数要在运行时才会使用,而此时还是在编译阶段;
    • 在命令行打印:java -XX:+PrintFlagsFinal,但是通过这个命令看到我们JVM参数运行的时候:RestrictContended为true,难道真的是参数配置没有生效?
    • 由于JVM参数是在运行时生效,我决定先注释掉该注解,先运行下试试上述参数是否有生效:
      运行参数测试
      从这个结果很明显可以看出这个参数配置是成功了的,所以原因的话应该跟包相关;
  2. 需要确认是这个类确实没有,还是我们这里没有导入;
    包路径
    可以看到上述包内确实没有Contended类,则有两个可能:
    • JDK版本不对
    • 该包我们没有导入;

则首先验证是否为JDK版本不对的问题, 有可能在JDK8中添加进去后,在JDK12被优化掉了;

  1. 修改配置,将project版本配置为JDK1.8
    在这里插入图片描述
    由于我这里之前添加过1.8的path,所以就不用另外添加一次了,直接选择路径即可;
  2. SDKs中确认下版本:
    在这里插入图片描述
  3. Module
    在这里插入图片描述
  4. compile
    在这里插入图片描述
    修改完成后,查看该注解:
    对应类
    已经可以找到了

所以上述问题的原因为JDK版本不对,即这个配置还需要在JDK 8才能使用

4. 测试结果

  1. 没有添加该注解:
    在这里插入图片描述
  2. 添加注解
    在这里插入图片描述
    可以看到整体速度提高了一倍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值