Java 被其他列表引用的静态列表中的对象

Java 被其他列表引用的静态列表中的对象,java,object,memory,reference,static,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()); } li

首先,我使用的是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<>();
    }
}
公共类测试{
公开无效测试(){
List1 List1=新List1();
List2 List2=新的List2();

for(int i=0;i是否将字段声明为
static
主要取决于字段的使用方式,因此需要考虑内存问题

通常,类的每个实例中都会复制一个非
静态
字段。因此,如果您有10个不同的
测试
对象,则每个对象都有自己的
实体
。但是,当字段是
静态
时,该字段是类本身,而不是类的实例。因此,即使您有10个不同的
Test
对象,它们都共享相同的
balEntities

因此,在以下情况下,您将节省一些内存:

  • 您有许多类的实例,并且
  • 该字段声明为
    静态
如果该类只有一个实例,那么内存使用量基本相同


当然,在声明所有
static
之前,您需要考虑您的字段是否应该是静态的。是否允许它们针对不同的实例进行更改?也就是说,您是否可以有两个
Test
对象,其中它们的
audentials
应该是不同的?如果是,则不能声明
aud实体
静态。

我不明白你的问题是什么。当我的非静态列表增长时,我将通过使另一个列表保持静态来节省内存?我通过添加AuditEntity和BalanceEntity类扩展了代码示例,这可能会澄清问题。使用此新代码,使List1列表保持静态似乎不会为我节省任何内存但是引用该列表的对象似乎比引用新实例更好。我已经测试过:(1)List1 list静态(2)非静态(3)引用新的List1()对象而不是List1.test1List.get(j)。结果:(1)和(2)使用相同的内存,而(3)使用更多(很多)如果
test1List
不是
static
:每次你说
new List1()
,你都在创建一个新的
test1List
。如果
test1List
static
:无论你说“new List1()”有多频繁,您只有一个
test1List
。如果您还有一个问题,能否明确您到底想知道什么?您问题中的文本与您的代码示例不再匹配。没关系,您的答案帮助很大,如果我不能正确地将我的问题外包出去,我很抱歉