在Java中,可以有两种方法来调用方法:
在调用方法之前实例化和存储对象。
Foo foo = new Foo();
foo.method();实例化和直接调用方法
new Foo().method();对于您将再次使用foo的情况,使用第一种方法是合理的。
但是,假设我们知道,至少对于当前的需求,foo只使用一次来调用method,以后就不再使用了。哪一种选择更适合,为什么?
我知道,响应可能是非常主观的,因此我不寻找理由,如较短的代码,可读性等(请随意添加他们,如果你想要)。相反,我主要是寻找基于性能、内存需求、垃圾收集等的参数,即使两者之间的差异可以忽略不计。
这个问题以前曾被问过,但我找不到任何讨论上述论点的问题。
发布于 2020-07-15 11:43:27
我主要是寻找基于性能的参数,
没有什么不同。这个局部变量本质上是“自由的”。如果方法经常被调用,JIT编译器将优化局部变量,在任何情况下,rhe对象都是刚刚创建的,因此它的引用位于第一级缓存中。
内存需求,
如果优化器不删除它,则局部变量可能会占用线程调用堆栈上的额外空间字节。当方法返回时(如果不是更早的话),这个空间将被回收和重用。
垃圾收集,
如果有一个局部变量指向活动线程中的堆栈帧,则GC通常不会收集对象。对于长期运行的方法,这可能很重要:使用局部变量意味着对象将活得更长。对于短时间运行的方法,几乎没有区别。
等
使用局部变量,可以在任何一行上设置调试器断点。这允许您在创建对象之后和方法调用之前检查对象的状态。如果没有局部变量,就必须深入挖掘:
Foo foo = new Foo();
foo.method();,即使两者之间的差异可以忽略不计。
如果您在解释模式下运行(与编译到编译为本机模式不同),本地变量写和读(astore和aload字节码指令)的执行可能是可测量的。
https://stackoverflow.com/questions/62913400
复制相似问题