什么使用更多内存,Class对象或该类的实例?

时间:2015-11-12 18:29:27

标签: java ruby jruby

我正在模仿餐厅供应的菜肴。我可能会做一个像这样的Dish类:

class Dish  
  attr_accessor :name, :price, :ingredients, etc...
  def initialize(dish_name, dish_price, etc...)
    name= dish_name
    price= dish_price
  end
end

关于内存使用情况,为每个菜创建一个Dish实例({1}},或者创建一个子类Dish,Dish.new("Chicken Curry", ...)的新类更好吗?在硬件资源方面选择这两种方法时还有其他需要考虑的事项吗?

为了澄清,ChickenCurry类只包含一个构造函数,它设置了相应的字段,如下所示:

class ChickenCurry < Dish; ...; end;

哪个使用了更多资源class ChickenCurry < Dish def initialize super("Chicken Curry", ...) end end Dish.new?差异可以忽略不计吗?我计划拥有数千个这样的对象,所以即使10 KB的差异值得考虑。

我正在使用JRuby,所以请在回答时考虑JVM,但也欢迎有关Matz的Ruby的答案。

这不是关于设计的问题。我只对资源使用感兴趣。

2 个答案:

答案 0 :(得分:0)

继承的全部目的是从超类继承常见事物并添加更多特定事物的子类。

为什么Chicken Curry在没有任何糖时应该有一个字段文件sugarQuantity。所以,恕我直言,你应该使用继承来做一个好的OO设计,所以有一个超级类,它将有共同的东西,然后每个子类将继承公共,并添加更具体的。

如果您将所有内容放在一个类中,那么会导致代码滥用,并且会有如此多的不必要的字段。

简而言之,根据您的情况,您需要使用 Inheritance Cohesion 的概念来制作良好的OO设计。

  

什么使用更多内存,Class对象或该类的实例?

当您构建菜肴的对象时,绝对使用继承将导致较少的内存使用。

对象是类的运行时表示,它将根据类中字段的内存要求占用内存。尽量减少字段数量(通过继承和实际实现),您将获得良好的内存占用。如果你把所有东西放在一个班级中,那么肯定会有一个非常糟糕的记忆足迹。

考虑到在同一个菜单类中有1000个字段,并且在创建对象时,所有1000个字段将根据其数据类型占用一些内存空间。

通过继承和凝聚力,您可以拥有更好的内存占用+ OO设计。

P.S。:我是素食主义者:)

答案 1 :(得分:0)

不要担心记忆,要问自己的主要问题是:ChickenCurry是否有任何延伸Dish行为的行为?如果你的答案是否定的(就像你说的那样只有构造函数)那么只使用一个类。

让您的系统清晰易懂。

请记住这一点:

“过早优化是所有邪恶的根源”--DonaldKnuth