首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java存储对象,而不是直接调用它的方法?

Java存储对象,而不是直接调用它的方法?
EN

Stack Overflow用户
提问于 2020-07-15 11:00:41
回答 1查看 99关注 0票数 0

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

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

代码语言:javascript
复制
Foo foo = new Foo();
foo.method();

实例化和直接调用方法

代码语言:javascript
复制
new Foo().method();

对于您将再次使用foo的情况,使用第一种方法是合理的。

但是,假设我们知道,至少对于当前的需求,foo只使用一次来调用method,以后就不再使用了。哪一种选择更适合,为什么?

我知道,响应可能是非常主观的,因此我不寻找理由,如较短的代码,可读性等(请随意添加他们,如果你想要)。相反,我主要是寻找基于性能、内存需求、垃圾收集等的参数,即使两者之间的差异可以忽略不计。

这个问题以前曾被问过,但我找不到任何讨论上述论点的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 11:43:27

我主要是寻找基于性能的参数,

没有什么不同。这个局部变量本质上是“自由的”。如果方法经常被调用,JIT编译器将优化局部变量,在任何情况下,rhe对象都是刚刚创建的,因此它的引用位于第一级缓存中。

内存需求,

如果优化器不删除它,则局部变量可能会占用线程调用堆栈上的额外空间字节。当方法返回时(如果不是更早的话),这个空间将被回收和重用。

垃圾收集,

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

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

代码语言:javascript
复制
Foo foo = new Foo();
foo.method();

,即使两者之间的差异可以忽略不计。

如果您在解释模式下运行(与编译到编译为本机模式不同),本地变量写和读(astoreaload字节码指令)的执行可能是可测量的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62913400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档