【问题标题】:How to make reasonable assumptions about stack works如何对堆栈工作做出合理的假设
【发布时间】:2015-11-28 06:19:10
【问题描述】:

例如,给定一个 openCV 应用程序,1920*1080 HD at rate 60 fps 涉及到过滤、二次采样等的组合。(如果你不熟悉这个也没关系...)

一般来说,我怎样才能找到应用程序的关键内存存储?我不知道如何根据什么来找出答案。

【问题讨论】:

    标签: java android opencv embedded embedded-linux


    【解决方案1】:

    如何对堆栈的工作做出合理的假设

    您无需做出假设。 JVM规范(抽象级别)中记录了它,抽象到具体的映射是常识。

    一般来说,我怎样才能找到应用程序的关键内存存储?

    假设您询问堆栈空间使用情况:

    • 预测堆栈使用的(理论)方法是分析代码以找出所有可能的调用路径。然后对于每个调用路径上的每个方法调用,计算单独的堆栈帧使用量(对局部变量的空间 + 参数 + 调用开销求和),并对所有调用求和。最大堆栈使用量是调用路径总和的最大值。

    • 实际的方法是运行应用程序,看看它实际需要多少堆栈内存;即设置特定的堆栈大小并查看应用程序是否因StackOverflowError 而崩溃。

    对于堆内存,预测使用情况更加困难,除非您的应用程序的内存使用模式简单且稳定。即使测量它也很棘手。


    当然,这些东西可能高度依赖于应用程序、平台,并且依赖于应用程序的“输入”。

    我的建议:不要尝试。很难获得足够可靠且有用的数字。

    【讨论】:

    • 谢谢!是否需要缓存多少数据(如流的总和)可以大致考虑应用程序所需的内存?
    • 可能是,可能不是。这取决于各自的库是如何实现的
    猜你喜欢
    • 2014-08-16
    • 2018-10-18
    • 2013-02-16
    • 2011-05-12
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-01-05
    • 2018-02-25
    相关资源
    最近更新 更多