有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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的回答。

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


共 (2) 个答案

  1. # 1 楼答案

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

    让你的系统清晰易懂

    记住这一点:

    “过早优化是万恶之源”——唐纳德·克努特

  2. # 2 楼答案

    继承的全部目的是,子类从超类继承普通的东西,并添加它们需要的更具体的东西

    为什么一个Chicken Curry应该有一个字段文件sugarQuantity,而它不会有任何糖。所以,我想你应该使用继承来进行一个好的OO设计,所以有一个超类,它将有共同的东西,然后每个子类将继承共同的东西,并为其添加更具体的东西

    如果你把所有的东西都放在一个类中,那么它会导致代码滥用,产生很多不必要的字段

    简而言之,根据您的情况,您需要使用InheritanceCohesion的概念来进行良好的OO设计

    What uses more memory, a Class object or an instance of that class?

    当然,在构建菜肴对象时,使用继承会减少内存使用

    对象是类的运行时表示,它将根据类中字段的内存需求占用内存。尽量减少字段的数量(通过继承和实际实现),这样会占用很好的内存。如果你把所有的东西都放在一节课上,那么肯定会有一个非常糟糕的记忆脚印

    认为在同一个类中有1000个字段,而在创建对象时,所有1000个字段都将占用一些内存空间,根据它们的数据类型。

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

    我是素食者:)