为什么创建一个大型Java阵列会消耗如此多的内存?

Man*_*lva 4 java memory arrays

为什么以下行

    Object[] objects = new Object[10000000];
Run Code Online (Sandbox Code Playgroud)

导致JVM使用大量内存(~40M)?有什么方法可以在分配数组时了解VM的内部工作原理吗?

Jon*_*eet 22

好吧,它为10000000个引用分配了足够的空间,以及数组对象本身的少量开销.

实际大小将取决于虚拟机-但它肯定不会奇怪,它占用的内存相当数量的...我预计至少 40MB,并且大概80MB的64位虚拟机,除非它是使用压缩哎呀为阵列.

当然,如果使用那么多不同的对象填充数组,那将占用更多,更多的内存......但是数组本身仍然只需要用于引用的空间.


Ale*_*ort 17

"很多记忆"是什么意思?你分配10000000个指针,每个指针占用4个字节(在32位机器上) - 这大约是40mb的内存.

  • 是的...你好,基础数学!它占用了它应该具有的确切内存量. (2认同)