我在 Windows 7 64 位上运行 1.6.0_25 64 位。
我试图让 JVM 以最大内存运行,因为我的应用程序非常占用内存......但遗憾的是......内存分配没有建立,并且有很多来自 Windows 的页面错误继续带来下一组中的虚拟内存。
我正在运行 java -Xms2G -Xmx3G 测试
以下代码是我尝试将整个文件带入......这样我就不会遇到页面错误来读取。
File f = new File("veryLARGEfile.txt");
FileInputStream in = new FileInputStream(f);
int i = (int) f.length();
System.out.println("Bytes in file: " + i);
byte[] file = new byte[i];
i = in.read(file);
System.out.println("Bytes read: " + i);
这样做我可以看到,在 Windows 任务管理器中,系统在读取文件时达到了 2G 的内存......但是一旦完成读取......内存又回落了!!!!
这是一个主要问题......我需要整个字节数组留在活动内存中。
谢谢你,哎
我修改了代码以使用基本数组类型 int[][] 和 float[][] 来保存我的数据,而不是保留包含 int 和 float 的对象的 ArrayLists。
这样做,我发现我的 java 内存没有被交换(所以,我猜堆内存的处理方式与这里的堆栈有点不同)[哦,我确实将所有代码也更改为静态类型 - 我知道,非常糟糕编程风格]
我现在遇到的问题是如何处理我的 HashMap ......我尝试构建查找表的所有尝试都以 O(n^2) 运行时间来构建失败!!!