Oracle Hotspot JVM:通常,哪些操作特别耗费CPU? - java

我想了解哪种类型的操作对CPU负载的贡献不成比例,并且可以直观地了解常见操作的相对成本。为了尽量减少泛化,请假定使用Oracle 7 HotSpot JVM。

例如:

  • 是否会构造大量对象,这会花费CPU(我知道它会消耗内存:-))?
  • 是否满足监控器的成本?也就是说,如果我们有多个线程试图进入相同的同步块,那么被阻塞的线程还会消耗CPU周期吗?
  • 以上操作的相对费用?例如,“新建单个对象所花费的CPU与迭代X元素数组所花费的CPU相同”
  • 有什么技巧可以直观地了解典型操作的相对CPU成本?

    关于您可以推荐的主题,有什么好读的书吗?

    谢谢,

    澄清

    感谢您的早期答复,但请注意以下几点:

  • 不会问“为什么我的应用程序运行缓慢”
  • 了解使用探查器将有助于识别特定应用程序中的问题,例如,GC可能会耗尽CPU的使用时间,或者使用GC的终身代产品比Eden space的成本更高。
  • 理解,大多数操作只有在执行很多之后才会变得昂贵(即如果很少使用,几乎没有操作会很昂贵)

    相反,我正在寻找有关CPU相对成本的指南,尤其是w.r.t.以上操作(假设“网络级”应用使用所有提及的操作数量相等-很多)。

    例如,我现在已经:

  • 长方法调用链不会显着增加CPU负载(因此通常可以自由使用方法委派)
  • 引发异常比使用条件语句要昂贵得多(因此,后者通常是高度性能敏感的代码中用于流控制的首选)
  • ...但是如何实例化新对象或满足监视器的要求呢?这些操作中是否有一个在规模上对CPU负载(例如,我不在乎延迟或堆大小)有重大贡献(占主导地位?)?

    参考方案

    我认为您当中写的相对CPU消耗如下:

    1)索引数组;它很快;它只是在解决

    2)监控器-更慢;挂起和等待的线程不会消耗CPU,切换消耗的CPU很少,但是比索引更多

    3)如果对象很复杂并导致创建子对象,则创建对象的速度可能会很慢;创建一个new Object()只是比线程切换慢一点;但也许我是错的,而且是相同的;无论如何可比

    4)抛出/捕获异常非常慢;创建对象的速度要慢10-100倍

    在哪里可以找到有关Sun JVM内部运行情况的信息? - java

    作为开发人员,我想知道调用虚拟方法与接口方法的成本是多少。现在,我知道为什么invokeinterface可以比invokevirtual慢一些,但是我想知道Sun是否在他们发布的改进了invokeinterface的JVM的最新版本中采用了新机制。我如何找到此类信息? 参考方案 收购了Sun的Oracle可以在其网站上的以下站点上找到有关HotSpot J…

    与OpenJDK相比,Oracle商业Hotspot JVM具有什么性能优势? - java

    如本问题所述:OpenJDK vs Java HotspotVMOracle的商业Hotspot JVM本质上是OpenJDK,还有几个仅用于商业客户端的功能。但是-仅使用现成的硬件,这些额外功能是否真的有助于单机和/或小型集群上的性能?还是仅与具有特定组织需求的大公司以及具有自定义硬件的大型系统有关?我特别想问的是“ Java Flight Recorde…

    我如何从堆转储中知道Java对象是在使用权空间还是eden空间 - java

    我有一个Hotspot JVM堆转储,我试图找出对象是否存在于权属空间,伊甸园空间或幸存者空间中,但我做不到。感谢有人可以帮助我。 参考方案 我认为你不能。从this论坛帖子中, 对不起,坏消息,堆转储均不包含有关 对象所在的空间查看此page中的Java堆转储的内容似乎可以确认该堆转储不包含生成信息,HEAP DUMP BEGIN (39793 objec…

    可以在没有操作系统的情况下运行Java程序吗? - java

    我知道所有Java程序都由JVM执行。这使Java与所有操作系统兼容(一次编写,可在任何地方运行)。但是我可以在没有操作系统的情况下运行Java程序吗?也许只运行JVM?并且,如果可能,功能是否会受到任何影响?注意:我的主要问题是,java程序可以直接在硬件上运行(通过JVM)吗?我可以在计算机中“启动”任何低级别的JVM吗? java大神给出的解决方案 实…

    Java堆设置 - java

    在阅读有关性能调整的一些说明时,在设置内存大小时确实注意到了一个建议:Java应用程序应该将初始永久生成大小和最大永久生成大小调整为相同的值,因为增加或缩小永久生成空间需要完整的GC。在设置堆大小时也给出了类似的建议,即-Xmx=-Xms。我的问题是,那么为什么我们要完全设置-Xms? 也, 如果我对-Xmx和-Xms使用不同的值,而不是当我对-Xmx和-X…