在工作中,我们使用各种旧版本的Java 1.6,由于各种原因无法进行更新,超出了我的控制范围。
有些支持-XX:ReduceInitialCardMarks,有些不支持,并且如果您尝试使用不受支持的选项,则会退出。
我想要一个shell脚本,如果可用,就使用-XX:ReduceInitialCardMarks选项调用java,否则不使用该选项。
我尝试/正在考虑的事情:
- -X,这只会打印出-X参数而不是-XX
- 测试版本?如何测试?需要预先知道哪个版本支持什么
- 使用虚拟应用程序调用并测试返回值,例如java -XX:ReduceInitialCardMarks -jar dummy.jar。 rt.jar中没有适合使用的具有static void main()的静态类,因此必须自己制作。
迄今为止最好的方法是,在使用-version调用时从输出中搜索Unrecognized VM option,注意-version必须在参数之后,否则它不会对其进行测试。
if java -XX:-ReduceInitialCardMarks -version 2>&1 | grep -q 'Unrecognized VM option'; then echo "Not supported"; else echo "Supported"; fi
有没有一种干净的方法来做到这一点?