变量更改为字段,堆栈更改为堆时的过程是什么?

时间:2017-05-09 03:54:38

标签: java memory-management jvm heap-memory

我有一个方法

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

list,a1,a2都是方法的变量,所以它们存储在堆栈中

情况2

方法变量将更改为存储在Relations&field; field relationToDBQueue中, list,a1,a2变量会将堆栈内存复制到堆中吗?情况是什么过程?

感谢您的所有建议。

1 个答案:

答案 0 :(得分:1)

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