有人告诉我,Android 操作系统将所有函数调用存储在一个堆栈中。即使程序功能正确,这也可能导致许多问题并在运行时导致“打嗝”,对吗?
那么问题来了,我们怎样才能防止这种情况发生呢?显而易见的解决方案是减少功能化,以及其他明智的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等......
还有其他方法吗?或者这只能通过程序员仔细编写代码来完成?JVM/JIT 是否会在编译时自动优化字节码来解决这个问题?
非常感谢您的回复!!
有人告诉我,Android 操作系统将所有函数调用存储在一个堆栈中。即使程序功能正确,这也可能导致许多问题并在运行时导致“打嗝”,对吗?
那么问题来了,我们怎样才能防止这种情况发生呢?显而易见的解决方案是减少功能化,以及其他明智的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等......
还有其他方法吗?或者这只能通过程序员仔细编写代码来完成?JVM/JIT 是否会在编译时自动优化字节码来解决这个问题?
非常感谢您的回复!!
有人告诉我,Android 操作系统将所有函数调用存储在一个堆栈中
这几乎是所有编程语言的工作方式,并且这种情况已经持续了 30 或 40 年。
即使程序功能正确,这也可能导致许多问题并在运行时导致“打嗝”,对吗?
不,但如果堆栈空间不足,可能会导致异常。
那么问题来了,我们怎样才能防止这种情况发生呢?
你怎么能防止事情发生?
堆栈空间不足的第一大罪魁祸首是视图层次结构太深。用于hierarchyviewer
检查您的活动,并计算视图层次结构中有多少级别,从PhoneWindow$DecorView
最远的叶节点到最远的叶节点。如果达到 15 左右,您可能会用完堆栈空间。在这种情况下,请简化您的 UI,例如将嵌套替换LinearLayouts
为RelativeLayout
.