Android内存使用情况 - 我是否需要使静态变量无效?

时间:2016-05-27 22:37:27

标签: java android memory-management memory-leaks static-members

我目前正在对我的应用程序进行内存扫描,我只是快速询问在不再需要该类时如何处理类中的public static变量。一个例子是网络请求:

public class NetworkRequest {

    public static String URL = "www.somestring.com/endpoint?withsomeparameters=true"

    public void perform(){
         // the rest of the request logic...
    }
}

在我开始这样的课程之后:

NetworkRequest networkRequest = new NetworkRequest();

networkRequest.perform();
networkRequest = null;

我的public static字段是否阻止此类正确地进行垃圾回收?

然后又回答同样的问题:

  • public static final
  • private static
  • private static final

再次感谢您的帮助

2 个答案:

答案 0 :(得分:1)

没有。您的课程在不再使用时可以进行垃圾回收。该静态字段是使用String的类,而不是使用类的String。

答案 1 :(得分:1)

不,该静态成员没有问题。如果无法访问垃圾收集器仍然可以为该对象执行其工作。

  

Java中的所有对象都存在于堆上或堆栈上。对象   使用new运算符在堆上创建。然后引用   附在他们身上。如果引用变为null或超出范围   (例如,块结束),GC意识到无法到达   那个对象再一次回收它。如果你的参考是在   静态变量,它永远不会超出范围,但你仍然可以设置它   为null或另一个对象。

静态变量用作"根"到GC。因此,除非您明确地将它们设置为null,否则只要程序存在,它们就会存在,所以从它们可以到达的所有内容都可以使用。