其他人引用的静态列表中的对象列出

时间:2018-04-19 11:59:22

标签: java object memory reference static

在此之前,我使用的是Java。话虽如此,让我先从示例代码开始。

public class Test {

    public void test(){
        List1 list1 = new List1();
        List2 list2 = new List2();
        for(int i = 0;i<1000;i++){
            list1.test1List.add(new Test1());
        }

        list2.test2List = new ArrayList<>();
        for(int i = 0;i<1000;i++){
            Test2 test2 = new Test2();
            list2.test2List.add(test2);
            for(int j = 0;j<1000;j++){
                if(j<i){
                    test2.add(list1.test1List.get(j));
                }
            }
        }
    }

    public class Test1{
        String test1 = "test1";
    }
    public class Test2{
        ArrayList<Test1> list;
        public Test2(){
            list = new ArrayList<>();
        }
        public void add(Test1 t){
            list.add(t);
        }
    }
}
public class List1{
    public static ArrayList<Test.Test1> test1List;

    public List1(){
        test1List = new ArrayList<>();
    }
}
public class List2 {
    public ArrayList<Test.Test2> test2List;
    public List2(){
        test2List = new ArrayList<>();
    }
}

我的类有两个对象,每个对象都有一个列表,其中一个是静态的。另一个列表引用了这个静态列表中的一些对象,在我使用简单条件的示例代码中,但是这个条件可能变得非常复杂。

这里的问题是:在我的非静态列表中,我有指向静态对象的对象。

那么,那些引用会使用一些内存(&#34;指针&#34;用法除外)? 当我的非静态列表增长时,我会通过使另一个列表静态来节省内存吗?

让我添加一个例子,我们可以看到非静态列表引用静态列表中的一些itens。

Exemple

详细介绍:静态列表是基于数据库构造的对象列表,因为它们将由更高层次结构的多个实例引用,我们正在考虑使这些对象保持静态,以便节省一些记忆。

1 个答案:

答案 0 :(得分:0)

是否将字段声明为static主要取决于字段的使用方式,并且结果会考虑内存因素。

通常,在类的每个实例中都会复制非static字段。因此,如果您有10个不同的Test个对象,则每个对象都有自己的audEntities。但是,当字段为static时,该字段是类本身的“一部分”,而不是该类的实例。因此,即使您有10个不同的Test个对象,它们也会共享相同的balEntities

因此,如果出现以下情况,您将节省一些内存:

  • 你有很多班级实例,
  • 该字段已声明为static

如果你只有一个类的实例,那么内存使用量基本相同。

当然,在您宣布所有内容static之前,您需要考虑您的字段是否是静态的。他们是否应该被允许改变不同的情况?也就是说,你可以有两个Test对象,其中audEntities应该是不同的吗?如果是,那么您不能声明audEntities静态。