当前位置:  开发笔记 > 编程语言 > 正文

可以使用太多静态变量导致Java中的内存泄漏吗?

如何解决《可以使用太多静态变量导致Java中的内存泄漏吗?》经验,为你挑选了1个好方法。

如果我的应用程序有太多静态变量或方法,那么根据定义,它们将存储在堆中.如果我错了,请纠正我

1)在应用程序关闭之前,这些变量是否会在堆上?
2)他们可以随时使用GC吗?如果没有,我可以说它是内存泄漏?



1> Uri..:

静态方法只是方法,它们不存储在堆上,它们只是不使用"this"参数.

静态变量充当GC的"根".因此,除非您明确地将它们设置为null,否则只要程序存在,它们就会存在,所以从它们可以访问的所有内容都是如此.

如果您打算让内存变得空闲并且它不会被释放,那么情境只会被视为内存泄漏.如果您打算让静态变量在某个时间内包含对象的引用,并且在完成该对象时忘记将其设置为null,则可能最终会出现泄漏.但是,如果你把它放在静态变量中并且打算在程序运行时它就在那里,那么它绝对不是泄漏,它更可能是一个"永久单例".如果对象在你希望它仍然存在时被回收,那将是非常糟糕的.

至于你关于堆的问题:Java中的所有对象都存在于堆上或堆栈上.使用new运算符在堆上创建对象.然后将引用附加到它们.如果引用变为null或超出范围(例如,块结束),则GC意识到无法再次到达该对象并回收它.如果您的引用是在静态变量中,它永远不会超出范围,但您仍然可以将其设置为null或另一个对象.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有