java什么使用了更多的内存,一个类对象还是该类的一个实例?
我在为餐馆提供的菜肴做模型。我可能会做一个像这样的菜类:
class Dish
attr_accessor :name, :price, :ingredients, etc...
def initialize(dish_name, dish_price, etc...)
name= dish_name
price= dish_price
end
end
关于内存使用,为每个Dish Dish.new("Chicken Curry", ...)
创建Dish的实例,还是创建一个新的类来对Dish class ChickenCurry < Dish; ...; end;
进行子类化更好?当这两种方法在硬件资源上选择时,还有什么要考虑的事情吗?
为了澄清起见,ChickenCurry类只包含一个构造函数,其中设置了适当的字段,如下所示:
class ChickenCurry < Dish
def initialize
super("Chicken Curry", ...)
end
end
哪个使用了更多的资源,Dish.new
还是ChickenCurry.new
?差别可以忽略吗?我计划拥有数千个这样的对象,所以即使是10 KB的差异也值得考虑
我使用JRuby,所以请在回答时考虑JVM,但是也欢迎Matz Ruby的回答。
这不是关于设计的问题。我只对资源使用感兴趣
# 1 楼答案
不要担心记忆力,要问自己的主要问题是:你的
ChickenCurry
是否有任何行为扩展了Dish
的行为?如果你的答案是否定的(就像你说的只有构造函数),那么只使用一个类让你的系统清晰易懂
记住这一点:
“过早优化是万恶之源”——唐纳德·克努特
# 2 楼答案
继承的全部目的是,子类从超类继承普通的东西,并添加它们需要的更具体的东西
为什么一个
Chicken Curry
应该有一个字段文件sugarQuantity
,而它不会有任何糖。所以,我想你应该使用继承来进行一个好的OO设计,所以有一个超类,它将有共同的东西,然后每个子类将继承共同的东西,并为其添加更具体的东西如果你把所有的东西都放在一个类中,那么它会导致代码滥用,产生很多不必要的字段
简而言之,根据您的情况,您需要使用Inheritance和Cohesion的概念来进行良好的OO设计
当然,在构建菜肴对象时,使用继承会减少内存使用
对象是类的运行时表示,它将根据类中字段的内存需求占用内存。尽量减少字段的数量(通过继承和实际实现),这样会占用很好的内存。如果你把所有的东西都放在一节课上,那么肯定会有一个非常糟糕的记忆脚印
认为在同一个类中有1000个字段,而在创建对象时,所有1000个字段都将占用一些内存空间,根据它们的数据类型。
通过继承和内聚,您可以拥有更好的内存占用和OO设计
我是素食者:)