【发布时间】:2020-07-15 11:00:41
【问题描述】:
在 Java 中可以有两种方法调用方法:
在调用方法之前实例化和存储对象。
Foo foo = new Foo();
foo.method();
实例化并直接调用方法
new Foo().method();
对于您最终会再次使用foo 的情况,采用第一种方法是有意义的。
但是,假设我们知道至少对于当前要求,foo 仅用于调用method 一次,并且再也不会使用。哪个选项更适合?为什么?
我了解响应可能非常主观,因此我不是在寻找诸如更短的代码、可读性等原因(如果您愿意,请随时添加它们)。相反,我主要寻找基于性能、内存要求、垃圾收集等的参数,即使差异可以忽略不计。
之前有人问过这个问题,但是我找不到任何讨论上述论点的问题。
【问题讨论】:
-
如果这是该方法的典型用法,那么可能
Foo应该是单例。或者method()应该是静态的。 -
本质上没有性能差异。选择可读性。
-
@ernest_k 我在这里考虑一个一般情况。我不在乎 Foo 是否是单例或方法是否是静态的。但是为了争论,我们假设它是非静态和非单例的。构造函数也可以参数化。我说的是一个特定情况,可以说它只使用一次。
-
@AndyTurner 我觉得由于对象永远不会存储在变量中,它会影响垃圾收集和内存空间。数量可能可以忽略不计,但仍然有微小的改善。只是一个假设,我在这里肯定是错的。
-
@kernel0707 字节码有所不同,因为在第一种情况下有一条附加指令存储在变量中。但是,重要的是要记住 JVM 不必逐字执行字节码:如果它看到不必要的变量分配,它可以跳过它。 JVM 非常聪明:不要试图猜测什么会更好。
标签: java performance object garbage-collection instance