设置虚拟机内存大小,以增加动态数组List的最大容量

List类似于动态数组,使用的时候不必考虑是否溢出, 可以一直动态增加的。那到底有没有个最大容量呢?有!当然List本身并没有属性或方法来说明最大容量。其最大容量与JAVA虚拟机内存大小有关,如果数组里的数据太多,会造成内存溢出。
我以我的机器测试下,当List里存放871056时,就抛出以下异常。

略....
871052
871053
871054
871055
871056
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.nio.CharBuffer.wrap(CharBuffer.java:350)
 at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:246)
 at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
 at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
 at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
 at java.io.PrintStream.write(PrintStream.java:476)
 at java.io.PrintStream.print(PrintStream.java:561)
 at java.io.PrintStream.println(PrintStream.java:700)
 at SelectMain.selectRedMinMaxSum(SelectMain.java:85)
 at SelectMain.selectRedBall(SelectMain.java:53)
 at SelectMain.main(SelectMain.java:629)

所以需要设置JAVA虚拟机内存大小,增加动态数组List的最大容量。以eclipse开发工具为例
打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed JREs,在右边选择前面有对勾的JRE,再单击右边的Edit按钮,
出现一个 Edit JRE 的对话框,在其中的Default VM Arguments: 框中输入 -Xms512m -Xmx1024m ,这样设置Java拟虚机内存使用最小是512M,最大是1024M,再单击OK关闭Edit JRE 对话框,如下所示


扩展阅读
Java虚拟机(JVM)中的内存设置详解:http://developer.51cto.com/art/200906/127144.htm





### Java 容器的最大容量限制 Java容器的设计考虑到了灵活性和性能,在实现上并没有严格的固定最大容量限制。然而,实际使用中存在一些理论上的边界条件。 对于`ArrayList`这类基于数组实现的容器而言,由于内部采用的是Object[]类型的数组结构,而Java虚拟机(JVM)规定了数组的最大长度为`Integer.MAX_VALUE - 8`(大约2^31-9),这是因为创建数组时需要额外的空间来保存元数据[^1]。 哈希表型容器如`HashMap`则引入了不同的机制——“负载极限”。当元素数量增长到一定程度使得当前填充比例超过了预设的负载因子(默认0.75),就会触发扩容操作(rehashing),即增大底层数组尺寸并重新分布键值对。理论上讲,只要内存充足,这种动态调整策略可以让`HashMap`容纳几乎无限多的数据项[^3]。 需要注意的是,尽管从编程接口上看似乎不存在硬性的上限约束,但在实践中还需考虑到物理资源的实际可用性和效率问题。随着容器规模的增长,访问速度可能会受到影响;而且过大的单个对象也可能引发OutOfMemoryError异常。 ```java // 创建一个非常大的 ArrayList 实例作为演示目的 List<Integer> largeList = new ArrayList<>(); try { for (int i = 0; ; ++i) { // 使用死循环尝试不断添加元素直到失败为止 largeList.add(i); } } catch (OutOfMemoryError e) { System.out.println("超出 JVM 或者系统的内存限制"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值