2014-04-21 58 views
0

我现在正在学习JVM内存model.I有一个问题:对象引用变量(a中)存储在哪里?

package com; public class TestAllocation { private static final int _1MB = 1204*1024; public static void main(String[] args){ testAllocation(); } public static void testAllocation(){ byte[] allocation1,allocation2,allocation3,allocation4; allocation1 = new byte[2 * _1MB]; allocation2 = new byte[2 * _1MB]; allocation3 = new byte[2 * _1MB]; allocation4 = new byte[2 * _1MB]; } } 那么,哪里的参考allocation1,allocation2存储?由于testAllocation()是一个静态的方法,所以,这个函数里面的变量存储在方法区域?但是每次调用一个函数时,都是 push/pop操作。于是,allocation1,allocation is存储在
堆栈帧testAllocation()

但有一点很清楚,就是数组值,存储在java堆,对不对?

回答

1

使方法静态不会改变其变量的存储位置。

testAllocation()的末尾,堆栈上将有四个引用(分配1,分配2,分配3和分配4)。

这四个引用将引用存储在堆上的四个字节数组。