java使用哪种语法来提高性能和资源利用率
在阅读了几篇关于如何微调代码的文章后,我发现我们声明对象和变量的方式可能会严重影响应用程序的性能。这一点越来越重要,因为时间限制现在已成为Android平台某些方面不可或缺的一部分(例如,某些操作的结果必须在5秒内提供)
现在,我在我的一个片段类中发现了以下代码(功能完善):
Activity myA = getActivity();
if(myA instanceof MainActivity) {
((MainActivity) myA).doNext();
}
知道对象创建/销毁和资源分配是导致耗尽设备电池的一些因素,我想将代码重写为:
if(getActivity() instanceof MainActivity) {
((MainActivity ) getActivity()).doNext();
}
从功能的角度来看,两种代码都提供相同的结果。然而,什么是最合适的方法?我这样问是因为我看到了这两种方法的优缺点,我无法找到评估性能的适当方法,也不清楚应该对哪些计数器(内存使用、函数速度、CPU使用周期等)进行评估
提前感谢您的贡献
# 1 楼答案
猜测什么可能是性能瓶颈是一种非常常见的浪费时间的行为。你必须衡量什么对你的整个计划产生了影响,而不是猜测
创建一些对象并不重要。创建太多的对象。多少是太多,哪些对象创建得最多,这是您应该使用探查器来确定的
你的感觉是最简单的。我认为将方法
doNext
添加到getActivity()
返回的类中是最好的,这样您就可以编写以下内容了使用CPU和内存分析器,或者为系统的不同组件编写性能测试
如果你不能使用分析器,我会从简单的时间流逝开始。i、 e.系统。nanoTime()。这通常就是你所需要的
# 2 楼答案
如果每次调用getActivity()时都返回不同的对象,则第二个版本不正确,,如果不正确,则第二个版本只是多余的。两者都不是选择第二个版本的理由,也没有其他理由选择第二个版本。正如Pater Lawrey所说,不要浪费时间去猜测性能问题在哪里。量
# 3 楼答案
声明/赋值不是Java中的对象创建。它只在堆栈上放置引用。第一个更清晰,可能更快(
getActivity
只调用一次)# 4 楼答案
如果
getActiviy
不创建新对象,而是根据某些条件返回已创建的对象,并且不是计算密集型的,则第二种方法更好。然而,如果每次调用getActivity
时都创建新对象和/或getActivity
是计算密集型的,则第一种方法更好# 5 楼答案
取决于
getActivity()
做什么。这两段代码的区别在于,第二段调用函数2次。函数调用本身非常快,但函数正在执行的操作可能不快如果您不确定这个函数是什么,您可以使用第一个函数,尽管第二个函数更具可读性