当变量变为字段,堆栈变为堆时,过程是什么?
问题描述:
我有一个方法当变量变为字段,堆栈变为堆时,过程是什么?
public static RelationEntityWrapper findRelationByUserId(){
//situation 1
List<ObjectA> list = new ArrayList();
ObjectA a1= new ObjectA();
ObjectA a2= new ObjectA();
list.add(a1);
list.add(a2);
//situation 2
Relations.add(list);
}
public Relations(){
public static LinkedBlockingQueue relationToDBQueue=new
LinkedBlockingQueue<ObjectA>(1024*1024);
static{
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
ObjectA info = relationToDBQueue.take();
}catch(Exception e){}
}
}}}
public static void add(List<ObjectA> list) {
try {
for(ObjectA o :list)
relationToDBQueue.add(o);
} catch (Exception e) {
e.printStackTrace();
}
}
}
情况1
列表中,A1,A2均为方法的变量,所以它们将存储在栈
情况2
方法变量将更改为存储在关系的字段relationToDBQueue中, list,a1,a2变量将会将他们的堆栈内存复制到堆中?情况是什么?
感谢您的所有建议。
答
Java对象永远不会存储在堆栈中。总是堆。但通常,这些对象在堆栈上有引用。在你的例子中,这些引用是从堆栈复制到堆的。
Offtopic:在您的评论为什么ArrayIndex ...问题有116个upvotes。简单:A)写得很好,指出核心问题B)很久以后,当人们做得很好时,他们把每一个新的ArrayIndex都做了。所以当然,这个问题引起了很多关注。我没有看到有什么不妥。 – GhostCat