敲代码的时候突然遇到这样的问题,假如现在我把虚拟机参数设置为-Xms2M -Xmx3M (设置虚拟机初始内存为2M,最大内存为3M)
各位请看,我在test1和test2方法中都循环创建10次,大小为1M的byte数组对吧。但是test1方法是写byte[] bb = null,test2是写byte[] bb = new byte[1024 * 1024 * 1]。这两种写法有什么实际区别?为什么运行test1就出现OutOfMemory异常,但是运行test2就没问题呢?
按照我自己的理解是,在test1方法中我声明了一个引用,byte[] bb,但是未指向任何有效内存。然后进入循环后,引用bb将会循环指向新分配的内存,但是上个循环分配的内存由于没有引用,不是会被GC清理掉嘛。test2里面声明的byte[] bb = new byte[1024 * 1024 * 1]不是属于一个强引用嘛,不会被GC回收,那为什么循环创建不会内存溢出?