数组内存长度与内存溢出问题.
数组长度定义与内存溢出问题.
public static void main(String[] args) {
/*
* Exception in thread “main” java.lang.OutOfMemoryError: Java heap space at
* day01.day08.main(day08.java:6) 内存溢出
*/
//三亿五千两百三十二万一千五百三十二 封顶
int[] arr1 = new int[352321532];
//八百二十五万九千二百五十 封顶
int[] arr2 = new int[8259250];
//两百零六
int[] arr3 = new int[206];
//六
int[] arr4 = new int[6];
}
我的发现:
1:经过我的测试arr1数组最大长度为三亿五千万,我将长度推算到了个位,在加一就会报出“内存溢出错误”。
2:数组长度分配空间依次递减。arr2,arr3,arr4我都将长度的极限推算至各位,在加一就会报出“内存溢出错误”。
3:直接运行程序不会报错,断点调试程序会报错
我的理解:
(1)最初我以为java分配的堆内存空间是固定不变的,我设想将第一个数组长度设置为最大后,内存会被第一个数组占满无法再为后续数组或其他容器分配内存空间。但结果显示我依然可以继续进行分配,经过询问我得知是垃圾回收机制在起作用,过多的无用对象引用会在程序运行过程中被清扫释放内存空间。
(2)至于为什么后续数组依然可以分配内存空间,但长度在依次递减我还不得而知
(3)直接运行程序时java的垃圾回收机制会在程序的运行过程中运行,所以不会报出内存溢出错误。
断点调试程序时,垃圾回收机制不会启动