如何对堆栈工作做出合理的假设
How to make reasonable assumptions about stack works
例如,给定一个 openCV 应用程序,1920*1080 HD 速率 60 fps 涉及过滤、子采样等的组合。(如果您对此不熟悉也没关系...)
一般来说,如何找到应用程序的关键内存存储?我不知道如何根据什么找出答案。
How to make reasonable assumptions about stack works
你不需要做假设。在JVM规范中有记载(在抽象层面),抽象到具体的映射是常识。
Generally speaking, how can I find key memory storage for an application?
假设您询问的是堆栈 space 用法:
预测堆栈使用的(理论上的)方法是分析代码以找出所有可能的调用路径。然后对于每个调用路径上的每个方法调用,计算单独的堆栈帧使用情况(局部变量的 space + 参数 + 调用开销的总和),以及所有调用的总和。最大堆栈使用量是调用路径总和的最大值。
实用的方法是运行应用程序,看看它实际需要多少堆栈内存;即设置特定的堆栈大小并查看应用程序是否因 WhosebugError
.
而崩溃
对于堆内存,预测使用情况更加困难,除非您的应用程序的内存使用模式简单且稳定。即使测量它也很棘手。
当然,这些东西很可能高度依赖于应用程序、平台,并且依赖于 "inputs" 到您的应用程序。
我的建议:不要尝试。很难获得可靠到有用的数字。
例如,给定一个 openCV 应用程序,1920*1080 HD 速率 60 fps 涉及过滤、子采样等的组合。(如果您对此不熟悉也没关系...)
一般来说,如何找到应用程序的关键内存存储?我不知道如何根据什么找出答案。
How to make reasonable assumptions about stack works
你不需要做假设。在JVM规范中有记载(在抽象层面),抽象到具体的映射是常识。
Generally speaking, how can I find key memory storage for an application?
假设您询问的是堆栈 space 用法:
预测堆栈使用的(理论上的)方法是分析代码以找出所有可能的调用路径。然后对于每个调用路径上的每个方法调用,计算单独的堆栈帧使用情况(局部变量的 space + 参数 + 调用开销的总和),以及所有调用的总和。最大堆栈使用量是调用路径总和的最大值。
实用的方法是运行应用程序,看看它实际需要多少堆栈内存;即设置特定的堆栈大小并查看应用程序是否因
WhosebugError
. 而崩溃
对于堆内存,预测使用情况更加困难,除非您的应用程序的内存使用模式简单且稳定。即使测量它也很棘手。
当然,这些东西很可能高度依赖于应用程序、平台,并且依赖于 "inputs" 到您的应用程序。
我的建议:不要尝试。很难获得可靠到有用的数字。