java - 在Java中,在多次调用的非静态方法中将局部变量设置为final会导致内存泄漏吗?

标签 java memory-leaks final

例如,假设我们有:

    public void doThis() {
        final Foo foo = Foo.getInstance();
        ... initialize foo somehow...
        baz(Bar.getInstance(foo)); // adds Bar instance to something
        ... bar will be popped from some list, used, and disposed of...
    }

这种情况会发生内存泄漏吗?

我只是不明白最终局部变量的真正含义。难道只是意味着局部变量不能被重新赋值,仅此而已吗?声明它是否为final,将其放在java堆/内存中的某个位置,这样它就像一个实例变量,但具有不同/唯一的?特别是因为内部/嵌套类可以使用最终局部变量,但不能使用非最终局部变量?

最佳答案

没有。如果没有 final 就没有内存泄漏,那么就不会有 final 的内存泄漏。

final 对局部变量(在 Java 8 中)1 所做的唯一事情是阻止您为变量分配超过一次。

1 在 Java 7 及更早版本中,还有另一个与内存泄漏无关的效果。

关于java - 在Java中,在多次调用的非静态方法中将局部变量设置为final会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936862/

相关文章:

java - 配置 CheckStyle 而不是 Final 进行局部变量赋值

java - Android Java 文件创建 java.io.FileNotFoundException(文件名太长)

java - 在单个 lambda 表达式中将元素添加到不同的集合

c++ - 内存泄漏 C++

android - 位图大小超出了 Android 上的 VM 预算错误

ios - 分析器在检测内存泄漏方面真的值得信赖吗?

java - 更改 Java 中的最终字段

java - 您可以使用 JAX-RS/Jersey 进行传统的 Servlet 过滤吗?

java - 诱惑报告: Failed test written with Citrus displayed as ‘Broken’

java - 在 Java 中声明方法参数 final 是否有任何性能原因?