Oracle® Developer Studio 12.5:性能分析器教程

退出打印视图

更新时间: 2016 年 6 月
 
 

了解 Java HotSpot 编译器行为

该过程接续上一节,介绍如何使用 "Timeline"(时间线)和 "Threads"(线程)视图来过滤和查找负责 HotSpot 编译的线程。

  1. 选择 "Timeline"(时间线)视图并通过单击 "Active Filters"(活动过滤器)面板中的 X 来删除过滤器,然后通过按键盘上的 0 将水平缩放重置为缺省值。

    还可以单击 "Timeline"(时间线)工具栏中水平滑块前面的 |< 按钮,或者在 "Timeline"(时间线)中右键单击并选择 "Reset"(重置)。

  2. 再次打开 "Function Colors"(函数颜色)对话框并为每个 Routine.* 函数选取不同颜色。

    在 "Timeline"(时间线)视图中,颜色更改出现在线程 2 的调用堆栈中。

    image:Routine.* 函数具有不同颜色时的时间线视图
  3. 查看您看到线程 2 中颜色更改的时间段中 "Timeline"(时间线)的所有线程。

    您应该看到有一些线程具有几乎与线程 2 中的颜色更改同时发生的事件的图案。在此示例中,它们是线程 17、18 和 19。

    image:线程显示 HotSpot 行为的时间线视图
  4. 转至 "Threads"(线程)视图并选择线程 2 以及您的实验中在线程 2 显示对 Routine.* 函数的调用的时间段内显示活动的线程。

    您可能发现更容易通过单击 "Name"(名称)列标题来首先按名称排序。然后在单击线程时按 Ctrl 键来选择多个线程。

    在此示例中,选择线程 2、17、18、19。

    image:选择了线程 2、17、18 和 19 的时间线视图
  5. 单击工具栏中的按钮 image: ,然后选择 "Add Filter: Include only events with selected items"(添加过滤器:仅包括含有所选项的事件)。

    这将设置过滤器以仅包括那些线程上的事件。还可以在 "Threads"(线程)视图中右键单击,然后选择过滤器。

  6. 返回 "Timeline"(时间线)视图并重置水平缩放以易于看到图案。

  7. 单击线程 17 和 18 中的事件。

    请注意,"Call Stack"(调用堆栈)面板显示 CompileBroker::compiler_thread_loop()。那些线程是用于 HotSpot 编译器的线程。

    image:选择了线程 17 和 18 中事件的时间线视图

    "Thread 19"(线程 19)显示调用堆栈并且其中具有 ServiceThread::service_thread_entry()

    image:过滤的 “Timeline“(时间线)视图以显示特定线程上的事件

    这些线程上发生多个事件的原因是只要用户代码调用新的方法并且在其中花费了相当时间,就会触发 HotSpot 编译器来生成该方法的计算机代码。HotSpot 编译器足够快,从而运行该编译器的线程不会消耗非常多的 "User CPU Time"(用户 CPU 时间)。

    如何触发 HotSpot 编译器的详细信息不在本教程范围内。