我有一个Java程序,我正在努力改进.我怀疑代码中的同步块会损害性能,但我想在触摸代码之前确保这是我的问题.
为了检查同步块是否确实存在问题,我在带有Flight Recorder的测试服务器上记录了我的程序的执行情况,jfr
在桌面上下载了创建的文件并使用Java Mission Control打开它.但是Lock Instances
页面中Java Application
没有显示任何内容.我得到的唯一线索是结果视图中的一条消息:
Java阻止规则要求事件可从以下事件类型中获得:com.oracle.jdk.JavaMonitorEnter
因此,我假设必须有一些选项与飞行记录仪一起激活,但到目前为止我无法找到它.
如何启用com.oracle.jdk.JavaMonitorEnter
Java Flight Recorder记录的类型的事件?
或者我错过了其他的东西,并且有一种更好的方法来计算在Java程序中对同步块进行了多少阻塞?
我使用的是Oracle JDK 1.8.0_191版.我在桌面上使用的Java Mission Control版本是6.0.0.最后,我用来记录程序执行的命令如下:
java -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile,dumponexit=true,filename=test.jfr -classpath lib/*:src/ <my program with its arguments>
Run Code Online (Sandbox Code Playgroud)
我还应该补充说,使用Java Mission Control直接连接到服务器不是一个选项(或者是吗?),因为我使用ssh反弹实际连接到它...