【问题标题】:Android performance: useless global variables vs inheritanceAndroid 性能:无用的全局变量 vs 继承
【发布时间】:2016-12-10 21:29:04
【问题描述】:

假设我有一个扩展 A 的对象 A 和 B。 B 具有与 A 无关的全局变量(一个数组和一些计数器)。

由于显式转换的成本很高(我不确定多少),从纯粹的性能观点来看,仅在需要时才创建一个 A 类并创建一个数组会更好,这样我就不必演员?

我想问题是,一个对象的全局变量是否需要花费任何东西,即使未使用?

编辑:显然忘记添加最重要的...功能了。

【问题讨论】:

    标签: android performance inheritance


    【解决方案1】:

    近年来,继承经常被视为代码异味,因为它会导致不同的问题: https://dzone.com/articles/is-inheritance-dead

    如果我们用纯粹的性能术语来说,一个空数组在 RAM 中占用大约 8 个字节(4 个字节存储长度和 4 个字节一个引用,但它有点依赖于平台:How much space does an array occupy?)。因此,即使您有一千个这样的对象,一个数组字段也将占用大约 1_000 * 8 字节 ~ 8 KB 的 RAM。

    您可能知道,如今的手机通常包含 > 1 GB 的 RAM。但是,不要忘记您的应用程序通常需要 60 到 192 MB 的 RAM (Detect application heap size in Android)。

    在任何情况下,不计算你添加到类中的每一个小字段就足够了。

    但是,回到我的第一句话,我建议您考虑使用组合而不是继承来解决问题,正如 Effective Java 中所建议的那样

    更新
    关于性能,我建议您阅读此主题:The performance impact of using instanceof in Java您确定需要这种类型的过早优化吗?还是理论问题多于实际问题?

    【讨论】:

    • 要回答这个问题,使用一个类在性能方面会更好吗?
    • 这取决于:1)您将拥有的对象数量 2)您的用例:您将如何使用这些对象。你能用这些附加信息更新你的问题吗?
    【解决方案2】:

    显然,不,不要将两个类混合在一个 A 类中。从不。正如你提到的,数组与 A 类无关。所以不要把它放在 A 中。

    接下来,在你的情况下,向下转换是一个点,它告诉:等等程序员,你想多想一点吗?有时,有一个不需要向下转换的解决方案。但是

    因为显式转换成本很高

    我不这么认为。有一些基准和扩展告诉我们,不,这里没有很大的不同。

    expansion

    benchmark

    所以。按照第一个解决方案...

    【讨论】:

    • 如果演员阵容失败怎么办?
    • @zuokuok 使用instanceof 关键字处理
    【解决方案3】:

    由于显式转换成本很高(我不确定多少),会不会 更好,从纯粹的性能 pov,只创建一个 A 类和 仅在需要时才创建一个数组,这样我就不必强制转换?

    除了关于选角成本的可疑声明之外,也许我有误解,但这对我来说是个危险信号。如果您的设计涉及将对象转换为子类,则可能以其他方式更好地设计。我不能说什么没有看到更多,但需要铸造通常是设计失败的标志*。正如 Gaket 所暗示的,组合可能会更好,或者可能会有其他一些变化——工厂模式?

    其次,只有当您注意到性能问题或有真正的理由认为会出现性能问题时,您才应该关注性能问题。处理器所做的几乎所有事情都会非常快,除非它完成了很多次(比如数百万次)。您的性能问题(除非您的程序在某些方面不寻常)很可能是 I/O 或内存。然后在确定性能瓶颈后,修复它的步骤是:

    1. 测量
    2. 设定目标
    3. 修复
    4. 测量

    不要遗漏任何步骤。

    *我知道强制转换是 Android 编程的核心部分,因为每次获取 View 时都必须强制转换,我想知道是否有更好的方法来做到这一点,但这就是我们坚持的问题

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2016-03-01
      • 2013-03-05
      相关资源
      最近更新 更多