Java并发编程常识
还记得本文开篇的那句话吗?
https://www.iteye.com/blog/javatar-1963774
这里的 PPT 链接失效了,我历尽千辛万苦,搜索找到了一份。
一共 18 页,一一展示一下。
有的地方是纯知识点,有的地方是代码。
反正我觉得我看明白了,有必要讲一下的地方。我就在图片下面进行一个简短的描述。
走起。
稍微解释一下这一页上面的东西。
这几个命令,我在之前的文章中也用到过:
就是下面这部分:
所以,我知道这个地方是有个坑的。
如果你把命令直接粘过去,会抛出这个错误:
Java HotSpot(TM) 64-Bit Server VM warning: printing of assembly code is enabled; turning on DebugNonSafepoints to gain additional output
是因为你缺少了一个叫做 hsdis-amd64.dll 的文件(windows平台)。
你需要把这个文件放在 jre/bin/server 的目录下:
然后把命令换成这个:
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintAssembly
-XX:CompileCommand=print,*AtomicInteger.incrementAndGet
再次执行程序,就有汇编输出了:
再主要说一下 CompileCommand 这个参数。
这个参数用来定制编译需求,比如可以指定某个方法不做 JIT 编译,也可以只编译指定的方法等等。
用法是这样的:
-XX:CompileCommand=command,method[,option]
其中的 command 有下面这些选项:
- exclude,跳过编译指定的方法
- compileonly,只编译指定的方法
- inline/dontinline,设置是否内联指定方法
- print,打印生成的汇编代码
- break,JVM以debug模式运行时,在方法编译开始处设置断点
- quiet,不打印在此命令之后、通过-XX:CompileCommand指定的编译选项
- log,记录指定方法的编译日志,若未指定,则记录所有方法的编译日志
- 其他命令,option,help
比如 PPT 中的这个用法 -XX:CompileCommand=print,*AtomicInteger.incrementAndGet
含有就是打印 AtomicInteger.incrementAndGet 方法生成的汇编代码。