静态变量的内存范围

时间:2014-09-16 18:26:27

标签: java performance memory

我有一个如下定义的类

final public class Results {
    THashSet<String> filteredHashtags;

约束:我知道将变量声明为静态或非静态是一个设计问题,并且不应该由内存使用来控制,但是HashSet filteredHashtags会占用大量内存(&gt; 1Gb)所以我可以用较低的内存使用量来降低可读性。

选项

  1. 非静态:截至目前,由于以下原因,我将其保持为非静态:我创建了一个类实例,使用构造函数为filteredHashtags赋值。由于我只创建了一个类的实例,因此它在类所使用的内存方面并不重要。当不再引用该对象时,变量使用的内存将被释放。

  2. 静态:就代码的可读性而言,我宁愿保持静态,因为它更好地与代表的物理量相关。但是在这种情况下,我需要使用函数为静态变量赋值,让我们说setValues(...)。

  3. 问题:

    1. 我的假设是,在静态情况下,与程序关联的内存在程序终止之前永远不会被释放吗?
    2. 如果是,除了设置filteredHashtags = null;
    3. 之外,还有更好的释放内存的方法吗?

1 个答案:

答案 0 :(得分:2)

Rishi,你假设在静态情况下,与变量相关的内存永远不会被释放,直到程序终止为止。是不正确的。 Static属于类,类由加载器加载。因此,可以回收静态变量使用的内存。