做了个实验,放了976043个个长度的字符串内存才暴掉import java.util.ArrayList; import java.util.List;public class TestMemory { public static void main(String args[]) { List<String> lst = new ArrayList<String>(); while (true) { lst.add(Long.toString(System.currentTimeMillis()).substring(3)); System.out.println("List size:" + lst.size()); System.out.println("free memory:" + Runtime.getRuntime().freeMemory() / 1024 + "K"); } } }
如果你想存更多的数据可以设置 jvm 内存大小java -Xms64m -Xmx256m YourMainClass -Xms是设置内存初始化的大小 -Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)上面我这个程序这样设了以后能跑3百多万条数据 List size:3392918 free memory:20798K Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2760) at java.util.Arrays.copyOf(Arrays.java:2734) at java.util.ArrayList.ensureCapacity(ArrayList.java:167) at java.util.ArrayList.add(ArrayList.java:351) at com.fansy.test2009.test.TestMemory.main(TestMemory.java:10)
List size:976354 free memory:0K Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.lang.StringBuilder.toString(StringBuilder.java:430) at 内存泄露.TestMemory.main(TestMemory.java:12)
应用中没用到如此大的数据放在一个 Vector里
做了个实验,放了976043个个长度的字符串内存才暴掉import java.util.ArrayList;
import java.util.List;public class TestMemory {
public static void main(String args[]) {
List<String> lst = new ArrayList<String>();
while (true) {
lst.add(Long.toString(System.currentTimeMillis()).substring(3));
System.out.println("List size:" + lst.size());
System.out.println("free memory:"
+ Runtime.getRuntime().freeMemory() / 1024 + "K");
}
}
}
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)上面我这个程序这样设了以后能跑3百多万条数据
List size:3392918
free memory:20798K
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at com.fansy.test2009.test.TestMemory.main(TestMemory.java:10)
入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引
数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList
差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数
据时只需要记录本项的前后项即可,所以插入速度较快。
100001
200001
300001
400001
500001
600001
700001
776037
Java heap space
两者都会的,内存溢出
free memory:0K
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at 内存泄露.TestMemory.main(TestMemory.java:12)