java - 在 Android 上调用方法的成本

标签 java android performance jvm android-runtime

我创建了一个只在一个地方调用的方法 - 从 RecyclerView 中的 onBindViewHolder()。它是一个逻辑代码单元,我认为将该代码块提取到一个方法中可以提高可读性。但是,在代码审查期间,我被告知方法调用的开销很大,因此会对性能产生负面影响,我应该内联代码而不是将其放在单独的方法中。

我认为 JVM 或编译器会通过内联方法来优化此代码,但我不确定在 Android 上是否如此。我还没有真正找到任何关于新 ART JVM 进行何种优化的具体信息。

在 Android 上调用一个方法是否非常昂贵,以至于我应该在可能多次调用该方法的地方以可读性为代价避免它?此外,由于 DEX 方法的限制,创建这样的一次性方法是否令人不悦? (此应用已在使用 multidex)。

这个问题不是其他类似 java 问题的重复,因为我专门询问 Android 上的性能,它有自己的特性。

最佳答案

我完全不同意。理论上,方法调用确实会增加一些开销。必须将事物压入堆栈,然后跳转到该方法。但开销微不足道。

过早的优化从来都不是一个好主意。对您的应用程序进行基准测试并找出真正的性能问题所在。我敢肯定,这不会是因为单个方法调用,即使是被频繁调用的方法。该方法如何实现可能是个问题,但不是调用本身。

关于java - 在 Android 上调用方法的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751914/

相关文章:

java - 读取文本文件在 IDE 中有效,但在 .jar 中无效

Java 将集合的集合导出到 Excel

android - 类型不匹配 : inferred type is <no name provided> but Callback<Post! >!预计

java - Map<Integer, String> 还是 String[]?

mysql - mysql主键和lucene索引哪个更快

java - 将 URL 重定向到另一个应用程序

java - java类中可以写多少个变量,多少个方法,java方法中可以写多少行代码?

android - ActionBarSherlock 作为项目中的 Jar

java - 使用 SharedPreferences 在两个应用程序之间共享数据

arrays - 为什么在具有 240 个或更多元素的数组上循环时会产生很大的性能影响?