gpt4 book ai didi

Java JVM 根据操作系统保持内存分配

转载 作者:行者123 更新时间:2023-12-01 15:52:17 24 4
gpt4 key购买 nike

我在 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 的内存...但是一旦读取完成...内存就会再次下降!!!!

这是一个主要问题...我需要整个字节数组保留在 Activity 内存中。

谢谢你,哎呀

<小时/>

我修改了代码,使用基本数组类型 int[][] 和 float[][] 来保存数据,而不是保留包含 int 和 float 的对象的 ArrayList。

这样做,我发现我的java内存没有被交换(所以,我猜堆内存的处理方式与这里的堆栈有点不同)[哦,我也将所有代码更改为静态类型 - 我知道,非常糟糕的编程风格]

我现在遇到的问题是如何处理我的 HashMap...我尝试构建查找表的所有尝试都失败了,构建运行时间为 O(n^2)!

最佳答案

进程内存的哪些部分保留在 RAM 中以及哪些部分换出是由操作系统决定的,而不是由 JVM 决定的。一般来说,操作系统会将经常访问的内存保留在 RAM 中 - 如果不是,为什么需要它在那里?

可能有操作系统 API 允许您将某 block 内存“固定”在 RAM 中,但 Java 不公开此功能。

但根据您的要求,您应该考虑使用文件 memory-mapped而不是明确地阅读它。它可能会快得多。

关于Java JVM 根据操作系统保持内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com