gpt4 book ai didi

Java - 读取具有特定jvm大小的文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:19 24 4
gpt4 key购买 nike

我创建了一个仅包含字符“a”的 .txt 测试文件。文件大小约为 20 MB。我尝试用三种方式读取文件

使用BufferedReader

String fileName = "C:\\testFile.txt";
FileReader fileReader = new FileReader(fileName);

try (BufferedReader bufferedReader = new BufferedReader(fileReader)) {
String line;

while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}

使用扫描仪

 Scanner sc = null;

try {

sc = new Scanner(new File("C:\\testFile2.txt"), "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println(line);
}

if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {

if (sc != null) {
sc.close();
}
}

并且,使用 Java8 流

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
}

我使用 eclipse 运行配置设置 jvm 堆大小,如下所示 http://www.planetofbits.com/eclipse/increase-jvm-heap-size-in-eclipse/

在所有三种情况下,我的值​​都是:-Xms5M -Xmx100M。

尽管文件大小为20MB,但总是给出java.lang.OutOfMemoryError。当我将堆大小设置为 -Xmx200M 时,它对所有人来说都运行良好。我想知道是什么消耗了内存,以及是否有另一种更有效的内存方式来读取文件。

感谢任何帮助。

编辑分析

谢谢兰恩和亚当。我确实使用 Jprofiler 来扫描代码。内存使用情况如图所示 the char[] array takes a lotOverAll memory usage

有趣的是,char[] 数组占用了这么多空间。不知道为什么!

旁注:现在我已更改测试文件以包含整数和换行符,因此每一行都包含一个随机整数。完成此操作后,我可以使用 Scanner 轻松读取文件(即使大小为 100MB),因为它一次只能读取一行。以前,文件中只有字符“a”,没有新行。

最佳答案

回答您的问题的最佳方法(imo)是使用内存分析工具(例如Java VisualVM)检查您的应用程序或JProfiler 。这些应用程序将允许您检查程序的内存是如何分配的,也许还可以让您查看哪里使用了过多的内存。

关于Java - 读取具有特定jvm大小的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979340/

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