gpt4 book ai didi

java - Oracle Hotspot JVM : generally, 哪些操作特别占用 CPU?

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:20 24 4
gpt4 key购买 nike

我想了解哪些类型的操作对 CPU 负载的贡献不成比例,以及对常见操作的相对成本形成直觉。为了尽量减少泛化,请假设使用 Oracle 7 HotSpot JVM。

例如:

  • 构造大量对象是否会消耗 CPU(我知道它会消耗内存 :-))?
  • 满足监视器会消耗 CPU 吗?也就是说,如果我们有多个线程试图进入同一个同步块(synchronized block),被阻塞的线程是否也会消耗 CPU 周期?
  • 上述操作的相对成本?例如,“新建单个对象与遍历 X 元素数组消耗相同的 CPU”

关于培养典型操作的相对 CPU 成本的直觉的任何提示?

您可以推荐关于该主题的任何好读物吗?

谢谢你,

澄清

感谢您的早期回复,但请注意我:

  • 我不是在问“为什么我的应用很慢”
  • 了解使用分析器将有助于识别特定应用中的问题,例如,GC 会耗尽 CPU,或者 GC 的老年代比 Eden 空间的成本更高
  • 了解大多数操作只有在大量执行时才会变得昂贵(即,如果谨慎使用,几乎没有任何操作是昂贵的)

相反,我正在寻找相对 CPU 成本的指导,尤其是 w.r.t.以上操作(让我们假设一个“网络规模”应用程序使用所有提到的相同数量的操作 - 很多)。

例如我现在已经:

  • 长方法调用链不会显着增加 CPU 负载(因此通常可以自由使用方法委托(delegate))
  • 抛出异常比使用条件更昂贵(因此后者通常是对性能高度敏感的代码中的流控制的首选)

...但是如何为监视器实例化新对象或内容呢?这些操作中的任何一个都会对 CPU 负载产生重要(主要?)贡献(假设我不关心延迟或堆大小)?

最佳答案

单个操作总是很快的。可测量的 CPU 负载一个操作被执行几千次甚至一百万或十亿次。因此,您要注意各种循环和大量递归调用。

通常,执行一百万次并不明显,因为明显的循环只执行了一百次。但是它调用了一个执行了一百次的函数,其中包含另一个执行了一百次操作的函数。这样你最终会得到运行一百万次的东西。在 Web 应用程序中,它会乘以并发请求的数量。

由于发现真正的热点并不容易,您可能希望使用 Java 的特殊性能分析工具来调查您的应用程序。通过这种方式,您可以了解哪些模式是 CPU 密集型的,哪些模式不是。

Java 中的另一件事是,如果您分配了很多无法快速释放的内存(无论是几 block 大块还是许多小块),那么垃圾回收可能会成为 CPU 的一大负担。使用大量字符串(例如,在处理 XML 时)可能是这样的原因。

但最好的办法确实是使用工具进行分析。

关于java - Oracle Hotspot JVM : generally, 哪些操作特别占用 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com