android - Java 安卓优化。非静态或静态方法?

标签 android performance optimization stack dalvik

我有一个静态类,里面有一个我运行了几百次的方法。目前,每次运行该方法时,它都会创建两个不同的堆栈对象。如果我要使该类成为非静态的,那么我可以在构造时创建两个堆栈,然后通过清除它们来重用它们,这样会更快吗?我想答案取决于创建一个新的堆栈对象与清除一个现有的堆栈对象(无论如何都可能是空的)以及清除它所带来的性能增益(如果有的话)是否大于使用非静态方法所带来的性能损失。

我已经尝试对两者进行分析,但似乎从来没有奏效,但这是另一个问题。

最佳答案

这取决于您在代码中如何使用静态变量和方法。

实例变量和对象存储在堆上。 局部变量存储在堆栈中。

静态变量存储在堆上的一个永久区域。垃圾收集器通过标记和清除对象来工作。加载类时,不能为垃圾回收选择静态变量。当相应的类加载器(负责加载此类)本身被收集为垃圾时,可以收集它们。

如果我有一个值要传递给另一个 Activity ,我会使用 Intent 而不是静态变量。

在自定义列表适配器中,我们使用静态 View 持有者。所以使用静态变量或方法取决于不同的情况。

您可以使用名为 MAT 分析器的工具分析对象的内存使用情况。下面的视频讨论了内存管理以及如何检测和解决内存泄漏

http://www.youtube.com/watch?v=_CruQY55HOk .

   MemoryInfo mi = new MemoryInfo();// current memory usage
  ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  activityManager.getMemoryInfo(mi);
  long availableMegs = mi.availMem / 1048576L;

http://developer.android.com/training/articles/perf-tips.html .请查看此链接以获取性能提示,尤其是Prefer Static Over Virtual 下的主题。

内存可用性是使用静态变量和方法以提高性能和避免内存泄漏时要考虑的标准之一。

关于android - Java 安卓优化。非静态或静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450345/

相关文章:

Android:WebView 提高本地 html 文件的加载速度

android - Qt5 Android 最大化应用

java - (Android)试图理解为什么我的方法不会在 TextView 中计算/显示正确的值

Python numpy 切片符号(逗号与索引)性能差异?

c# - 性能:Vector2 与 x/y

mysql - 查找没有满足特定条件的多对多子项的行

python - 如何使用优化算法找到可能的最佳参数

java - Activity_main.xml 未在 Android 中加载

performance - 读取 RDS 只读副本的 IOPS 限制?

c++ - 优化编译器消除错误