JFR是Java分析器,它使您可以研究代码的运行时特征。 通常,您将使用探查器来确定代码的哪些部分导致大量内存分配或导致消耗过多的CPU。
有很多产品在那里。 过去,我使用过YourKit,OptimizeIt,JProfiler,NetBeans等。 每个都有其优点,并且在很大程度上取决于您所选择的个人偏好。 我当前个人最喜欢的是YourKit。 它可以很好地集成到IntelliJ中,具有相对较低的开销,并且可以很好地呈现其报告。
事实是,概要分析是一门非常不精确的科学,通常值得研究多个剖析器以更清晰地了解程序中到底发生了什么。 据我所知,大多数探查器都依赖JVMP / JVMTI代理来探查Java程序。 一个主要的问题是安全点 。 这意味着您的Java程序只有在安全点才能被探测。 这意味着您将错误地了解程序中实际发生的情况,尤其是当许多活动处于安全点之间时。 同样,所有探查器也会在不同程度上增加开销。 Profiler的开销将改变程序的特性,并可能导致分析结果产生误导。 这里有更多信息。
输入JFR。 自7u40版以来,JRF已与JDK捆绑在一起。 通过直接访问JVM构建JFR。 这不仅意味着开销很低(几乎在所有情况下都声称少于1%),而且也不依赖安全点。 在这里查看一个示例,该示例显示与YourKit和JFR的分析有多么根本的不同。
要运行JFR,您需要将以下开关添加到Java命令行中:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
JFR位于Java Mission Control(JMC)中。 要启动JMC,只需在命令行中键入jmc
,如果您的路径中包含JDK,则JMC控制台将启动。 您应该在左侧窗格中看到Java程序。 右键单击您的程序,然后开始飞行记录。
您将看到一个对话框,您可以在其中接受默认值(一分钟的示例),然后将显示结果。 值得付出选择,以找到最适合自己的方式。 与所有好的产品一样,该GUI非常直观。
从命令行开关可以看出,这是商业功能。 我不确定这意味着什么,但是您可以在这里的文档中了解更多信息。 您也可以从命令行运行它,所有这些都在文档中。
我确实发现的一个问题是,当我下载最新的Java8快照(此时为1.8.0_40-ea)时,我无法启动程序并收到以下消息:
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/
Error: Trying to use 'UnlockCommercialFeatures', but commercial features are not available in this VM.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
总而言之,JFR是对任何开发人员工具包的重要补充,只要您使用的是JDK版本7u40或更高版本,肯定值得在您的代码中进行尝试。
(我鼓励您查看上一篇文章结合JFR 进行性能优化的第一条规则 )
翻译自: https://www.javacodegeeks.com/2015/01/java-flight-recorder-jfr.html