Java 存储一个对象还是直接调用它的方法?

Java storing an object vs directly calling its method?

在Java中可以有两种调用方法的方法:

在调用方法之前实例化和存储对象。

Foo foo = new Foo();
foo.method();

实例化直接调用方法

new Foo().method();

对于最终会再次使用 foo 的情况,采用第一种方法是有意义的。

但是,假设我们知道至少对于当前要求 foo 仅用于调用 method 一次并且永远不会再次使用。哪个选项更适合,为什么?

我知道响应可能非常主观,因此我不是在寻找诸如更短的代码、可读性等原因(如果你愿意,可以随意添加它们)。相反,我主要是根据性能、内存要求、垃圾收集等寻找参数,即使差异可以忽略不计。

之前有人问过这个问题,但是我找不到任何讨论上述论点的问题。

I am primarily looking for arguments based on performance,

没有区别。这个局部变量本质上是“自由的”。如果方法被频繁调用,JIT编译器会将局部变量优化掉。反正对象是刚创建的,所以它的引用在一级缓存

memory requirements,

如果优化器不删除它,局部变量可能会在线程调用堆栈上占用一些额外的 space 字节。此 space 在方法 returns 时被回收和重用,如果不是更快的话。

garbage collection,

GC 通常 如果有一个局部变量从实时线程中的堆栈帧指向它,则不会收集对象。对于 long 运行 方法,这可能很重要:使用局部变量意味着对象将存活更长时间。对于简短的 运行 方法,几乎​​没有区别。

etc

使用局部变量,您可以在任意一行上设置调试器断点。这允许您在对象创建之后和方法调用之前检查对象的状态。如果没有局部变量,您将不得不深入挖掘:

Foo foo = new Foo();
foo.method();

even if the difference is negligible.

如果你运行处于解释模式(相对于编译到编译为本机),执行局部变量写入和读取(astoreaload字节代码说明)可能是可测量的。