2017-05-09 72 views
0

我有一个方法当变量变为字段,堆栈变为堆时,过程是什么?

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变量将会将他们的堆栈内存复制到堆中?情况是什么?

感谢您的所有建议。

回答

1

Java对象永远不会存储在堆栈中。总是堆。但通常,这些对象在堆栈上有引用。在你的例子中,这些引用是从堆栈复制到堆的。

+0

Offtopic:在您的评论为什么ArrayIndex ...问题有116个upvotes。简单:A)写得很好,指出核心问题B)很久以后,当人们做得很好时,他们把每一个新的ArrayIndex都做了。所以当然,这个问题引起了很多关注。我没有看到有什么不妥。 – GhostCat