在此之前,我使用的是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。
详细介绍:静态列表是基于数据库构造的对象列表,因为它们将由更高层次结构的多个实例引用,我们正在考虑使这些对象保持静态,以便节省一些记忆。
答案 0 :(得分:0)
是否将字段声明为static
主要取决于字段的使用方式,并且结果会考虑内存因素。
通常,在类的每个实例中都会复制非static
字段。因此,如果您有10个不同的Test
个对象,则每个对象都有自己的audEntities
。但是,当字段为static
时,该字段是类本身的“一部分”,而不是该类的实例。因此,即使您有10个不同的Test
个对象,它们也会共享相同的balEntities
。
因此,如果出现以下情况,您将节省一些内存:
static
。如果你只有一个类的实例,那么内存使用量基本相同。
当然,在您宣布所有内容static
之前,您需要考虑您的字段是否是静态的。他们是否应该被允许改变不同的情况?也就是说,你可以有两个Test
对象,其中audEntities
应该是不同的吗?如果是,那么您不能声明audEntities
静态。