Java中的字节数组的内存使用
发布时间:2020-12-14 05:05:00 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java process memory check test2 对于启发式预计算表,我需要一个具有1504935936个条目的字节数组.这应该占用大约1.5 GB的内存. public class Main{ public static void main(String[] args){ byte[] arr = new byte[1504935936]; }} 为什么我
参见英文答案 >
Java process memory check test2
对于启发式预计算表,我需要一个具有1504935936个条目的字节数组.这应该占用大约1.5 GB的内存. public class Main{ public static void main(String[] args){ byte[] arr = new byte[1504935936]; } } 为什么我有一个“OutOfMemoryError:Java堆空间” – 异常,如果我给程序2 GB的RAM与 java -Xmx2048M Main 同 java -Xmx2153M Main 有用.为什么需要这么多RAM? 解决方法
可能是因为Java堆被程序中的其他数据使用和分段.
该字节数组需要在Java堆空间中分配为一个连续的1.5 GB内存块. (这不是Java语言规范所要求的,但是AFAIK是当前所有JVM实现的实际工作方式.)您的某些堆空间正在被消耗,并且可能更重要的是被程序中发生的其他内存分配分段分配大字节数组.那个java -Xmx2153M Main可能会让你的整个堆有一个连续的1.5 GB的空间留给你的时间到你分配的时间有多大. 如果你将这个大阵列砍成100个小的数组,它的大小就是1/100,因为它不像堆碎片那么敏感. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |