java - 斐波那契练习中的堆错误

标签 java

我被赋予了一项简单的任务,即编写一个程序,该程序将从给定文件中找到所有斐波那契数,然后返回最大和最小的数。 不幸的是,在尝试执行 Java 堆空间错误时。 我真的不知道错误在哪里,所以你能帮我一下吗? 以及如何避免在未来重复同样的错误。

    package maturaWielkanoc;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class Zad4 {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(1);
        int counter = 1;
        while (list.get(list.size() - 1) < 908589244) {
            //908589244 is one bigger than the biggest number in dane.txt
            list.add(list.get(counter) + list.get(counter));
        }
        try (BufferedReader br = new BufferedReader(new FileReader("dane.txt"))) {
            String line;
            List<Integer> answer = new ArrayList<>();
            while ((line = br.readLine()) != null) {
                int value = Integer.parseInt(line);

                if (list.contains(value)) {
                    answer.add(value);
                }
            }
            answer.sort(null);
            System.out.println("Min = " + answer.get(0));
            System.out.println("Max = " + answer.get(answer.size() - 1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

最佳答案

您的应用程序将使用固定数量的内存运行,而 List 将在内存中存储和保存数据,不断填充它。您将继续向列表中添加整数,看不到尽头。

快速谷歌显示一个带框的整数是 8 个字节,您的上限是 908589244 个整数。相反,让我们假设您尝试存储 10 亿个整数,即 8 GB,这将很快填满您的堆。

这个任务显然是关于内存管理的一课。您将希望找到一种更好的方法来保存数据并维护最大和最小的斐波那契数,而不是将它们全部存储在内存中(考虑在从文件中读取每个值而不是添加到列表时评估每个数)。

关于java - 斐波那契练习中的堆错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574532/

相关文章:

java - 有没有办法在 Java 中声明方法 "friendly"?

java - 具有特定颜色的 JPanel 绘图

java - 链接多个MapReduce作业时,每个作业的输出是否写入HDFS?

java - 如何检测 akka actor 终止是由于系统关闭造成的并避免重新启动它

java - Spring Boot中分项目的使用方法

java - 如何通过Maven添加hadoop依赖?我已经安装了 hadoop 并存在于我的 IDE 项目库中

java - 是否可以在 appWidget 中重用 RemoteView 而不是每次都创建新的?我该如何存储它们?

java - 为什么创建从Internet下载gradle.zip的Gradle项目?

java - 方法 max lines 的最新建议是什么?

java - Jersey 客户端发送 application/json 类型的字符串