【问题标题】:Processing cost of making a new reference to an already-created object?对已创建对象进行新引用的处理成本?
【发布时间】:2013-07-27 21:42:05
【问题描述】:

我正在制作一个游戏,我需要知道有多少汽车正在与玩家的汽车联系,以及哪些汽车。我的计划是创建一个List,并在必要时添加和删除汽车。

这是我的问题。我的Car 课程的创建成本非常高(处理能力方面)。为汽车创建reference 的成本是多少?我知道在 C++ 中我所说的叫做指针。这是代码中的示例:

Car newCar = new Car(); // expensive
Car carCopy = newCar.clone(); // expensive
Car referenceNewCar = newCar; // expensive?

referenceNewCar 应该指向与newCar 相同的内存位置,对吧?所以它不必初始化任何东西,并且说newCar.changeMemberVariableTo(1)referenceNewCar.changeMemberVariableTo(1)是一样的;无论哪种方式,newCarreferenceNewCar 都会受到影响,因为它们指向内存中的同一个位置。

我认为创建一个新的引用比创建一个全新的Car 更便宜。它快多少?例如,如果创建一个新的Car 需要 3 秒,那么创建对同一辆车的新引用几乎是瞬间的吗?

提前致谢。

【问题讨论】:

  • 是的,它是瞬时的。

标签: java memory reference


【解决方案1】:

将引用从一个变量复制到另一个变量是非常便宜的。它可能与复制 intlong 值一样便宜(取决于有关 JVM 的一些事情)。

您所拥有的只是两个具有完全相同值的变量 - 一个引用。该值将非常小(在大多数实现中为 4 或 8 个字节),复制它通常不需要比复制字节更多的努力。

(我偷偷怀疑 一些 JVM 可能比这更聪明一些;为了垃圾收集,一些 JVM 可能会更新关于最老一代的标志例如,对特定对象的引用 - 但这会因实现而异,无论如何我的记忆可能是错误的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多