这是我以前在其他环境中使用其他分析工具时所看到的,但在这种情况下它尤其引人注目.

我正在运行一个运行大约12分钟的任务的cpu配置文件,并且它显示了几乎一半的时间花费在一个字面上什么都不做的方法:它有一个空体.是什么导致这个?我不相信这种方法被称为荒谬的次数,当然不会占用执行时间的一半.

对于它的价值,所讨论的方法称为startContent(),它用于通知解析事件.事件沿着一系列过滤器传递(可能是十几个),并且每个过滤器上的startContent()方法除了在链中的下一个过滤器上调用startContent()之外几乎没有任何作用.

这是纯Java代码,我在Mac上运行它.

附件是cpu采样器输出的屏幕截图:

这是一个显示调用堆栈的示例:

(因休假而延误)以下是一些显示探查器输出的图片.这些数字远远超出我期望的配置文件的样子.探查器输出似乎完全有意义,而采样器输出是虚假的.

正如你们中的一些人已经猜到的那样,有问题的工作是Saxon XML模式验证器的运行(在9Gb输入文件上).该配置文件显示大约一半的时间用于验证元素内容与简单类型(在endElement处理期间发生),大约一半用于测试关键约束的唯一性;两个探查器视图显示了该任务的这两个方面所涉及的活动.

我无法提供来自客户端的数据.

解决方法

我没有使用VisualVM,但我怀疑问题可能是因为这种空方法的检测开销. Here’s the relevant passage in JProfiler’s documentation (which I have used extensively):

If the method call recording type is set to Dynamic instrumentation,all methods of profiled classes are instrumented. This creates some overhead which is significant for methods that have very short execution times. If such methods are called very frequently,the measured time of those method will be far to high. Also,due to the instrumentation,the hot spot compiler might be prevented from optimizing them. In extreme cases,such methods become the dominant hot spots although this is not true for an uninstrumented run. An example is the method of an XML parser that reads the next character. This method returns very quickly,but may be invoked millions of times in a short time span.

基本上,分析器基本上添加了它自己的“时间长度检测代码”,但是在一个空方法中,分析器将花费所有时间来做这些而不是实际允许该方法运行.

如果可能,我建议告诉VisualVM停止检测该线程,如果它支持这样的过滤.

为什么Java CPU配置文件(使用visualvm)在一个什么都不做的方法上显示如此多的命中?的更多相关文章

  1. 为什么Xcode 7 iOS模拟器冻结?

    在Xcode7模拟器中,特别是在滚动或执行其他GPU密集型任务时,我会得到60秒以上的冻结.问题似乎是模拟器作为一个整体,而不是我的应用程序.如果我跟踪仪器中的cpu时间,50秒的实时显示为我的应用程序cpu时间的0.5s以下.这是怎么回事?解决方法我运行BetterSnapTool进行窗口管理.退出此应用程序会立即修复问题,即使SIM卡处于冻结状态.不知道为什么,但更好的SnapTool似乎正在干扰iOSSimulator对GPU的使用.

  2. 什么时候android会在没有唤醒锁定的情况下停止其CPU?

    我知道android使用唤醒锁来保持cpu运行或屏幕打开.很明显,屏幕唤醒锁定会阻止用户活动计时器在用户不活动一段时间后关闭屏幕.但是我想知道什么时候cpu唤醒锁定才会生效.1.如果我创建一个新线程并在后台排除cpu而没有任何唤醒锁定,关闭屏幕将不会停止它.它会停止吗?

  3. 在Android上使用CPU到GPU的最低开销相机

    我的应用程序需要在cpu上对实时相机帧进行一些处理,然后再在GPU上进行渲染.还有一些其他的东西在GPU上呈现,这取决于cpu处理的结果;因此,保持所有内容同步非常重要,这样我们就不会在GPU上渲染帧本身,直到该帧的cpu处理结果也可用.问题是在Android上这个最低的开销方法是什么?

  4. windows – Postgres持续30%的CPU使用率

    我最近将Postgres数据库从Windows迁移到CentOS6.7.在Windows上,数据库从未使用过多cpu,但在Linux上我看到它使用的是常量~30%的cpu.任何人都知道这是正常的,还是为什么会这样做?

  5. 如何在Windows上测量C中的CPU时间并包含system()的调用?

    但是,我在我的算法中使用了system()命令,这不是以这种方式测量的.那么,我如何测量cpu时间并通过system()包含我的脚本调用次数?

  6. 在Windows上以C计算CPU时间

    在C中有什么方法可以计算在cpu时间内运行给定程序或例程需要多长时间?

  7. 如何减少CentOS服务器上的Samba CPU使用率?

    如果您有存储瓶颈,有时会出现cpu使用率过高的情况.我有一个繁忙的Samba文件服务器,可以在一个适度的双核cpu上同时使用30-50个Mac客户端.最大的因素是RAM.每次用户的数量或工作量增加时,我都会增加一些额外的RAM,并且大多数工具报告的cpu使用率大幅下降,响应度仍然很高.

  8. wcf – 什么是任务管理器中的CPU时间?

    我有一些WCF服务托管在Windows服务中.昨天我看了任务管理器,注意到我的Windows服务进程的cpu时间是5个小时以上,而大多数其他进程都是0.这意味着什么?

  9. 窗口 – 如何确定我的进程是否受CPU限制,I / O绑定,内存绑定或

    我正在加快编译我的应用程序所需的时间,我正在调查的一件事是检查什么资源,如果有的话,我可以添加到构建机器来加快速度.为此,我如何知道我是否应该投资更多的cpu,更多的内存,更好的硬盘或者是否受到其他资源的限制?

  10. CentOS – 在夜晚的特定时间使用高CPU

    我有一台CentOS-5服务器,负载很小.“sar”命令的典型输出显示如下:但是,我观察到每天凌晨4点10分,cpu使用率非常高.这种情况几乎每天晚上都会发生,除了一个月的几天.“sar”命令显示如下:如何确定导致cpu使用率和iowait等峰值的原因.我检查了/var/log/messages但无法确定.当时没有其他cron作业或其他东西可以运行.由于这显示在%user下,我只能知道它是一些用户进程.我怎样才能确切地确定原因?这是cron.daily脚本运行的时间…

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部