【问题标题】:How many function calls per second?每秒多少次函数调用?
【发布时间】:2016-08-05 13:29:23
【问题描述】:

我正在编写一个对实时生成的数据进行操作的 java 应用程序。

数据是以每秒大约 30 个浮点数生成的一系列浮点数,我正在搜索数据中的特定模式,并希望在尽可能短的时间内找到并做出反应。

也就是说,我不能让进程等待一些数据缓冲,而是在收到新浮点数后立即对累积的序列进行操作(与以前的浮点数进行比较)

每次分析该系列导致大约5-6个java函数调用。

现在,数据速率为每秒 30 个样本,程序以每秒 180 个函数调用的速度运行!

这个速率是低效的吗?一段时间后会导致堆栈溢出还是对现代硬件安全?如果这是一个非常高的比率,还有什么其他策略可以使用

【问题讨论】:

  • 堆栈溢出只有在你不断堆叠方法时才会发生(因此得名),这意味着你必须递归调用函数来实现这一点。
  • 比函数调用更有趣的是函数的作用。大部分时间将在那里度过。为什么不做一些性能测量?
  • @GergelyKőrössy 堆栈上的太多函数调用没有足够快地返回可能会填满堆栈并导致溢出
  • 只要你不是每秒都在线程中产生你的操作,否则不是因为它是连续的。

标签: java function call


【解决方案1】:

在您的 JDK 文件夹中的 bin 下,您可以找到一个名为 jvisualvm.exe 的应用程序,该应用程序可以让您监控多项内容。您有 CPU/Heap/Classes 和 Threads 的一般图表。它还提供了线程的状态概述,这对您来说可能不是那么有趣。但是如果您发现性能问题,采样器可能会更深入地了解堆栈/堆。

如果您在主线程上运行您的操作,您可以选择在自己的线程中处理它。

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2011-11-06
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2018-02-16
    相关资源
    最近更新 更多