我现在正在学习JVM内存模型。我有一个问题:
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 operation.So,allocation1,allocation存储在
testAllocation()的堆栈框架??
但有一点很清楚,就是数组值存储在 java heap 中,对吗?
答案 0 :(得分:1)
使方法保持静态不会改变存储变量的位置。
在testAllocation()
结束时,堆栈上将有四个引用(allocation1,allocation2,allocation3和allocation4)。
这四个引用将引用存储在堆上的四个字节数组。