我被告知Android OS将所有函数调用存储在堆栈中。这可能会导致很多问题,并导致运行时出现“打嗝”,即使程序功能正常,是否正确?基于函数调用堆栈优化Android App代码的方法?
所以问题是,我们如何防止这种情况发生?显而易见的解决方案是减少功能,以及其他合理的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等等......
虽然有其他方法吗?或者这只能通过编程人员仔细的代码来完成? JVM/JIT会在编译时自动优化字节码来解释这个吗?
非常感谢您的回复!
我被告知Android OS将所有函数调用存储在堆栈中。这可能会导致很多问题,并导致运行时出现“打嗝”,即使程序功能正常,是否正确?基于函数调用堆栈优化Android App代码的方法?
所以问题是,我们如何防止这种情况发生?显而易见的解决方案是减少功能,以及其他合理的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等等......
虽然有其他方法吗?或者这只能通过编程人员仔细的代码来完成? JVM/JIT会在编译时自动优化字节码来解释这个吗?
非常感谢您的回复!
我已经告诉Android操作系统店 所有功能在栈调用
这是几乎所有的编程语言的工作方式,而且一直如此持续30年或40年。
这会导致很多问题,并在运行时 导致“打嗝”, 即使程序功能 正确,是否正确?
不,但如果堆栈空间用完,可能会导致异常。
所以问题是,我们该如何防止 这种情况发生?
如何防止什么发生?
堆栈空间不足的头号罪魁祸首是视图层次太深。使用hierarchyviewer
检查您的活动,并计算视图层次结构中有多少级别,从PhoneWindow$DecorView
到最远的叶节点。如果你达到15左右,你可能会用完堆栈空间。在这种情况下,简化您的UI,例如用RelativeLayout
替换嵌套的LinearLayouts
。
有趣的问题。请记住,虽然Android设备不运行Java字节码。 Java被编译成Dalvik可执行文件(与Java不同,它是基于寄存器的架构而不是基于Stack的)。 – 2010-05-28 19:01:15