【问题标题】:Cost of Inheritance Java (Android)继承 Java (Android) 的成本
【发布时间】:2011-11-16 14:29:44
【问题描述】:

我正在构建一个针对 Android 的 ORMLite 扩展。

我想做的事

我想用模型重现 Doctrine 和 Symfony 在 PHP 中实现的一种行为。 一句话:

  • 从一个 yml 文件生成一堆带有访问器的 BaseModel 类 以及不会改变的事情。
  • 让真实模型继承自this BaseModel 以便用户更改即使从 yml 重新生成模型也可以保留。

我的问题

我想知道在实践中尝试在 Android 上实现这样的目标是否是好的,或者这是否会在性能方面存在风险(大量使用继承)。

如果您认为它很笨拙,我怎么能允许用户更改 .yml 文件,生成模型,而不是从头开始重建他的模型的自定义方面。 我知道这可以通过一些“技巧”来完成,但我真的不想重新发明轮子。

编辑

对不起,我忘了补充:我正在使用 python 来做这个。

谢谢

【问题讨论】:

    标签: java android python performance inheritance


    【解决方案1】:

    这是正确的,并且可能是唯一的 Java 方式。在 Java 中,所有调用都是虚拟的,除非你到处使用final,但这意味着你甚至不能使用接口。因此,无论您做什么,大多数呼叫都可能是虚拟调度。继承不会招致任何其他重大损失。

    此外,Android 设备通常非常强大,几乎可以肯定不需要以牺牲程序的可读性和可维护性为代价来挤出微小的性能。事实上,大多数 android 设备几乎和 web 服务器一样强大,它们用慢得多的 PHP 做同样的事情,并且仍然管理着成千上万的用户,而 Android 设备只为一个用户提供服务。

    【讨论】:

    • 是的,我知道,但是与标准方法解析(没有继承)相比,方法解析的成本是多少?它会影响性能还是认为它会这样做是没有目的的?
    • @lc2817:Java 中的所有调度都是虚拟的,方法是否重载都没有关系。
    • 为什么要谈重载?所以你的意思是继承除了很小的内存开销之外没有任何成本?
    • 所以基本上你认为在这种情况下关注继承成本是没有用的,因为它在其他因素面前可以忽略不计?
    • @lc2817:是的,我确实认为与其他因素相比,继承成本可以忽略不计。此外,在您实施和分析它之前,您无法真正说出这些因素是什么。因此,您应该只注意避免在非平凡的数据集上使用过于复杂的算法,而将其他所有内容留到您有工作实施并真正发现您确实需要加快速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-05-11
    • 1970-01-01
    • 2011-10-04
    • 2011-09-26
    相关资源
    最近更新 更多